什么是回放调试?

逆向工程 调试
2021-07-09 23:08:31

我在这里阅读了一些信息但看起来该站点只关注 vmware,而且它已经放弃了这个想法。这个概念如何与现有的调试环境(如 IDA 和 gdb)一起使用。如果已经实现,我希望链接大致相同。

2个回答

请原谅无耻的插件,但请查看 UndoDB - http://undo-software.com/

它在功能上与 gdb 7 的可逆调试非常相似,但从根本上提高了性能。录制速度减慢通常在 2x-5x 范围内,内存使用量通常约为每秒录制 10MB。

Mozilla rr

除了https://reverseengineering.stackexchange.com/a/2503/12321提到的闭源 Undo 之外,我们现在还有一个惊人的开源工作实现:https : //github.com/mozilla/rr

我在以下位置给出了一个最小的可运行示例:https : //stackoverflow.com/questions/1206872/how-to-go-to-the-previous-line-in-gdb/46996380#46996380

如该示例所示,您首先记录,然后重播,重播使每个非确定性事件(例如线程切换时间、随机数生成)具有确定性以匹配前一次运行。

这样做的一个巨大优势是,它允许您及时倒退,这通常是您在调试应用程序时想要做的,从崩溃回到过去发生的真正原因。

QEMU 反向调试

除了使用硬件和Linux内核特性的用户态反向调试之外,模拟器当然也可以实现反向调试,因为它们控制一切。

特别是,QEMU 有一个反向调试模式,允许这样做:它不一定是“基于重放的”,但它实现了同样的事情:你可以回到过去。在模拟器中进行的很酷的事情是,如果您在 QEMU 上开发Linux 内核,您还可以反向逐步调试它。

另见:https : //stackoverflow.com/questions/29153178/is-it-possible-to-do-reverse-debugging-with-qemu/46499855#46499855