我有一个字节数组,用作模拟系统RAM。我想为给定的单元格制作防弹补丁,检测它何时被写入,并立即覆盖它。使用像
这样的循环for (;;) {
address = x;
sleep(y);
}
有一个缺陷,即睡眠的最小可能值,似乎与模拟帧长度几乎相同,因此它每帧仅修补一次地址。因此,如果游戏每帧写入100次,那么这样的补丁就没什么意义了。
我有一些关于写作的钩子,但是那些只是通过阅读正在执行的游戏代码来捕获写入,而我想让这些补丁适用于任何内存区域,而不仅仅是RAM,因此我可以'依赖于过多地解释模拟代码(它根本不适合我想修补的所有区域)。
所以我需要一些语法观察点,指向数组的指针,以及我想要观察的字节变化。
答案 0 :(得分:3)
虽然C不是面向对象的语言,但我会在这里使用面向对象的方法:
memory_write_byte
和memory_read_byte
)。答案 1 :(得分:3)
我会研究共享内存ala mmap。使用mmap,您可以让两个进程共享同一页面,其中一个进程可以只读。
当对此内存区域进行写入时,将生成SIGSEGV,您可以捕获该SIGSEGV,然后执行某种操作。这是使用UNIX术语,但你可以用Windows做同样的事情,它只是稍微涉及。