Как работают JIT-компиляторы - PullRequest
3 голосов
/ 22 мая 2011

JIT-компиляторы по определению генерируют код на лету для исполнения.Но, скажем, в Windows, у нас есть все виды защиты, которые предотвращают самоизменение кода или выполнение из памяти данных (DEP).

Так как же компиляторы JIT могут генерировать код на лету?

1 Ответ

7 голосов
/ 25 мая 2011

Они запрашивают у ОС некоторую память для чтения, записи и выполнения.

например, вы можете выделить такую ​​память, используя mmap() с PROT_READ | PROT_WRITE | PROT_EXEC (POSIX) или VirtualAlloc() с PAGE_EXECUTE_READWRITE(Windows).

Реальный пример см. В LLVM llvm::sys::Memory::AllocateRWX ( Реализация Unix ; Реализация Windows ).

...