qemu可以逆向调试吗?

Is it possible to do reverse debugging with qemu?

我在 this page 上读到他们将向现有模拟器(例如 qemu)添加反向执行支持。由于此页面自 2012 年以来最后一次编辑,我想知道当前版本的 qemu 是否支持此功能。如果可以,如何使用?

有一些补丁,但 AFAIK 尚未合并: http://lists.gnu.org/archive/html/qemu-devel/2014-11/msg03947.html

与此同时(无耻的插件),如果它是一个用户模式 ​​Linux 应用程序你正在寻找调试,你总是可以尝试 http://undo-software.com/

Pavel 的补丁集

这是一个重要的 2018 补丁集 https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg00478.html,我发现它可能会在某个时候被合并。

它的工作原理很简单,就是在反向中断之前恢复最近的检查点。您必须手动执行检查点,但这是朝着更自动化的方向迈出的良好第一步。

mozilla/rr

https://github.com/mozilla/rr is an open source alternative to UndoDB, and it is mentioned at https://www.linaro.org/blog/core-dump/tricks-for-debugging-qemu-rr/

rr 的网站特别声称它可以反向调试 QEMU 和最复杂的 Linux 应用程序。

当然,使用 rr 或 UndoDB,您将直接反向遍历 QEMU 源代码。

但也许在 QEMU 内的主 CPU 循环上放置断点很简单,然后通过 QEMU 监视器的 stop, [=12] 以某种方式方便地观察机器状态(内存和寄存器) =]、xxp 命令?

Simuliks

http://simulics.com/index_en.php is a commercial solution, but as mentioned at http://jakob.engbloms.se/archives/2452#more-2452 由于 ISA 支持和基于 Java 的特性,它不太可能是基于 QEMU 的。

Userland反向调试

这会更酷,但它出现的可能性更小,因为我什至没有看到对前向 QEMU 用户态调试的简单支持:Is it possible to use gdb and qemu to debug linux user space programs and kernel space simultaneously?

一种天真的实现可能性是将 QEMU 置于跳过环 0 的模式。