Was bedeutet " 0x4 " in "movl $0x2d, 0x4(%esp)"?
Ich bin auf der Suche in Assembler-code, erzeugt durch GCC. Aber ich verstehe nicht:
movl $0x2d, 0x4(%esp)
In den zweiten Operanden, was bedeutet 0x4
steht für? offset-Adresse? Und was die Verwendung von register EAX?
- Es bedeutet Speicher[ESP_REG + 4] = 0x2d;
Du musst angemeldet sein, um einen Kommentar abzugeben.
movl $0x2d, 0x4(%esp)
bedeutet der aktuelle Wert des stack pointer (%esp
), 4 (0x4
) und speichern Sie dann die lange (32-bit) - Wert0x2d
zu diesem Standort.Den
eax
register ist eines der general purpose 32-bit-Register. die x86 Architektur gibt die folgenden 32-bit-Register:sowie die Namen und die Zwecke der einige dann harken zurück zu den Tagen des Intel 8080.
Auf dieser Seite gibt einen guten überblick über die Intel-Typ-Register. Die ersten vier der in der obigen Liste kann auch Sie zugegriffen werden wie ein 16-bit-oder zwei 8-bit Werte. Zum Beispiel:
Die Zeiger und das index-Register nicht möglich ist, die Anwendung der 8-bit-Teile, aber Sie können, zum Beispiel die 16-bit -
bp
.0x4(%esp)
bedeutet*(%esp + 4)
wo*
bedeutet dereferenzieren.Die Aussage bedeutet speichern des sofortigen Mehrwert 0x2d in eine lokale variable besetzen die 4. offset auf den stack.
(Den code, den Sie gezeigt haben, ist im AT&T-syntax. In Intel-syntax wäre es
mov [esp, 4], 2dh
)0x4
im zweiten Operanden ist ein offset vom Wert des Registers in den Klammern.EAX
ist ein general purpose register verwendet werden für Montage-Kodierung (Berechnungen, speichern von temporären Werten, etc.) offiziell es ist als "Akkumulator", aber das ist mehr historisch als relevant.Lesen Sie auf dieser Seite über die x86-Architektur. Die meisten relevant für Ihre Frage sind die Abschnitte über Adressierungsarten und General purpose Register
GCC Montage Operanden Folgen ein byte (b), word (w), lange (l) und so weiter wie :
Register beginnen mit einem Prozentzeichen (%).
Konstanten beginnen mit einem dollar-Zeichen ($).
Im obigen Beispiel in deiner Frage bedeutet das, dass der 4. offset vom stack-pointer (esp).
Hoffe, das hilft,
Beste Grüße,
Tom.
Greifen Sie auf etwas vier bytes entfernt, von wo der stack-pointer befindet. In der GCC dies zeigt einen parameter (ich denke-positiv-offset-Parameter ist und negativ ist, dass lokale Variablen, wenn ich mich richtig erinnere). Sie schreiben, in anderen Worten, der Wert 0x2D in einem parameter. Wenn Sie gab mehr Kontext könnte ich wahrscheinlich sagen, was Los war in das gesamte Verfahren.