我是使用IDA Pro进行调试的新手,但遇到了尝试使用gdbserver进行调试时未命中断点的问题。该程序是我自己编写的,使用gdb调试很简单。有人可以帮助我进行IDA调试吗?以下是我执行的调试步骤:
在本地主机的终端中启动gdbserver 7.7版,配置为“ x86_64-linux-gnu”,如下所示:

$ gdbserver --multi localhost:1234
Listening on port 1234



在IDA Pro 6.6版中打开一个新数据库,在代码中设置一个断点,选择“ Remote GDB

FFFFFFFFFFFFFFFF: process /home/benny/3-challenge has started (pid=0)
FFFFD8F8: got SIGTRAP signal (Trace/breakpoint trap) (exc.code 5, tid 27171)



IDA中弹出警告,提示以下消息:

FFFFD8F8: got SIGTRAP signal (Trace/breakpoint trap) (exc.code 5, tid 27171)



运行gdbserver的终端显示以下消息:


Remote debugging from host 127.0.0.1
Process /home/benny/3-challenge created; pid = 27171



我想SIGTRAP可能已经是一个问题,但是,我不明白为什么会得到它。我在做什么错?

通过忽略警告仍然可以走得更远:


IDA调试视图显示RIP在内存位置FFFFD8F8上,这是一个未开发的二进制文件的区域:MEMORY:FFFFD8F8 db ?;
在IDA中按F9会弹出一个“异常处理”对话框,如下图所示。执行调试会话和IDA输出窗口会打印

Debugger: process has exited (exit code 5)



运行gdbserver的终端上的输出会打印

Child terminated with signal = 0x5 (SIGTRAP)
readchar: Got EOF
Remote side has terminated connection.  GDBserver will reopen the connection.
Listening on port 1234


如果您需要更多信息,请告诉我。

更新:我对GDB服务器感到厌烦,现在使用英特尔PIN进行调试,它的工作原理很吸引人。 IDA Pro。

评论

你在调试什么?它可能包含一些反调试方法。

正如我在问题的第二句话中所说的那样:“我调试的程序是我自己编写的”。它非常简单,并且不包含反调试方法。

哎呀错过了。抱歉,您可以分享它,以便我尝试在我的盒子上重现吗?

#1 楼

通常,调试中断异常(SIGTRAP)引发int 3

IDA收到IDA时,会询问您是否将其传递给程序(未处理)。如果这样做,并且没有为SIGTRAP安装信号处理程序,则该程序将因出现SIGTRAP错误而死亡。您想继续)或暂停以调查IDA中的状态。