書中講到了如何利用_asm int 3 調試代碼。
_asm int 3需要配合Nt32Pkg使用。也就是說通過Nt32Pkg編譯出的.efi文件才能夠調試。
如果你帶_asm int 3語句的工程是通過非Nt32Pkg編譯出來的(例如AppPkg),在SecMain模擬器中調試會導致斷點停在Image.c文件如下代碼中
Image->Status = Image->EntryPoint (ImageHandle, Image->Info.SystemTable);在模擬器控制臺會輸出
解決方案
在.inf文件中添加如下代碼
_asm int 3需要配合Nt32Pkg使用。也就是說通過Nt32Pkg編譯出的.efi文件才能夠調試。
如果你帶_asm int 3語句的工程是通過非Nt32Pkg編譯出來的(例如AppPkg),在SecMain模擬器中調試會導致斷點停在Image.c文件如下代碼中

WARNING: No source level debug
表明SecMain在加載你的模塊時沒有成功加載調試符號。解決方案
在.inf文件中添加如下代碼
[BuildOptions]
MSFT:DEBUG_*_IA32_DLINK_FLAGS = /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE
MSFT:DEBUG_*_IA32_DLINK_FLAGS = /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE