Bochs, JPC都是X86的仿真器,但无论从功能还是执行速度上,完全比不上Qemu。
最近没事,分析下Qemu。
核心数据结构之一: CPUState, 所有的取址,译码,执行,更新寄存器的操作,全部与此相关。
第一个我要搞懂的是Qemu如何更改虚拟CPU的寄存器,达到执行非Host环境的代码。
直接gdb调试,图片保存,方便回忆:
再找到执行目标代码的地方:
再根据Intel CPU手册,对应Qemu复位CPU的代码,即可大致弄懂Qemu是如何维护使用虚拟CPU的。