我正在开发玩具CPU(TR3200 cpu)的仿真器。其实我有一个纯粹的解释器核心,但我正在研究开发一个追踪JIT cpu核心。 我对如何追踪被追踪的源机器代码是否被仿真代码修改(自修改代码或类似将操作系统加载到RAM的操作系统) 我在考虑使用段或间隔为此,但我找不到任何信息或实例如何处理。JIT仿真和跟踪脏内存块
换句话说......我知道JIT(我在考虑如何使用asmjit),我应该在使用jitted块的开始地址作为索引的地图上存储jitted代码;我有一些想法如何处理循环计数和设备与jitted代码同步。但是当guest程序写入一个jitted内存块时,我不清楚如何处理。
例如:我们有一个简单的操作系统,它在地址0x100-0x500处执行了一个程序,并且它正确返回。 JIT cpu核心会(乐观地)生成代表这些代码块的本地机器代码。现在,如果操作系统加载另一个程序并将其放置在0x200-0x300地址块上,则不应使覆盖后的0x100-0x500的旧jitted块失效。 或者是最糟糕的情况,一个自我重写的程序,会导致jitted块无效。 如何检测?
嘿!为什么要投票? – Zardoz89 2015-02-24 16:53:28
可能因为没有明确的问题。 :-) – 2015-02-24 19:35:51
谢谢你为什么反对投票的答案。我会尝试重写。我在一天的漫长的一天之前在医院的一间候诊室里用电话写了一封...... – Zardoz89 2015-02-24 19:43:36