在 IDA Pro 中使用 gdbserver 进行调试时出现问题

逆向工程 艾达 调试 数据库 x64
2021-06-30 09:03:38

我刚开始使用 IDA Pro 进行调试,但在尝试使用 gdbserver 进行调试时遇到了未命中断点的问题。程序是自己写的,用gdb调试很简单。有人可以帮助我使用 IDA 进行调试吗?以下是我执行的调试步骤:

  1. 在我的本地主机上的终端中启动配置为“x86_64-linux-gnu”的 gdbserver 7.7 版,如下所示:

    $ gdbserver --multi localhost:1234
    Listening on port 1234
    
  2. 在 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)
    
  3. 一个警告在IDA弹出给我下面的消息:

    FFFFD8F8: got SIGTRAP signal (Trace/breakpoint trap) (exc.code 5, tid 27171)
    
  4. 运行 gdbserver 的终端显示以下消息:

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

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

无论如何,通过忽略警告来进一步:

  1. IDA 调试视图在内存位置显示 RIP,FFFFD8F8位置位于二进制文件的未探索区域:MEMORY:FFFFD8F8 db ?;

  2. 在 IDA 中按 F9 弹出“异常处理”对话框,如下所示 在此处输入图片说明

  3. 单击“是(传递给应用程序)”,这将终止调试会话的执行并且 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 收到它时,它会询问您是否将它传递给程序(未处理)。如果您这样做了,并且您没有为 安装信号处理程序SIGTRAP,则程序将因SIGTRAP错误而终止,如您所见。

您希望 IDA丢弃异常,并继续执行(如果您想继续)或暂停以调查 IDA 中的状态。