Ich mache ein kleines Programm, das ein bisschen wie strace funktioniert, außer dass ich es alle Anrufe und auch die Rets fangen lasse. Da ich keine Möglichkeit finde, alle Aufrufe und ret wegen indirekter Aufrufe zu erhalten, würde ich gerne einen Weg finden, um die Funktion zu erhalten, von der ein ret-Opcode stammt. Haben euch eine Idee, wie man dieWie man den Ursprung eines ret Opcodes beim Verfolgen eines Programms erkennt
Antwort
Sie simulieren können, was ein ret
tun: Es sieht in den Stapel an der Adresse %esp
und setzt EIP
auf diesen Wert. Die Anweisung vor der Adresse auf dem aktuellen Stapel wird die call
sein, die hier verwendet wird.
ok, aber da die Größe des vorherigen Befehls nicht festgelegt ist, ist es nicht schwierig, rückwärts zu gehen und zum Anfang dieses Befehls zu gelangen? –
Ja, das ist eine allgemeine Einschränkung aller Opcode-Architekturen mit variabler Größe - Sie können nicht rückwärts gehen. Aber Sie kennen die aufrufende Funktion. Ich bin mir nicht sicher, warum Sie den 'Aufruf' an erster Stelle haben wollen, aber die Art, das zu tun, ist dann, die ganze Funktion von jedem gültigen Punkt zu disassemblieren, den Sie kennen, an der Adresse haltend, die von der' ret' gelesen wird . – phihag
- 1. Wie erkennt man den Blattwechsel eines Benutzers?
- 2. Wie berechne ich den Gesamtraum eines Programms?
- 3. Wie man das Thema eines Programms ändert
- 4. Stoppen eines Python-Programms
- 5. Fehler beim Kompilieren eines eingebetteten SpiderMonkey-Programms
- 6. Wie würde man die Schritte eines rekursiven Programms zählen
- 7. Wie erkennt man den Typ eines Objekts in einer Liste?
- 8. Wie erkennt man den Typ eines jQuery-Objekts?
- 9. Wie erkennt man den Hash-Algorithmus eines Strings?
- 10. INFORMIX Fehler beim Ausführen eines Java-Programms
- 11. Verfolgen eines eBay-Tokens
- 12. Ausführen eines Clojure-Programms
- 13. Schreiben eines modularen Programms
- 14. Ausgabe eines Multithread-Programms
- 15. Erstellen eines Programms in R
- 16. Halten eines Batch-Programms
- 17. Ausgabe eines C-Programms
- 18. Boost Date_Time Problem beim Kompilieren eines einfachen Programms
- 19. Kompilieren eines Objective-C-Programms
- 20. Wie kann ich den Status eines Programms erhalten?
- 21. Wie bekomme ich den c-Code eines Nim-Programms?
- 22. Beenden eines Programms in Python
- 23. Wie setzt man die CPU-Affinität eines Programms?
- 24. Wie Fenster eines externen Programms programmgesteuert ausblenden?
- 25. Ergebnis eines kleinen C-Programms
- 26. Wie Sie den Standort eines Android-Mobiltelefons kontinuierlich verfolgen?
- 27. Erstellen eines Windows-Dienstes zum Öffnen eines Programms - Delphi
- 28. Wie erhält man den letzten Wert beim Abonnieren eines Observable?
- 29. Arbeitsverzeichnis eines anderen Programms ermitteln
- 30. Schlechter Look eines gtkmm Programms
Welcher Befehlssatz ist das? –