GDB反向调试(Reverse Debugging)命令 ?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDB反向调试(Reverse Debugging)命令 ?相关的知识,希望对你有一定的参考价值。
使用GDB7.0以上版本的调试器并且运行在支持反向调试的平台,你就可以用以下几条命令来调试程序:启动进程记录回放:
(gdb) record
reverse-continue
反向运行程序知道遇到一个能使程序中断的事件(比如断点,观察点,异常)。
reverse-step
反向运行程序到上一次被执行的源代码行。
reverse-stepi
反向运行程序到上一条机器指令
reverse-next
反向运行到上一次被执行的源代码行,但是不进入函数。
reverse-nexti
反向运行到上一条机器指令,除非这条指令用来返回一个函数调用、整个函数将会被反向执行。
reverse-finish
反向运行程序回到调用当前函数的地方。
set exec-direction [forward | reverse]
设置程序运行方向,可以用平常的命令step和continue等来执行反向的调试命令。 参考技术A Windows的换行是\r\n,Unix的换行是\n,你查看一下txt的配置是否正确。就这么多了,希望能帮到你
更多建站问题,可搜一下“飘仙论坛”
gdb 反向调试失败并显示“进程记录不支持地址处的指令 0xf0d”
【中文标题】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反向调试(Reverse Debugging)命令 ?的主要内容,如果未能解决你的问题,请参考以下文章
g++ 编译,GDB调试时发生这样的问题(No debugging symbols found in xxxx)
g++ 编译,GDB调试时发生这样的问题(No debugging symbols found in xxxx)
攻防世界reverse进阶easyre-153 writeup(#gdb调试父子进程#ida版本差异)
gdb 反向调试失败并显示“进程记录不支持地址处的指令 0xf0d”
让QtCreator在调试时显示字符串 Qt调试助手 QtDebuggingHelper qtc-debugging-helper