我刚开始使用 IDA Pro 进行调试,但在尝试使用 gdbserver 进行调试时遇到了未命中断点的问题。程序是自己写的,用gdb调试很简单。有人可以帮助我使用 IDA 进行调试吗?以下是我执行的调试步骤:
在我的本地主机上的终端中启动配置为“x86_64-linux-gnu”的 gdbserver 7.7 版,如下所示:
$ gdbserver --multi localhost:1234 Listening on port 1234
在 IDA Pro 6.6 版中打开一个新数据库,在代码中设置一个断点,选择“Remote GDB Debugger”并启动一个新进程。IDA 输出窗口显示以下消息:
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 来说就像一个魅力。