写入QEMU客户机系统寄存器和内存?

4
如何在运行于QEMU中的虚拟系统中写入处理器寄存器和特定内存地址?
我的愿望是从运行在QEMU外部的用户空间程序中实现这一点。这将用于引发中断并精细控制处理器和虚拟硬件的执行。 QEMU监视器应该读取参数或进行简单的鼠标或键盘事件注入,但我没有看到关于写入的任何信息。
1个回答

2
在QEMU监视器中的GDB服务器似乎是您目的最好的选择。其中一种选项是实现gdb 协议,另一种选项是通过其命令行驱动gdb本身。
我已经进行了一些测试:附加、读取和写入内存似乎可以工作(我读取我写入的内容);跳转到另一个地址也似乎可以工作。(如果您可以call注入的代码,则理论上可以做任何事情。)写入文本模式视频内存无法工作(我甚至无法读取我写的内容,并且显示屏上没有任何变化)。

在qemu中,guest系统可以是任何东西。当我测试它的gdbserver时,它是(1)显示菜单的grub引导程序,(2)memtest,(3)一些用于freeDOS的实模式引导程序(只是为了确保它不会在实模式下崩溃)。 - Anton Kovalenko
一开始我无法确定目标系统是否必须是Unix或Linux系统,但现在看起来并不是。根据OS Dev Wiki的说法,它可以进行源代码级别的调试,而不是机器级别的调试——所以根据你的说法,它似乎不能写入寄存器和视频内存。 - jeremiah
Anton,我认为这至少指引了我正确的方向。我需要查看GDB文档,并且我找到了OSDev Wiki - QEMU GDB文档,其中介绍了如何设置即时断点。 - jeremiah
在发表错误言论之前,您需要了解文本模式,因为与文本模式相关的显示内存有不同的区域被映射。您需要写入正确的区域。 - DevZer0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接