【OSlab】qemu和AbstractMachine的使用
开始
安装qemu-system (全系统模拟器)后
可以看到一个模拟器窗口
上面打印了很多字符串,那不是模拟器实现的,那是固件(firmware)实现的。
调试固件
wget -r -np -nH --cut-dirs=2 -R “index.html*” “https://jyywiki.cn/os-demos/introduction/debug-firmware/”
下载代码:
打开文件夹,里面有三个文件:
查看Makefile内容:
命令行make run,也会出现qemu窗口。与刚刚不同的是,这回找到设备了,并且执行一个死循环。(注意!从qemu取回鼠标的方法是【ctrl+左alt】)
调试(p $eip),可看到它现在一直在执行0x7c00处代码:
此外,这里还有一个能使得gdb调试更方便的东西,叫init.gdb。可以看到,它可以:
- 自动连接本机qemu进行调试
- 设置好watch point、断点、layout asm
- 在关闭gdb时,自动kill qemu(无需手动取回鼠标再点击叉号)
执行make debug,感受一键调试的方便
按一下回车,停在这里的原因就是0x7c00附近有改动,其实就是从磁盘上(image)搬了两个字节(EB FE)
c继续,又搬了两个字节(11 22)
c继续,又搬了两个字节(33 44),但这回没停,估计原因是只能探测四个字节范围的改动。它最终停在了断点。代表要执行0x7c00位置的代码了。如果继续c,那么可以看到这是个死循环。