Addresse eines mov befehls bekommen
-
Hallo, habe in einem programm diesen befehl hier:
24086AB4 A3 04CA3B24 MOV DWORD PTR DS:[243BCA04],EAX
Nun möchte ich gerne die addresse in die eax gemoved wird bekommen.
Hatte es mal so probiert, scheint aber nicht zu funktionieren..
DWORD GetMovAddress(void* pdwAddress) { PBYTE pbAddress = (PBYTE)pdwAddress; // change to pbyte so we can easily skip the opcode pbAddress++; // skip it.. DWORD dwAddress; memcpy( (void*)&dwAddress, pbAddress, 4 ); // copy the address return dwAddress; } Kann mir einer sagen, was ich falsch mache? :)
-
Vermutlich übergibst du die falsche Adresse an GetMovAddress...
-
hustbaer schrieb:
Vermutlich übergibst du die falsche Adresse an GetMovAddress...
Ich denke nicht, ich calle GetMovAddress so:
stringstream log; log << GetMovAddress( (void*)0x24086AB4 ) << endl; add_log( log.str() );
geloggt wird:
607898116
Noch einer eine Idee?
-
unsigned long GetMovAddress(void* pdwAddress) { unsigned long* pbAddress = (unsigned long*)pdwAddress; return (unsigned long )(++pbAddress); }
-
s91x schrieb:
hustbaer schrieb:
Vermutlich übergibst du die falsche Adresse an GetMovAddress...
Ich denke nicht, ich calle GetMovAddress so:
stringstream log; log << GetMovAddress( (void*)0x24086AB4 ) << endl; add_log( log.str() );
geloggt wird:
607898116
Noch einer eine Idee?
Und was passt dir an 607898116 (<- dezimal!) nicht? Rechne das mal in Hex um, und vergleich es mit dem was zwichen den [] steht...
Falls du dich wunderst warum die Adresse 0x243BCA04 in der Byte-Sequenz "A3 04CA3B24" byteweise "gespiegelt" steht: Intel CPUs speichern das nunmal so ab, nennt sich Little-Endian.