9

我开始尝试使用 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

在我详细看之前,我想知道这个功能是否仍然存在错误,或者我是否应该从头开始录制。

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

4

3 回答 3

4

自 GDB 7.11.1 起不支持 AVX

也许这与以下提到的问题相同:

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

rr是一个很棒的工作选择:https ://github.com/mozilla/rr这是一个最小的工作示例:在函数返回的 GDB 中设置断点

于 2017-09-08T09:44:45.833 回答
1

这是因为 prec 仍然不支持这个 insn。

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

于 2010-06-18T07:53:58.683 回答
0

听起来precord还是有问题的。

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

于 2010-03-27T20:04:19.313 回答