Hallo, ich bin gerade dabei, eine reverste ASM Funktion in C als Function Pointer zu schreiben.
Die Funktion:
6E96C8 ist also demnach der class ptr und CALL EDX müsste der Aufruf der Memberfunction sein.
Eigentlich sollte die Function (soll den Geldstand des Spielers zurück geben) keine Parameter nehmen (wüsste nicht welche), was also ist das "PUSH 0B"?
Habe bereits versucht, EDX zu dereferenzieren, allerdings crashed so direkt das Spiel:
Mein typedef sieht so aus:
Und so rufe ich den Geldstand ab:
Wo liegt denn das Problem? :/
Die Funktion:
Code:
CPU Disasm Address Hex dump Command Comments 00467CB0 /. 8B0D C8966E00 MOV ECX,DWORD PTR DS:[6E96C8] 00467CB6 |. 8B41 04 MOV EAX,DWORD PTR DS:[ECX+4] 00467CB9 |. 8B50 10 MOV EDX,DWORD PTR DS:[EAX+10] 00467CBC |. 83C1 04 ADD ECX,4 00467CBF |. 6A 0B PUSH 0B 00467CC1 |. FFD2 CALL EDX 00467CC3 |. 894424 08 MOV DWORD PTR SS:[ESP+8],EAX 00467CC7 |. C74424 04 E4F MOV DWORD PTR SS:[ESP+4],0064F8E4 00467CCF \.- FF25 D0E76400 JMP DWORD PTR DS:[<&python22.Py_BuildValue>]
Eigentlich sollte die Function (soll den Geldstand des Spielers zurück geben) keine Parameter nehmen (wüsste nicht welche), was also ist das "PUSH 0B"?
Habe bereits versucht, EDX zu dereferenzieren, allerdings crashed so direkt das Spiel:
Code:
pGetMoney = (GetMoney_t) (*(DWORD*) (*(DWORD*) (ADR_CLASS_GETMONEY + 0x4)) + 0x10);
Code:
typedef int (__thiscall *GetMoney_t) (void *_this);
Code:
int money = pGetMoney((void*) ADR_CLASS_GETMONEY);