Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi asm code aus anderen prozessen lesen (https://www.delphipraxis.net/118519-asm-code-aus-anderen-prozessen-lesen.html)

wadimwadim 9. Aug 2008 09:44


asm code aus anderen prozessen lesen
 
Hallo,
ich möchte den asm code aus einem laufendem prozess auslesen. nicht den ganzen, sondern nur stellen aus bestimmten adressen.
z. B. ist auf

00X12345 push ebp

könnte ich jetzt den asmteil von 00X12345 sehen? also ohne einen debugger.
kann man so etwas in delphi umsetzen? und welche funktionen müsste ich dafür benutzen?

xaromz 9. Aug 2008 09:49

Re: asm code aus anderen prozessen lesen
 
Hallo,

mit der Funktion MSDN-Library durchsuchenReadProcessMemory kannst Du Speicher aus fremden Prozesse lesen.

Gruß
xaromz

wadimwadim 9. Aug 2008 10:14

Re: asm code aus anderen prozessen lesen
 
ich möchte nicht die werte der adresse haben, sondern den asm code...

xaromz 9. Aug 2008 10:17

Re: asm code aus anderen prozessen lesen
 
Hallo,
Zitat:

Zitat von wadimwadim
ich möchte nicht die werte der adresse haben, sondern den asm code...

was meinst Du? Die Werte im Speicher sind doch der Code.
Oder willst Du den Maschinencode in Mnemonics umwandeln? Dann musst Du Dir einen Disassembler bauen.

Gruß
xaromz

wadimwadim 9. Aug 2008 11:14

Re: asm code aus anderen prozessen lesen
 
also...
nehmen wir an, dass es so aussieht:

00123456 push ebp
00234567 mov ecx
00345678 xxx

ich möchte aus diesen adressen (00123456,...) den asm code bekommen, also push ebp. wie stelle ich das an?

FAlter 9. Aug 2008 11:23

Re: asm code aus anderen prozessen lesen
 
Hi,

indem du den Maschinencode einliest (s. o.) und dann deassemblierst (s. o.)

Mfg
FAlter

Neutral General 9. Aug 2008 11:26

Re: asm code aus anderen prozessen lesen
 
Zitat:

Zitat von wadimwadim
also...
nehmen wir an, dass es so aussieht:

00123456 push ebp
00234567 mov ecx
00345678 xxx

ich möchte aus diesen adressen (00123456,...) den asm code bekommen, also push ebp. wie stelle ich das an?

Du liest einfach mit ReadProcessMemory den Speicher des Process von (im Bsp) 00123456 bis 00345678 aus.
Dann hast du eben die Bytes dieser Adressen. Das ist quasi der Assemblercode. Man muss diese Bytes nur eben richtig interpretieren.

Ach ja

Zitat:

mov ecx
ergibt keinen Sinn :P

Cyf 9. Aug 2008 14:11

Re: asm code aus anderen prozessen lesen
 
Kleines Beispiel: 90 (hexadezimal) entspricht z.B. NOP
Genaueres kannst du entsprechenden Tabellen dazu entnehmen, übersetzen musst du das dann schon selbst.
Die erste Tabelle, die ich eben auf die schnelle gefunden hab, ist z.B. diese: ftp://download.intel.com/design/Pent...s/24319102.PDF
Man beachte, dass das Gnze unter Umständen aber vom Prozessor abhängig ist.

Remko 9. Aug 2008 18:58

Re: asm code aus anderen prozessen lesen
 
The package "madDisAsm" features a full x86 disassembler including MMX, 3dNow enhanced, SSE and SSE2 support. The disassembler can examine a single x86 instruction (see ParseCode) or a full function (see ParseFunction) and either return a short analysis or a full text disassembly. Register contents are watched/followed if possible, this improves the analyses for jump/call targets. Case/switch jump tables are automatically detected and handled correctly.

http://help.madshi.net/madDisAsm.htm

p80286 9. Aug 2008 20:17

Re: asm code aus anderen prozessen lesen
 
Hallo zusammen,

so einfach ist das aber nicht. Im Prinzip steht im Speicher OpCode,Daten,OpCode,Daten....
NOP z.B. hat keine zugehörigen Daten. Aber was ist wenn 90 kein OpCode sodern Daten ist?
Dann läuft die Interpretation ganz schön vor die Wand.
Wenn der Code von fremden Anwendungen interessant ist, würde ich die entsprechende exe durch einen Disassembler jagen, dann hat man die Chance was halbwegs vernünftiges zu bekommen.

Zu DOS-Zeiten konnte DEBUG auch direkt auf den Haupspeicher zugreifen, wenn der's heute noch kann, warum in Delphi nochmal neu schreiben?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz