偶然的机会需要在UEFI boot阶段进行调试,但之前没接触过,不知道怎么搭建调试环境,网上搜了一些文章讲的一知半解的,遂写一下怎么设置相关环境。
现在一般使用Intel开源的UEFI编写相关代码并调试
https://github.com/tianocore/edk2 下载好后进入vs2022开发人员提示终端执行,需要注意的是该项目依赖于NASM,需要设置环境变量
NASM_PREFIX指向nasm所在目录,此外还需要下载iasl,安装并添加到PATH环境变量。执行
edksetup.bat Rebuild
而后就可以使用命令build -p AppPkg\AppPkg.dsc -a IA32/X64编译相关模块了,对于本地调试环境主要要的是OvmfPkg这个包
build -a X64 -b DEBUG -p OvmfPkg/OvmfPkgX64.dsc
编译好之后将ovmf.fd拷贝到一个目录下,下载qemu for windows并安装,将其添加到环境变量内,随后需要制作qemu启动所需的hdd
qemu-img.exe create -f raw windows.img 60G
qemu-system-x86_64.exe -L . -bios OVMF.fd -hdd windows.img -cdrom Windows.iso -boot d -m 4096 -smp 4 -debugcon file:debug.log -global isa-debugcon.iobase=0x402
之后启动系统
qemu-system-x86_64.exe -L . -bios OVMF.fd -hdd windows.img -cdrom .\win1020h2.iso -boot d -m 4096 -debugcon file:debug.log -global isa-debugcon.iobase=0x402 -m 4096 -smp 4 -boot menu=on,splash-time=5000
通过debuglog确定UEFI模块的entry point,这个地址一般是不变的,得到地址之后在qemu命令行添加-s -S参数使得刚开始就停止,而后使用windbg附加。

即可使用windbg进行调试。