【发布时间】:2015-04-26 07:54:52
【问题描述】:
我正在为玩具 CPU (TR3200 cpu) 开发一个模拟器。实际上我有一个纯解释器核心,但我正在研究开发一个跟踪 JIT cpu 核心。 我怀疑如何跟踪已被 jited 的源机器代码是否被模拟代码修改(自修改代码或类似操作系统将编程加载到 RAM 的东西) 我正在考虑为此使用段或区间树,但我找不到任何关于如何真正处理的信息或示例。
换句话说...我知道 JIT(我正在考虑使用 asmjit)是如何进行的,我应该将 jit 代码存储在使用 jit 块的开始地址作为索引的映射上;我知道如何处理循环计数和设备与抖动代码同步。但我不清楚当客户程序写入 jitted 内存块时如何处理。
例如:我们有一个简单的操作系统,它在地址 0x100-0x500 处执行了一个程序并正确返回。 JIT cpu 核心会(乐观地)生成代表这些代码块的本机机器代码。现在,如果操作系统加载另一个程序并将其放置在 0x200-0x300 地址块上,则不应使旧的 0x100-0x500 jitted 块在它被覆盖时失效。 或者最坏的情况,一个自我重写的程序,使 jitted 块无效。 如何检测到这个?
【问题讨论】:
-
嘿!为什么投反对票?
-
可能是因为没有明确的问题。 :-)
-
感谢您回答为什么投反对票。我会尝试重写。我是在医院候诊室漫长的一天前用手机写的……
标签: code-generation jit emulation