Autor Thema: Assembler: mov eax, [esp+8]  (Gelesen 2241 mal)

nnosdev

  • Beiträge: 61
    • Profil anzeigen
Gespeichert
« 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?

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. July 2012, 19:50 »
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.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

nnosdev

  • Beiträge: 61
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 28. July 2012, 20:19 »
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!

 

Einloggen