【问题标题】:How JIT Compilers OperateJIT 编译器如何操作
【发布时间】:2011-05-22 10:38:24
【问题描述】:

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

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

【问题讨论】:

  • JIT compilation and DEP 的可能重复项(确实可能,因为这可能意味着更广泛,而这个问题只能间接回答)
  • 另见this question
  • 哇,我已经以为我找不到答案了。到目前为止我只发现“你可以用这个来自我修改代码,那是邪恶的,走开恶魔!”但是当然,如​​果是这样的话,像 java 这样的语言会相当慢。 :)

标签: compiler-construction jit


【解决方案1】:

他们向操作系统请求一些可读、可写和可执行的内存。

例如您可以使用 mmap()PROT_READ | PROT_WRITE | PROT_EXEC (POSIX) 或 VirtualAlloc()PAGE_EXECUTE_READWRITE (Windows) 分配此类内存。

有关真实示例,请参阅 LLVM 的 llvm::sys::Memory::AllocateRWX (Unix implementation; Windows implementation)。

【讨论】:

    猜你喜欢
    • 2011-07-17
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多