【发布时间】:2010-12-02 07:44:04
【问题描述】:
我正在尝试为现有应用程序编写“分流器”以输出数据,以便将其集成到我尝试执行的某些分析中,但我已经走到了死胡同。我已经隔离了我想从中读取的指令,但我不确定如何完成此操作。
这是我试图隔离的指令集(特别是来自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处的指令访问的数据,而且你很惊讶用于访问这些数据的寄存器在每次遇到断点时都会发生变化?
标签: assembly reverse-engineering