JIT编译器如何运作

Jav*_*Man 3 compiler-construction jit

根据定义,JIT编译器可以动态生成代码以供执行.但是,在Windows中,我们提供各种保护措施,可防止自行修改代码或从数据存储器(DEP)执行.

那么JIT编译器如何动态生成代码呢?

Mat*_*ery 7

他们向操作系统询问一些可读,可写和可执行的内存.

例如,你可以分配使用这种内存mmap()PROT_READ | PROT_WRITE | PROT_EXEC(POSIX),或VirtualAlloc()PAGE_EXECUTE_READWRITE(Windows)中.

有关实际示例,请参阅LLVM llvm::sys::Memory::AllocateRWX(Unix实现 ; Windows实现).