我正在用gdb调试一个没有调试信息的二进制文件,我想在第一次调用puts之前中断,但不想进入函数。我尝试了以下方法:
puts
gdb> b puts gdb> r
或
gdb> b main gdb> b puts gdb> r gdb> c
但是gdb总是输入puts,而不是在系统调用之前中断。
yizd12fk1#
但是gdb总是在系统调用之前输入puts而不是break。这是你 * 要求 * 广发银行做的。如果要在CALL puts指令之前停止,则需要disas main,找到CALL puts指令,并在该指令上设置断点:
CALL puts
disas main
(gdb) start # stop in main to get the binary relocated (gdb) disas ... 0x0000555555555147 <+14>: callq 0x555555555030 <puts@plt> ... (gdb) break *0x0000555555555147 (gdb) cont Breakpoint 2, 0x0000555555555147 in main () (gdb) x/i $pc => 0x555555555147 <main+14>: callq 0x555555555030 <puts@plt>
另外,syscall的意思完全不同。
syscall
1条答案
按热度按时间yizd12fk1#
但是gdb总是在系统调用之前输入puts而不是break。
这是你 * 要求 * 广发银行做的。
如果要在
CALL puts
指令之前停止,则需要disas main
,找到CALL puts
指令,并在该指令上设置断点:另外,
syscall
的意思完全不同。