Después de cargar un ejecutable en gdb, ¿cómo rompo en el punto de entrada, antes de que se ejecute la primera instrucción?
puede encontrar qué funciones se llaman antes int main()
con set backtrace past-main on
y después de encontrar a establecer un punto de interrupción en ellas y reiniciar su programa:
>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()
Por 'lldb', véase: [? ¿Cómo detener depurador justo después de la ejecución] (http://reverseengineering.stackexchange.com/q/9583/12021) – kenorb