我是qemu的新手,我读到它允许单步模式仿真。这很有用,因为我试图在每个周期转储一些物理ram的地址。不幸的是,qemu文档非常糟糕。我知道如何从qemu监视器启用单步操作模式,但我不知道在每一步都放置我想要执行的代码。有没有人有这方面的信息?
答案 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;
}
这是二进制文件执行(或“更准确地”翻译),或者引发硬件异常和处理程序(例如)的地方。如果您想要修改任何行为,也许你可以尝试一下吗?