Compiler construction JIT编译器如何操作

Compiler construction JIT编译器如何操作,compiler-construction,jit,Compiler Construction,Jit,根据定义,JIT编译器会动态生成代码以供执行。但在Windows中,我们有各种各样的保护,防止自修改代码或从数据内存(DEP)执行 那么JIT编译器如何能够动态生成代码呢?他们要求操作系统提供一些可读、可写和可执行的内存 e、 g.您可以使用mmap()和PROT_READ | PROT_WRITE | PROT_EXEC(POSIX)或VirtualAlloc()和PAGE_EXECUTE_READWRITE(Windows)分配此类内存 关于一个真实的例子,请参见LLVM的(;)。可能的重复

根据定义,JIT编译器会动态生成代码以供执行。但在Windows中,我们有各种各样的保护,防止自修改代码或从数据内存(DEP)执行


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

他们要求操作系统提供一些可读、可写和可执行的内存

e、 g.您可以使用
mmap()
PROT_READ | PROT_WRITE | PROT_EXEC
(POSIX)或
VirtualAlloc()
PAGE_EXECUTE_READWRITE
(Windows)分配此类内存


关于一个真实的例子,请参见LLVM的(;)。

可能的重复(真正可能是因为这可能意味着更广泛,而这个问题只能间接地回答它)参见。Whewt,我已经认为我找不到这个问题的答案。到目前为止,我只发现“你可以用它来自我修改代码,这是邪恶的,走开吧!”但当然,如果是这样的话,像java这样的语言会相当慢