我正在尝试将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-mode
为child
,我在线搜索但仍然无法解决。
我一个月前就像这样成功地调试了程序,并且不知道为什么它现在不起作用。但是如果使用gdb直接调试程序就可以了:
gdb -q ./test
然而,上述方式无法满足我的需求。
通过调试,我认为gdb
期望该地址是socat
而不是test
程序中的有效地址。那么如何在test
程序中设置断点呢?如果没有test
程序中的断点,它将在执行continue
命令时直接运行到结尾。在socat
程序中设置断点是没用的。
有什么建议吗?提前谢谢。
答案 0 :(得分:1)
我已经想出如何在test
程序中设置断点。
使用test
启动socat
程序时,在插座连接到来之前,它不会分叉test
进程。因此,尝试在test
程序中直接设置断点失败。
我使用工具(为了我的目的,选择pwntools
)连接到它并暂停它,然后使用gdb
附加到分叉的test
进程。接下来,我可以正常调试。
有更好的想法吗?提前谢谢。