我是 qemu 的新手,我读到它允许单步模式仿真。这很有帮助,因为我试图在每个周期都转储物理内存的一些地址。不幸的是,qemu 文档非常糟糕。我知道如何从 qemu 监视器启用单步模式,但我不知道在哪里放置我想在每一步执行的代码。有人有这方面的信息吗?
问问题
5227 次
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
-singlestep Run the emulation in single step mode.
于 2022-01-18T04:56:21.080 回答