Ich versuche, ein einfaches Programm zu zerlegen, das eine einfache Funktion enthält. Dieses Programm wird mit gcc für ein 32-Bit-x86-Ziel kompiliert. Die Funktion wird über eine Aufrufanweisung aufgerufen. Am Ende der Funktion sehe ich eine Ret-Anweisung, die normal ist, aber es gibt auch eine Leave-Anweisung. Es gibt keine Eingabeanweisung irgendwo ist das Programm. Ich frage mich, was macht diese Funktion verlassen ....Was ist der Unterschied zwischen verlassen und ret
Antwort
Leave: einen Stapelbereich zu verlassen. Lassen Sie dies in umgekehrter Reihenfolge eingeben. Damit wird der Reseviert von Enter-Stack-Bereich freigegeben.
Ret: Rückkehr von Verfahren. Ret beendet die Ausführung einer Prozedur und überträgt den Steuerungsfluss an das aufrufende Programm. Ret hat optionale Wortoperanden. Dies gibt die Anzahl der Bytes an, die auf dem Stapel gelöscht werden sollen, nachdem die Rückkehradresse aus dem Stapel entfernt wurde.
Ähnlich, aber nicht gleich. Lesen Sie zuerst Enter vs Push
eingeben: , Reserve für einen Stapelbereich. Mit "Enter" reservieren Sie einen bestimmten Speicherbereich des Stacks, der für die Parameterübergabe benötigt wird. Das Wort Operand gibt die Anzahl der Bytes an, die auf dem Stapel zugeordnet werden sollen. Der Byteoperand repräsentiert die Verschachtelung der aktuellen Prozedur. Wenn der Byteoperand 0 ist, wird EBP auf den Stapel gelegt. Anschließend wird der Wert von ESP in EBP kopiert und ESP wird um den Wortoperand dekrementiert.
- 1. Was ist der Unterschied zwischen `==` und `ist`?
- 2. Was ist der Unterschied zwischen:.! und: r !?
- 3. Was ist der Unterschied zwischen Difftime und '-'?
- 4. Was ist der Unterschied zwischen $ und $$?
- 5. Was ist der Unterschied zwischen Verilog! und ~?
- 6. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 7. Was ist der Unterschied zwischen/* ... */und/** ... */
- 8. Was ist der Unterschied zwischen `&` und `ref`?
- 9. Was ist der Unterschied zwischen $ (...) und `...`
- 10. Was ist der Unterschied zwischen .Equals und ==
- 11. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 12. Was ist der Unterschied zwischen + = und = +?
- 13. Was ist der Unterschied zwischen? und ? = Nil
- 14. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 15. Was ist der Unterschied zwischen:
- 16. Was ist der Unterschied zwischen IncomingMessage "Socket", "Verbindung" und "connection.socket"?
- 17. Was ist der Unterschied zwischen der JSP und der JSTL?
- 18. Was ist der Unterschied zwischen NetFx45WebLink und NetFx45RedistLink ist
- 19. Was ist der Unterschied zwischen PS1 und PROMPT_COMMAND ist
- 20. Was ist der Unterschied zwischen x86 und x64 ist
- 21. Was ist der Unterschied zwischen „ist None“ und „== None“
- 22. Was ist der Unterschied zwischen DISPATCH_QUEUE_CONCURRENT und DISPATCH_QUEUE_SERIAL ist
- 23. Was ist der Unterschied zwischen Task.Run ist() und Task.Factory.StartNew()
- 24. Was ist der Unterschied zwischen RewriteRule ist und umleiten 301
- 25. Was ist der Unterschied zwischen ist - (void) und + (void) Methoden
- 26. Was ist der Unterschied zwischen ist HttpResponseMessage und HttpResponseException
- 27. Was ist der Unterschied zwischen nohup und kaufmännisches Und
- 28. Was ist der Unterschied zwischen: und :: und ::: in Javascript Grammatik
- 29. Was ist der Unterschied zwischen Microsoft.AspNet.WebApi.OData und Microsoft.Data.OData und Microsoft.AspNet.OData?
- 30. Was ist der Unterschied zwischen Chisel und Lava und CLaSH?
Danke, aber es gibt keine Eingabe-Anweisung in meiner Funktion. Aber ich sehe eine Spitze der Funktion "push ebp" und "mov% esp,% ebp". Diese 2 Zeilen könnten das Äquivalent von enter sein? – Bob5421