【发布时间】:2011-03-22 07:49:41
【问题描述】:
“考虑一个典型的 Windows x86 或 AMD64架构,内存为 分为可执行部分 不能写入和数据部分 可以写但不能 执行(想想 DEP)。”
"JIT 在内存中编译方法, (通常)不存储任何东西 磁盘,而是将它移动到哪里 下一条指令指针可以到达 它,改变当前指令 指针(指向 JIT)指向 到新生成的代码,然后 执行它。”
这两段虽然有点过于简单化了,但基本上是我对JIT和Windows内存模型的理解。我也知道,当我尝试手动将一些可执行代码复制到内存中并尝试执行时,我通常会做不到(除非使用 DLL 注入)。
JIT 设计者是如何克服这个障碍的?他们是使用 ring-0 驱动程序还是在用户模式下完成所有操作?
【问题讨论】: