Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: nnosdev am 28. July 2012, 19:17
-
Hallo Leute!
Ich hab einfach nichts gefunden.. warum darf man das so nicht machen (nach einem call):
_manipulate:
mov eax, [esp+8] ; First parameter
mov ebx, [esp+12] ; Second parameter
mov byte [eax+11], bl
ret
sondern muss zuerst ebp auf den Stack legen um dann mit ebp auf die Parameter zugreifen
zu können:
_manipulate:
push ebp
mov ebp, esp
mov eax, [ebp+8] ; First parameter
mov ebx, [ebp+12] ; Second parameter
mov byte [eax+11], bl
pop ebp
ret
Ich kann ja esp auch anders manipulieren wie zb sub esp, 4 oder ähnliches.. Warum
bekomme ich bei einer indirekten Adressierung einen Segfault?
-
Du musst ebp nicht erst auf den Stack legen. Und kannst direkt ESP als Basis für die Adresse nutzen. Dann musst du halt aufpassen was
alles auf dem Stack liegt. In dem Fall ist es jetzt EBP weniger. Die Offsets verschieben sich also um 4, und du bekommst ESP + 4 und ESP + 8.
-
Ein gutes Beispiel dafür wie man den Wald vor lauter Bäumen übersieht.
Können wir so tun als hätte ich das nicht gefragt? ^^
Danke für die Antwort MNemo!