gdb未命中断点

gdb未命中断点,gdb,reverse-engineering,breakpoints,freebsd,Gdb,Reverse Engineering,Breakpoints,Freebsd,为了进一步了解FreeBSD和*nix系统,我将开始研究DEFCON 17 Capture the Flag游戏中的二进制文件。现在,我正在反转tucod二进制文件。以下是关于tucod的一些可能有用的信息: tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripp

为了进一步了解FreeBSD和*nix系统,我将开始研究DEFCON 17 Capture the Flag游戏中的二进制文件。现在,我正在反转tucod二进制文件。以下是关于tucod的一些可能有用的信息:

tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripped
从一些简单的静态分析中获得的其他一些可能有用的信息是,tucod绑定在端口0xDEAD上(可爱,嗯?),如果您给它一个特定的密码(“HANGEMHIGH!”),它将与您玩一个hang man游戏

我遇到的问题是我没有在gdb中找到断点。具体地说,我试图找到的断点在处理客户端连接的代码中。如果没有断点,代码将按预期执行。当我在代码上设置断点时,子代码退出(而不是像预期的那样进入gdb)。如果我在服务器分叉子节点之前设置了断点,我可以很好地点击这些断点,但在点击“继续”之后,子节点不会继续处理我的连接(也就是说,它不会要求我输入密码或玩hang-man)

由于守护进程在接收到新连接时会分叉,因此我尝试告诉gdb使用以下命令跟随子进程:

(gdb) set follow-fork-mode child
但是,在fork之后单步执行指令之后,这似乎不起作用

我试着寻找对
signal
的调用,认为它们实现了一个定制的SIGINT处理程序(或类似的),但我能看到的唯一对
signal
的调用处理SIGCHLD

我在gdb中的断点当前如下所示:

(gdb) info breakpoints
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x080497d0
0x080497d0
是我想在客户端处理代码中打断的地址

我对分析*nix系统上的软件有点陌生,可以使用一些指针我还应该如何解决为什么GDB不会达到我的断点的问题?或者我只是忽略了一些重要的问题


所有游戏二进制文件都有一个可供直接查看二进制文件的工具。

寻找答案。简而言之,GDB似乎只在HP-UX和Linux上支持子调试模式。

谢谢!我为此所做的工作就是修补二进制文件,让父级执行子级的部分。对我来说,这比尝试添加睡眠调用要简单,因为我没有来源。但对发生的事情的解释才是我真正想要的。再次感谢。@Nikolai断开了链接