Nach dem Laden einer ausführbaren Datei in gdb, wie kann ich am Einstiegspunkt brechen, bevor die erste Anweisung ausgeführt wird?
finden Sie, was Funktionen vor int main()
mit set backtrace past-main on
aufgerufen werden und nach dem Auffinden stellt sie einen Haltepunkt auf sie und das Programm neu starten:
>gdb -q main
Reading symbols from /home/main...done.
(gdb) set backtrace past-main on
(gdb) b main
Breakpoint 1 at 0x40058a: file main.cpp, line 25.
(gdb) r
Starting program: /home/main
Breakpoint 1, main() at main.cpp:25
25 a();
(gdb) bt
#0 main() at main.cpp:25
#1 0x0000003a1d81ed1d in __libc_start_main() from /lib64/libc.so.6
#2 0x0000000000400499 in _start()
(gdb) b _start
Breakpoint 2 at 0x400470
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/main
Breakpoint 2, 0x0000000000400470 in _start()
Für 'lldb' finden Sie unter: [? Wie Debugger direkt nach der Ausführung stoppen] (http://reverseengineering.stackexchange.com/q/9583/12021) – kenorb