Hilfe bei der übersetzung von assembly zu C
Ich habe einige code, der aus einer Funktion
subl $24, %esp
movl 8(%ebp), %eax
cmpl 12(%ebp), %eax
Bevor der code wird einfach die 'ENTER' - Befehl und danach gibt es eine if-Anweisung gibt 1 zurück, wenn ebp - > eax oder 0, wenn es weniger ist. Ich gehe davon aus cmpl bedeutet vergleichen, aber ich kann nicht sagen, was die konkreten Werte sind. Kann mir jemand sagen was passiert?
InformationsquelleAutor GetOffMyLawn | 2010-05-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja
cmpl
Mittel vergleichen (mit 4-byte-Argumente). Angenommen, das Stück code, gefolgt von einemjg <addr>
:Dann der code ähnlich wie
Für diejenigen, die wollen eine schnelle betrügen. Nur in dieser Reihenfolge: 1) Lesen Sie den rechten Operanden des cmpl, 2) Lesen Sie den zweiten Brief von der Anweisung springen, und 3) Lesen Sie den linken Operanden die compare-Anweisung. Also in diesem Fall: wenn (
%eax
ist[l]ess than
ebp[12]
). Sollte helfen, Lesen Sie code schnellInformationsquelleAutor kennytm
Ihre code-fragment ähnelt die Eintrag code wird von einigen Prozessoren und Compiler. Die Eintrag code ist Assembler-code, ein compiler-Probleme beim betreten der Funktion.
Entry-code ist verantwortlich für das speichern der Parameter der Funktion und die Zuweisung von Speicherplatz für die lokalen Variablen und Optional initialisiert. Der Eintrag code verwendet Zeiger auf den Speicherbereich der Variablen. Manche Prozessoren verwenden eine Kombination der EBP und ESP-Register, um den Speicherort von lokalen Variablen (und Parameter der Funktion).
Da der compiler weiß, wo die Variablen (und Parameter der Funktion) gespeichert sind, lässt es die Variablennamen, und verwendet numerische Indizierung. Zum Beispiel die Zeile:
entweder verschieben Sie die Inhalte des 8. lokale Variablen in das register
EAX
oder verschieben der Wert um 8 bytes vom Anfang der lokale Bereich (vorausgesetzt, der dieEBP
register Zeiger auf den Anfang der lokalen Variablen-Bereich).Die Anweisung:
bedeutet, dass der compiler ist das reservieren von 24 bytes auf dem stack. Dies könnte zu schützen, einige Informationen in der aufrufenden Funktion-Konvention. Die Funktion wäre in der Lage, die Fläche, nachdem dieser für seinen eigenen Gebrauch. In diesem reservierten Bereich können enthalten die Funktionsparameter.
Code-fragment geliefert wie es aussieht, ist das vergleichen zwei lokale Variablen innerhalb einer Funktion:
Versuchen der Demontage der oben genannten Funktion und sehen, wie nahe Sie mit Ihrer code-fragment.
InformationsquelleAutor Thomas Matthews
Dies ist ein Vergleich zwischen (EBP + 8) und (EBP + 12). Basierend auf dem Vergleichsergebnis, die cmpl-Befehl setzt flags, die verwendet werden, indem Sie die folgenden Anweisungen springen.
In Mac OS X 32-bit-ABI EBP + 8 ist die erste Funktion parameter, und EBP + 12 ist der zweite parameter.
InformationsquelleAutor diciu