QEMU gdb 服务器线程问题

逆向工程 艾达 数据库 手臂 奇木
2021-06-23 04:22:09

我在使用静态编译的 QEMU arm 版本时遇到问题。我正在尝试从嵌入式设备调试应用程序。除了其他线程上的断点外,一切似乎都正常。我正在使用 IDA 远程 gdb 函数进行调试。而不是在这里打破在此处输入图片说明

它给了我一个 SIGTRAP 并转到这里在此处输入图片说明 使用硬件断点也不能解决问题。

编辑:问题似乎不是 IDA 本身。我使用的是 qemu-arm-static 2.0.0 版。IDA 似乎有我上面提到的错误。使用命令行 gdb-multiarch 尝试调试它,我在遇到断点后收到以下错误:

Program received signal SIGTRAP, Trace/breakpoint trap.
0xf67c523c in ?? ()
(gdb) info registers
/build/buildd/gdb-7.7.1/gdb/findvar.c:292: internal-error: value_of_register_lazy: Assertion `frame_id_p (get_frame_id (frame))' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y

/build/buildd/gdb-7.7.1/gdb/findvar.c:292: internal-error: value_of_register_lazy: Assertion `frame_id_p (get_frame_id (frame))' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.

这发生在 2.0.0 qemu 版本以及我从这里获得的 2.8.0 版本

1个回答

QEMU 用户模式仿真(例如qemu-arm, qemu-arm-static)不支持同时调试多个线程。

您必须使用qemu-arm-system并运行整个 ARM 内核。

另外,您的 QEMU 和 GDB 已经非常过时了。我建议更新:

  • QEMU / qemu-static. 最新版本是2.10.1. QEMU 2.0.0 已经三年多了。
  • gdb/ gdb-multiarch/ gdbserver最新版本是8.0.1. GDB 7.7 已经三年多了。

最后,如果你不需要同时调试多个线程,你可以通过使用附加到“适当”的线程

  • set detach-on-fork off
  • set follow-fork-mode [parent|child] 作为适当的