debugging 不要单步执行gdb中的函数调用

bxpogfeg  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(161)

我正在用gdb调试一个没有调试信息的二进制文件,我想在第一次调用puts之前中断,但不想进入函数。
我尝试了以下方法:

gdb> b puts
gdb> r

gdb> b main
gdb> b puts
gdb> r
gdb> c

但是gdb总是输入puts,而不是在系统调用之前中断。

yizd12fk

yizd12fk1#

但是gdb总是在系统调用之前输入puts而不是break。
这是你 * 要求 * 广发银行做的。
如果要在CALL puts指令之前停止,则需要disas main,找到CALL puts指令,并在该指令上设置断点:

(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的意思完全不同。

相关问题