Warm tip: This article is reproduced from serverfault.com, please click

qemu-为什么我的 cpu 似乎失去了解码能力

(qemu - Why my cpu seems to lose the ability to decode)

发布于 2021-04-09 11:18:47

我在完成我的操作系统课程的实验室时遇到了这个问题。我们正在尝试实现一个具有系统调用功能的内核(平台:QEMU/i386)。测试内核时,出现问题,内核将用户程序加载到内存并使用' iret '指令将CPU状态从内核模式更改用户模式后,CPU以如下奇怪的方式工作。

  • 无论当前指令有多长,%EIP 寄存器每次增加 2
  • 似乎没有指令被执行,因为在此期间没有其他寄存器改变
Questioner
StupidPanther
Viewed
11
Peter Maydell 2021-04-09 21:01:01

你的来宾可能最终执行了一块已清零的内存。在 i386 中,归零内存反汇编为一系列“add BYTE PTR [rax],al”指令,每个指令长两个字节(0x00 0x00),如果 rax 恰好指向读取为零的内存,这将有效是一个 2 字节的 inn 无操作,它对应于你所看到的。这可能是因为你错误地设置了 iret 并且它没有返回到你期望的地址,或者因为你的 MMU 设置错误并且用户空间程序不在你期望的内存中,因为实例。

你可以使用 QEMU 的调试选项(例如-d in_asm,cpu,exec,int,unimp,guest_errors -D qemu.log将大量执行信息记录到文件中)来确认这一理论,它应该(在许多其他数据中)向你显示它实际执行的指令。