如何在QEMU中使用单步模式?

时间:2013-11-04 22:49:31

标签: processor qemu kvm emulation

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

2 个答案:

答案 0 :(得分:2)

您可以使用gdb通过

附加到访客

- gdb tcp ::

qemu的

选项然后使用

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

&#39; B&#39;设置一个断点。 &#39; N&#39; &#39; S&#39; &#39;我&#39;可以用来逐步执行代码。输入&#34;信息&#34;在gdb模式下将显示更多信息

答案 1 :(得分:1)

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”。请注意,这与“singlestep_enabled”不同,后者是模拟硬件单步操作模拟。

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

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

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

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