JIT 编译器如何运行
根据定义,JIT 编译器会即时生成代码以供执行。但在 Windows 中,我们有各种保护措施来防止自我修改代码或从数据内存 (DEP) 执行。
那么 JIT 编译器如何动态生成代码呢?
JIT compilers, by definition, generate code on the fly for execution. But in, say, Windows, we have all kinds of protection that prevent self modifying code or executing from data memory (DEP).
So how is it possible for JIT compilers to generate code on the fly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
他们向操作系统请求一些可读、可写和可执行的内存。
例如,您可以使用
mmap()
和PROT_READ | 来分配此类内存。保护_写 | PROT_EXEC
(POSIX),或VirtualAlloc()
与PAGE_EXECUTE_READWRITE
(Windows)。有关真实示例,请参阅 LLVM 的
llvm::sys::Memory::AllocateRWX
(Unix 实现; Windows 实现)。They ask the OS for some memory which is readable, writeable and executable.
e.g. you can allocate such memory using
mmap()
withPROT_READ | PROT_WRITE | PROT_EXEC
(POSIX), orVirtualAlloc()
withPAGE_EXECUTE_READWRITE
(Windows).For a real example, see LLVM's
llvm::sys::Memory::AllocateRWX
(Unix implementation; Windows implementation).