A进程定位B进程内存空间中特定内存区域被修改时使用的汇编代码


如何定位修改内存区域的汇编代码,简单描述一下,针对某一个特定的地址,例如0x10bf6,假设数据类型为int,这4个字节的内存区域发生变化的时候,如果追踪到执行的汇编代码以及其在所属进程的代码段中的位置?

进一步说明
A进程attach到B进程,B进程的某一个内存地址如0x10bf6,被修改的时候肯定是使用了代码段的某一条汇编代码,如果在该内存区域被修改的时候定位该汇编代码,使用gdb做到这一点没有问题,如何以更为直接的方式在程序中A进程中实现这个功能呢,不然就又得去拆gdb源码了。

c Linux 内存管理 汇编

会飞的绵羊 11 years, 8 months ago

可以对需要观察的内存地址下“硬件写入断点”或“内存写入断点”。
硬件写入断点:用Dr0~D07寄存器实现,自己接管int 1中断,在中断中获得“寄存器上下文信息结构”,里面保存有eip信息(即写入此内存的地址)。
内存写入断点:设置需要观察的内存地址所在页为不可写属性,捕获内存写异常,同样利用“寄存器上下文信息结构”获得eip。
windows下获取“寄存器上下文信息结构”的方法是异常捕获后,[esp+10h]保存的就是,linux下类似。

大腿能砍十斤肉 answered 11 years, 8 months ago

Your Answer