Einzelnen Beitrag anzeigen
Alt 30.01.09, 23:57   #5 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 198
Standard

Zitat:
Doch warum 4? Hat das einen bestimmten Grund oder ist das immer so?
4 Bytes ist die Registerbreite. Damit arbeiten auch die Stackoperationen (Push/Pop) - womit auch die Parameter übereben werden. D.h dass die Anzahl der auf dem Stack "abgelegt" Parameter-Bytes ein Vielfaches von 4 ist (von irgendwelchen exotischen Methoden mal abgesehen).

zum Stdcall: streng genommen wäre dieser Link interessanter
http://en.wikipedia.org/wiki/X86_calling_conventions

Btw: wenn man den "dirty-way" nimmt, kann man einfach die ersten 6 Bytes sichern und mit dem JMP überschreiben.
Code:
PUSH EBP
MOV EBP,ESP 
SUB ESP,8
Sofern man eine bestimmte Funktion hooken möchte, muss die Umsetzung nicht allgemeingültig sein - es reicht aus, wenn diese Anweisungen letzendlich noch ausgeführt werden.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61