怎么样才能得知其他进程中某一内存的内容发生了变化?有几个条件我想首先说明一下,在win32系统下想实时得到其他进程一段内存的内容变化是不可能的。唯一的可能是定时扫描。另外如果想要得知内核态内存的变化也是不太容易实现(姑且允许我这么我这么说,因为在方面我没有进行深入的调查)。还有CPU的要求我现在只是针对intel,因为手头没有AMD的CPU,所以就没有测试过。
如果想要实时得到其他进程的内存内容的变化,有两种方案,其一是修改反汇编后的源程序,其二是debug源程序。对于第一种方案来说,工作量和汇编知识要求相对要高一点。那么第二种方案只需要一些win32 程序的debug技术就可以了,相对来说就比较容易实现。在这里我们采用第二种方案。
intel cpu提供了一组调试寄存器可以用来帮助我们跟踪我们感兴趣的内存地址。下面我来详细的介绍一下这些寄存器的功能。(顺便想说一句这个文本编辑器的功能有点缺陷,真的希望有所改进)
31 23 15 7 0
+---+---+---+---+---+---+---+---+---+-+-----+-+-+-+-+-+-+-+-+-+-+
|LEN|R/W|LEN|R/W|LEN|R/W|LEN|R/W| | | |G|L|G|L|G|L|G|L|G|L|
| | | | | | | | |0 0|0|0 0 0| | | | | | | | | | | DR7
| 3 | 3 | 2 | 2 | 1 | 1 | 0 | 0 | | | |E|E|3|3|2|2|1|1|0|0|
|---+---+---+---+---+---+---+---+-+-+-+-----+-+-+-+-+-+-+-+-+-+-|
| |B|B|B| |B|B|B|B|
|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| | | |0 0 0 0 0 0 0 0 0| | | | | DR6
| |T|S|D| |3|2|1|0|
|---------------+---------------+-+-+-+---------+-------+-+-+-+-|
| |
| RESERVED | DR5
| |
|---------------+---------------+---------------+---------------|
| |
| RESERVED