gdb 反向调试失败并显示“进程记录不支持地址处的指令 0xf0d”

Posted

技术标签:

【中文标题】gdb 反向调试失败并显示“进程记录不支持地址处的指令 0xf0d”【英文标题】:gdb reverse debugging fails with "Process record does not support instruction 0xf0d at address" 【发布时间】:2010-03-27 10:35:18 【问题描述】:

我开始尝试使用 gdb 7 进行反向调试,按照教程进行操作:

http://www.sourceware.org/gdb/wiki/ProcessRecord/Tutorial

我想,太好了!

然后我开始调试一个真正的程序,最后给出一个错误。所以我用 gdb 运行它,并在我认为错误出现的位置之前放置了一个断点。然后我键入“记录”以开始记录操作以供将来进行反向调试。但是经过一些步骤后,我得到了

Process record doesn't support instruction 0xf0d at address 0x2aaaab4c4b4e.
Process record: failed to record execution log.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00002aaaab4c4b4e in memcpy () from /lib64/libc.so.6
(gdb) n
Single stepping until exit from function memcpy,
which has no line number information.
Process record doesn't support instruction 0xf0d at address 0x2aaaab4c4b4e.
Process record: failed to record execution log.

Program received signal SIGABRT, Aborted.
0x00002aaaab4c4b4e in memcpy () from /lib64/libc.so.6

在详细看之前,我想知道这个功能是否还有bug,或者我是否应该从头开始录制。

在发生这种“记录”错误的地方,只是创建了一个对象作为其他对象的副本。

【问题讨论】:

【参考方案1】:

从 GDB 7.11.1 开始不支持 AVX

也许这和上面提到的问题是一样的:

gdb reverse debugging avx2 https://sourceware.org/ml/gdb/2016-08/msg00028.html

因为您的跟踪提到了 memcpy,它在 Ubuntu 16.04 中使用 AVX 指令,但如果没有一个最小的例子就很难确定。

rr 是一个很棒的工作选择:https://github.com/mozilla/rr 这是一个最小的工作示例:Setting breakpoint in GDB where the function returns

【讨论】:

解决方案见***.com/a/61048314/594456,公关请见sourceware.org/bugzilla/show_bug.cgi?id=23188#c6。【参考方案2】:

这是因为 prec 还不支持这个 insn。

现在已经修复了。你可以试试 gdb-cvs-head。

【讨论】:

真的很感谢,希望以后不要再出错,享受逆向调试的乐趣【参考方案3】:

听起来precord 还是有问题。

请确保您使用的是最新发布的 GDB 7.1,并提交错误。 x/i 0x2aaaab4c4b4e 的输出可能会有所帮助。 GCC 和 libc.so.6 的确切分布和版本也是如此

【讨论】:

以上是关于gdb 反向调试失败并显示“进程记录不支持地址处的指令 0xf0d”的主要内容,如果未能解决你的问题,请参考以下文章

gdb调试Alpine Linux上的OpenJDK java失败了“线程接收信号?,未知信号”

GDB 远程调试 - 无法为默认可视化器实例化打印机

无法在 Qt Creator 中启动 gdb.exe

在Windows上使用gdb调试MinGW程序,而不是在断言失败时终止

GDB 调试命令

gdb调试程序函数名为问号,啥原因?