我开始尝试使用gdb 7进行反向调试,请按照教程进行操作:
http://www.sourceware.org/gdb/wiki/ProcessRecord/Tutorial
我想,太棒了!
然后我开始调试一个真正的程序,最后给出一个错误。所以我用gdb运行它,并在我认为错误出现的地方之前放置一个断点。然后我键入“record”以开始记录操作以便将来进行反向调试。但经过一些步骤后,我得到了
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
在详细介绍之前,我想知道这个功能是否仍然存在问题,或者我是否应该从头开始录制。
如果发生此“记录”错误,只需将对象创建为其他对象的副本。
答案 0 :(得分:1)
这是因为这个insn仍然不支持prec。
现在修好了。你可以试试gdb-cvs-head。
答案 1 :(得分:0)
precord
之类的声音仍然存在问题。
请确保您使用的是最新发布的GDB 7.1,并提交错误消息。 x/i 0x2aaaab4c4b4e
的输出可能会有所帮助。因此,GCC和libc.so.6的确切分布和版本
答案 2 :(得分:0)
自GDB 7.11.1起支持AVX
也许这与上面提到的问题相同:
因为你的跟踪提到了memcpy,它在Ubuntu 16.04中使用了AVX指令,但是如果没有最小的例子就很难确定。
rr
是一个很棒的工作替代方案:https://github.com/mozilla/rr这是一个最小的工作示例:Setting breakpoint in GDB where the function returns