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失败了“线程接收信号?,未知信号”