2009-07-04 19 views
6

JVM/CLR, JIT'i yerel kod nasıl derler? Bazı kod enjeksiyonları veya kodları yürütülebilir belleğe kopyalamak mı? Dinamik kod yürütülmesine izin veren sistem çağrıları nelerdir?Yerel kod yürütme, JVM/CLR

cevap

2

ortak dil çalışma zamanı JIT kod yönetilen ve yerli kod veya bir yerli saplama işaret girişleriyle her tip için bir methodtable vardır:

zaman emin olmak istiyorsanız, kaynağın daha iyi bir yanıt var daha sonra, sadece oluşturulan yerel koda işaretçi ile metodu düzeltin.

MSDN CLR JIT derleyicisi nasıl çalıştığını

This blog entry by Dave Notario açıklar MethodDesc bölümünde ayrıntılı bir explanation bir daha vardır.

3

CACAO VM'da (JIT-JVM araştırması) nasıl yaptığımızı açıklayabilirim. İlk olarak, bir yöntemin makine kodu, bazı yığın-ayrılmış bellek bloğunda oluşturulur. Derlemeden sonra, son kod uzunluğu bilinir ve mmap ve PROT_EXEC bayrağını (ilgili CACAO kodu here) kullanarak bir yürütülebilir bellek parçası ayrılır. Daha sonra makine kodu mmapped alanına kopyalanır. Bundan sonra, birçok mimariye, makineye özgü önbellek temizleme mekanizması gerekir. Örnek olarak, PowerPC 64 için cache-flushing function'a bir göz atın. Özellikle i386 ve x86_64'te yapılacak bir şey yoktur. Bu adımdan sonra, işlemci yeni üretilen kodu yürütmeye hazırdır. Alternatif olarak, önceden ayrılmış bellek sayfaları, mprotect ile yürütülebilir olarak işaretlenebilir. mmap/mprotect un Unix tesisleri olduğunu unutmayın.

+0

DEP ve veri ve çalıştırılabilir kodun net olarak ayrıştırılması ve bu yürütülebilir belleğin yazılması ve veri belleğinin atlanamaması/çalıştırılamaması göz önüne alındığında, CLR/JIT ile Win32 sistemlerinde nasıl yapıldığına hala çok ilgi duyarım. . – Abel

+1

@Abel [this] (http://blogs.msdn.com/b/vcblog/archive/2009/05/21/dynamicbase-and-nxcompat.aspx) makalesini ilginç bulabilirsiniz. – ghord

İlgili konular