Ich bin außerhalb der ausführbaren Zieldatei von gdb und habe nicht einmal einen Stapel, der diesem Ziel entspricht. Ich möchte sowieso in einem Schritt arbeiten, damit ich überprüfen kann, was in meinem Assemblycode vor sich geht, da ich kein Experte für x86-Assembly bin. Leider weigert sich gdb, dieses einfache Debuggen auf Assembly-Ebene durchzuführen. Es ermöglicht mir, einen geeigneten Haltepunkt festzulegen und anzuhalten, aber sobald ich versuche, einen Schritt weiter zu machen, meldet gdb den Fehler "Grenzen der aktuellen Funktion können nicht gefunden werden" und die EIP ändert sich nicht.
Weitere Details:
Der Maschinencode wurde durch gcc asm-Anweisungen generiert und von der Ausgabe von objdump -d in den Kernelspeicher kopiert, in dem er ausgeführt wird. Es würde mir nichts ausmachen, einen einfachen Loader zu verwenden, um meinen Objektcode an eine verschobene Adresse zu laden, aber denken Sie daran, dass das Laden in einem Kernelmodul erfolgen muss.
Ich nehme an, eine andere Alternative wäre, ein gefälschtes Kernelmodul oder eine Debug-Info-Datei zu erstellen, die an gdb weitergegeben wird, um zu glauben, dass dieser Bereich im Programmcode enthalten ist. gdb funktioniert gut auf der ausführbaren Kernel-Datei selbst.
(Für diejenigen, die es wirklich wissen möchten, füge ich zur Laufzeit Code in den Linux-Kernel-Datenbereich innerhalb einer VMware-VM ein und debugge ihn vom GDB-Remote-Debugging des Kernels über den integrierten GDB-Stub von VMware Workstation. Hinweis: Ich schreibe keinen Kernel Exploits; Ich bin ein Sicherheitsstudent, der einen Prototyp schreibt.)
(Ich kann für jede Anweisung in meiner Assembly einen Haltepunkt festlegen. Dies funktioniert, wird jedoch nach einer Weile recht mühsam, da die Größe der x86-Assemblyanweisungen variiert und sich der Speicherort der Assembly bei jedem Neustart ändert.)