JIT 编译器如何运行

发布于 2024-11-09 07:49:45 字数 107 浏览 3 评论 0原文

根据定义,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱本泡沫多脆弱 2024-11-16 07:49:45

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

例如,您可以使用 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() with PROT_READ | PROT_WRITE | PROT_EXEC (POSIX), or VirtualAlloc() with PAGE_EXECUTE_READWRITE (Windows).

For a real example, see LLVM's llvm::sys::Memory::AllocateRWX (Unix implementation; Windows implementation).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文