我试图附加gdb
由socat
启动这样的程序不能插入断点:GDB当连接到进程
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.
0x08 0487D4在test
程序的.text
中。 gdb的follow-fork-mode
是child
,我在网上搜索,但仍无法解决它。
我在一个月前以这种方式成功地调试了程序,并且不知道为什么它现在不起作用。但没关系,如果直接使用gdb调试程序就像这样:
gdb -q ./test
但是,上面的方式并不符合我的需要。
通过调试,我认为gdb
预计该地址是在socat
而不是test
程序中的有效地址。那么我怎样才能在test
程序中设置断点呢?在test
程序中没有断点时,执行continue
命令时,它将直接运行到最后。在socat
程序中设置断点是没用的。
有什么建议吗?提前致谢。
你如何确定该地址是正确的地址?我没有看到你正在做什么来确定'socat'在内存中的映射位置。你是否编译为PIE代码? –
你为什么觉得你需要sudo? – sigjuice
@DavidHoelzer,谢谢你的回复。当反编译'test'程序时,地址是从Ida pro获得的,与'socat'无关。当一个进程与socat分离时,gdb会遵循子进程'test',所以我在那个地址设置了一个断点。我应该在'socat'而不是'test'程序中设置断点吗? – cq674350529