我正在尝试为现有应用程序编写一个“分流器”来分发数据,以便将它集成到我正在执行的一些分析中,但是我已经遇到了一个死胡同。我已经隔离了我想要阅读的说明,但我不确定如何完成此操作。如何附加到进程并从特定指令中读取?
这是指令集我试图隔离(具体从00412159
的值):对于相同的变量的三个存储器扫描
00412153 - mov [eax+04],edx
00412156 - fld dword ptr [ecx+08]
00412159 - fstp dword ptr [eax+08]
0041215c - ret
0041215d - int 3
结果导致以下结果:
EAX=1798B4E0
ECX=0018D5C0
EDX=00000016
EAX=18D96298
ECX=0018D5C0
EDX=00000016
EAX=18D3DCA8
ECX=0018D5C0
EDX=00000016
如果我将一个调试器附加到正在运行的程序中,我想要的值是EAX,但每次目标进程重新启动时,EAX的值都会发生变化。
很明显,我遇到的是DMA(动态内存访问)又名基于堆的内存分配,这会导致在运行时生成指针映射。我对该主题的简短研究揭示了我需要弄清楚的两个组件是一个静态基指针,以及用于达到运行时指针的偏移量。
我花了总共4小时的ASM体验,所以这可能是我的问题,或者我只是解决了一个目前不在我的联盟中的问题。有关从00412159
的指令中读取值的最佳方法的任何想法或有关如何找到基址指针和偏移量的建议?
请您澄清一下您的意思是“从特定的指令中读取”吗? “内存扫描”是什么意思?你使用它的方式让我觉得你想要检查`00412159`处的指令所访问的数据,并且你惊讶于每次到达断点时用于访问这些数据的寄存器都会改变吗? – 2010-12-02 13:42:29