Ollydbg - Parameter einer Funktion auslesen?

11/05/2011 16:45 vwap#1
Hallo Leute!

Ich versuche gerade, so nen kleinen Bot in C++ für Metin2 zu schreiben.
Die Funktion, um einen Schlag auszuführen, heißt "SetAttackKeyState" und sieht in Olly so aus:

Code:
CPU Disasm
Address   Hex dump          Command                                  Comments
00450D08  |.  50            PUSH EAX                                 ; /Arg3 => OFFSET LOCAL.0
00450D09  |.  6A 00         PUSH 0                                   ; |Arg2 = 0
00450D0B  |.  51            PUSH ECX                                 ; |Arg1 => [ARG.2]
00450D0C  |.  E8 DF541300   CALL 005861F0                            ; \metin2client_unpacked.005861F0
Diese hat aber 3 Parameter.
Debuggen und durch den Stack steppen kann ich nicht, da Hackshield.

In C++ fehlen mir nur noch die Parameter:
Code:
typedef void (__stdcall *oSetAttackKeyState)(... parameter);

oSetAttackKeyState SetAttackKeyState = (oSetAttackKeyState) 0x005861F0;
11/05/2011 17:44 SmackJew#2
Äh, siehst du doch, drei DWORDs. ECX ist in dem Fall vermutlich die Adresse des ersten Bytes des Objekts, wenn du das als etwas anderes als ein DWORD definieren willst musst du wohl oder übel die Klasse reversen und nachbauen. Zweiter Parameter const DWORD, dritter Parameter wahrscheinlich irgendeine Adresse vom Stack.

Lange Rede kurzer Sinn: drei DWORDs.
11/06/2011 00:13 Medix#3
@SmackJew
Rein aus Neugier wie liest du da raus ,dass ECX ein pointer zum Objekt ist?

sollte doch eher so aussehen beim thiscall
Quote:
PUSH EAX
PUSH 0
MOV ECX,objektpointer
CALL ....
__thiscall:
Quote:
Arguments are pushed on the stack from right to left, with the this pointer being passed via register ECX, and not on the stack, on the x86 architecture.
11/06/2011 00:53 SmackJew#4
Quote:
Originally Posted by Medix View Post
@SmackJew
Rein aus Neugier wie liest du da raus ,dass ECX ein pointer zum Objekt ist?

sollte doch eher so aussehen beim thiscall


__thiscall:
Vollkommen richtig. Bin sehr breit. :D