Makine kodu JIT'leri ve Yürütme Devre Dışı Bırakma biti


10

CPU / işletim sisteminde bir Yürütme Devre Dışı Bit varsa, çalışma zamanı tarafından oluşturulan makine kodu (bir JIT çıkışı gibi) aslında CPU tarafından yürütülür?

Gibi bildiğim kadarıyla, birçok modern işlemciler ve İşletim Sistemleri bir NX için destek herhangi adreste saklanır önler makine kodu, (Intel ve ARM dahil), bit dahil diğer çalıştırılmak üzere bir derlenmiş ikili kod bölümünde daha. Açıkçası, bu güzel bir güvenlik avantajıdır, çünkü kabuk kodu enjeksiyon saldırılarını önler.

Ancak, dinamik olarak makine kodu üreten LLVM gibi JIT motorları bu sorunu nasıl çözüyor?


LLVM'de nasıl yapıldığını görmek için Memory :: tahsisMappedMemory uygulamalarına göz atın. - * nix için - Windows için
zr01

Yanıtlar:


6

Linux ve birçok Posix sistemlerinde, bir uygulama süreci bazı aralığının korunması değiştirebilir adres alanı içinde sanal bellek kullanarak mmap'e (2) ve mprotect (2) syscalls.

Böylece JIT motoru bunları kullanabilir (muhtemelen makine kodunun yayılmasından önce , ancak belki de bundan sonra ).

BTW, bazı mimarilerde, CPU önbelleğini yeni kullanılabilir makine kodu segmentleri, örneğin __builtin_clear_cacheGCC hakkında bilgilendirmeniz gerekebilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.