小编sav*_*bug的帖子

x86 指令是否需要它们自己的编码以及它们的所有参数同时存在于内存中?

我试图弄清楚是否有可能运行一个 Linux VM,其 RAM 仅由单个物理页面支持。

为了模拟这一点,我修改了 KVM 中的嵌套页错误处理程序,以从所有嵌套页表 (NPT) 条目中删除当前位,但与当前处理的页错误对应的条目除外。

在尝试启动 Linux 客户机时,我观察到使用内存操作数的汇编指令,例如

add [rbp+0x820DDA], ebp
Run Code Online (Sandbox Code Playgroud)

导致页面错误循环,直到我恢复包含指令的页面以及操作数中引用的页面的当前位(在本例中[rbp+0x820DDA])。

我想知道为什么会这样。CPU不应该按顺序访问内存页,即先读取指令,然后访问内存操作数吗?还是 x86 要求指令页和所有操作数页可以同时访问?

我正在 AMD Zen 1 上进行测试。

virtualization paging x86 assembly kvm

68
推荐指数
1
解决办法
1467
查看次数

标签 统计

assembly ×1

kvm ×1

paging ×1

virtualization ×1

x86 ×1