Ich versuche, direkt nach dem Laden des Moduls in Gdb zu stoppen. Nehmen wir an, dass das Binary vollständig aus allen Symbolinformationen entfernt ist, also gibt es kein Main.So legen Sie den frühestmöglichen Haltepunkt fest
Ideal würde ich den Stützpunkt auf der Einstiegspunkt gesetzt, aber diese Idee setzt sich durch Verlagerungen:
(gdb) info target
Symbols from "./application".
Local exec file:
`./application', file type elf64-x86-64.
Entry point: 0xc154
...
(gdb) break *0xc154
Breakpoint 1 at 0xc154
(gdb) r
Starting program: ./application
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0xc154: Input/output error.
(gdb) info target
Symbols from "./application".
Unix child process:
Using the running image of child process 22835.
While running this, GDB does not access memory from...
Local exec file:
`./application', file type elf64-x86-64.
Entry point: 0x555555560154
Auch wenn diese Art-Werke (ich einen neuen Haltepunkt auf die neue Adresse einstellen könnte und deaktivieren Sie das Original), es kann nicht einfach über Gdb-Skript/Batch-Modus ausgeführt werden, weil es eine fehlgeschlagene Anweisung in der Mitte hat.
Gibt es eine Möglichkeit, das zu tun? Idealerweise wäre etwas wie "run single instruction" statt "run" nützlich.
perfekt, genau das, was ich brauchte – viraptor
Dies funktioniert nicht auf positionsunabhängigen ausführbaren Dateien. –
@ZachRiggle Die obige Antwort enthält eine Spur von GDB-Befehlen, die * für * PIE binary gesammelt wurden, und es funktioniert eindeutig *. Wenn es für Sie nicht funktioniert hat, haben Sie vielleicht eine alte/fehlerhafte GDB oder keine GLIBC oder ... –