附加到进程时,gdb无法插入断点

时间:2017-03-18 13:02:25

标签: c debugging gdb

我正在尝试将gdb附加到由socat启动的程序中,如下所示:

socat TCP-LISTEN:5678,reuseaddr,fork EXEC:./test

在另一个终端,

sudo gdb 
attach `pidof socat`
br *0x080487D4

在gdb中执行continue命令时,它会显示如下错误:

Warning:
Cannot insert breakpoint 1.
Cannot access memory at address 0x80487d4

Command aborted.

0x080487D4位于.text程序的test。 gdb的follow-fork-modechild,我在线搜索但仍然无法解决。

我一个月前就像这样成功地调试了程序,并且不知道为什么它现在不起作用。但是如果使用gdb直接调试程序就可以了:

gdb -q ./test

然而,上述方式无法满足我的需求。

通过调试,我认为gdb期望该地址是socat而不是test程序中的有效地址。那么如何在test程序中设置断点呢?如果没有test程序中的断点,它将在执行continue命令时直接运行到结尾。在socat程序中设置断点是没用的。

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我已经想出如何在test程序中设置断点。

使用test启动socat程序时,在插座连接到来之前,它不会分叉test进程。因此,尝试在test程序中直接设置断点失败。

我使用工具(为了我的目的,选择pwntools)连接到它并暂停它,然后使用gdb附加到分叉的test进程。接下来,我可以正常调试。

有更好的想法吗?提前谢谢。