JIT编译器根据定义,可以动态生成代码以供执行。但是,在Windows中,我们提供各种保护,阻止自我修改代码或从数据存储器(DEP)执行。
那么JIT编译器如何动态生成代码呢?
答案 0 :(得分:7)
他们向操作系统询问一些可读,可写和可执行的内存。
e.g。您可以使用mmap()
PROT_READ | PROT_WRITE | PROT_EXEC
(POSIX)或VirtualAlloc()
PAGE_EXECUTE_READWRITE
(Windows)来分配此类内存。
有关实例,请参阅LLVM的llvm::sys::Memory::AllocateRWX
(Unix implementation; Windows implementation)。