9

我是 qemu 的新手,我读到它允许单步模式仿真。这很有帮助,因为我试图在每个周期都转储物理内存的一些地址。不幸的是,qemu 文档非常糟糕。我知道如何从 qemu 监视器启用单步模式,但我不知道在哪里放置我想在每一步执行的代码。有人有这方面的信息吗?

4

3 回答 3

3

http://www.xenproject.org/help/questions-and-answers/problem-with-vga-passthrough.html

上面的链接是用于进入 QEMU 单步模式的命令行选项。接下来是获取 QEMU 的源代码(http://wiki.qemu.org/Download

函数 monitor.c:do_singlestep(Monitor *mon, const QDict *qdict)

只需简单地设置一个标志“单步”。请注意,这与“singlestep_enabled”不同,后者用于模拟硬件单步仿真。

(全局变量在 vl.c 中声明)。

现在查看 targt-i386/translate.c 中的所有函数 - 测试“单步”标志的地方是:

    if (singlestep) {
        gen_jmp_im(pc_ptr - dc->cs_base);
        gen_eob(dc);
        break;
    }

这是执行二进制文件的地方(或者更准确地说是“翻译”),或者引发硬件异常和处理程序(例如)。如果您想修改任何行为,也许您可​​以在这里尝试?

于 2014-05-24T17:41:32.437 回答
3

您可以使用 gdb 附加到来宾

--gdb tcp::

qemu 的选项,然后使用

$ gdb <binary>
(gdb) symbol-file <sym file>
(gdb) target remote <host>:<port number>
(gdb) b <function>
(gdb) c

'b' 设置断点。'n' 's' 'i' 可用于单步执行代码。在 gdb 模式下输入“info”会显示更多信息

于 2014-03-19T20:30:22.200 回答
0

来自Ubuntu 文档

   -singlestep
          Run the emulation in single step mode.
于 2022-01-18T04:56:21.080 回答