Bedeutung von movl und movb



  • Hallo,

    ich wollte mal das Dekompilat meines Debuggers etwas besser verstehen, und bin dabei auf folgende, unbekannte Befehle gestoßen:

    char a = 'a'; // movb   $0x61,0xffffffff(%ebp)
    int  b = 4;   // movl   $0x4,0xfffffff8(%ebp)
    

    Sobald ein char auf dem Stack angelegt wird, erscheint an dieser Stelle 'movb'. Bei einem Integer 'movl'. Was ist da genau der Unterschied zu MOV ? Und was bedeutet (%ebp) hinter dem zweiten Argument der Befehle ? Wird die Speicherstelle der Variablen willkürlich vom Compiler gewählt, oder verwaltet das Windows ?!

    Danke schonmal,

    MfG mikey.



  • mikey schrieb:

    ich wollte mal das Dekompilat meines Debuggers etwas besser verstehen, und bin dabei auf folgende, unbekannte Befehle gestoßen:

    Du hörst dich an, als würdest du Assembler eigentlich schon kennen. Dann mach dich mal mit der Google: AT&T-Syntax vertraut, die hast du hier nämlich vorliegen.

    Sobald ein char auf dem Stack angelegt wird, erscheint an dieser Stelle 'movb'. Bei einem Integer 'movl'. Was ist da genau der Unterschied zu MOV ?

    Das IST mov. Bzw. die Form von mov, die Bytes (b) oder DWords (long, l) bewegen kann.

    Und was bedeutet (%ebp) hinter dem zweiten Argument der Befehle ?

    Das ist indirekte Adressierung. Der erste Befehl entspricht in Intel-Syntax
    mov byte ptr [ebp+0ffffffffh], 61h, oder etwas lesbarer mov byte ptr [ebp-1], 61h.

    Wird die Speicherstelle der Variablen willkürlich vom Compiler gewählt, oder verwaltet das Windows ?!

    Überleg dir mal kurz, was passiert, wenn du dasselbe Programm mehrmals startest. Frage beantwortet?



  • Hi,

    danke für die schnelle Antwort !

    Du hörst dich an, als würdest du Assembler eigentlich schon kennen. Dann mach dich mal mit der Google: AT&T-Syntax vertraut, die hast du hier nämlich vorliegen.

    Ich habe mich etwas unklar ausgedrückt, habe noch keine Erfahrungen mit Assembler, bzw. bin ein Anfänger. Aber sehr gut zu wissen, dass es die AT&T Syntax ist, hilft mir um einiges weiter !

    Das IST mov. Bzw. die Form von mov, die Bytes (b) oder DWords (long, l) bewegen kann.

    Acha, okay, dann gehe ich mal davon aus, dass es genauso arbeitet wir mov.

    Überleg dir mal kurz, was passiert, wenn du dasselbe Programm mehrmals startest. Frage beantwortet?

    Frage beantwortet 😃

    MfG mikey.


Anmelden zum Antworten