Ich versuche, einen "Shunt" für eine vorhandene Anwendung zu schreiben, um Daten auszuspähen, damit ich sie in einige Analysen integrieren kann, die ich versuche, durchzuführen, aber ich habe eine Sackgasse erreicht. Ich habe die Anweisungen isoliert, von denen ich lesen möchte, aber ich weiß nicht genau, wie ich das erreichen soll.Wie kann ich einen Prozess anhängen und von bestimmten Anweisungen lesen?
Dies ist der Befehlssatz I (speziell der Wert von 00412159
) zu isolieren bin versucht:
00412153 - mov [eax+04],edx
00412156 - fld dword ptr [ecx+08]
00412159 - fstp dword ptr [eax+08]
0041215c - ret
0041215d - int 3
Ergebnisse von drei Speicher Scans für die gleiche Variable ergab folgende Ergebnisse:
EAX=1798B4E0
ECX=0018D5C0
EDX=00000016
EAX=18D96298
ECX=0018D5C0
EDX=00000016
EAX=18D3DCA8
ECX=0018D5C0
EDX=00000016
Wenn ich einen Debugger an das laufende Programm angehängt habe, ist der Wert, den ich möchte, bei EAX, aber der Wert von EAX ändert sich jedes Mal, wenn der Zielprozess neu gestartet wird.
Offensichtlich, was ich renne, ist DMA (Dynamic Memory Access) alias Heap-Based Memory Allocation und dies verursacht die Zeigerzuordnung zur Laufzeit generiert werden. Meine kurze Untersuchung des Themas zeigt, dass die zwei Komponenten, die ich herausfinden muss, ein statischer Basiszeiger sind und der Offset, der verwendet wird, um den Laufzeitzeiger zu erreichen.
Ich habe insgesamt 4 Stunden Erfahrung mit ASM verbracht, so dass mein Problem sein könnte, oder ich bin nur ein Problem anzugehen, das derzeit aus meiner Liga ist. Irgendwelche Ideen über den besten Weg, um den Wert aus der Anweisung bei 00412159
oder einen Vorschlag, wie der Basiszeiger und Offset zu finden?
Können Sie bitte klarstellen, was Sie mit "Lesen von einer bestimmten Anweisung" meinen? Was meinst du mit "Speicherscans"? Die Art, wie Sie es verwenden, lässt mich eher glauben, dass Sie die Daten überprüfen wollen, auf die der Befehl bei '00412159' zugreift, und Sie sind überrascht, dass sich das für den Zugriff auf diese Daten verwendete Register jedes Mal ändert, wenn Sie Ihren Haltepunkt erreichen. –