一次尽快将UEFI断下来的尝试

2024.04.11

实验环境:

格蠹提供的开源UEFI,有个小改动将SD口复用JTAG+UART在PrePiMain就开启

启动幽兰,进入UEFI菜单界面,然后NDB中点击break按钮,NDB会自动加载模块。

执行:
$<d:\uefi.txt

.logopen /t d:\Gedu\uefi\log\uefi.txt
.sympath D:\Gedu\edk2-yourland2024\workspace\efisym
*.srcpath D:\Gedu\edk2-yourland2024
.srcpath d:\Gedu\uefi
.reload ArmPlatformPrePiUniCore.dll=0`00201000,0`A000
x ArmPlatformPrePiUniCore!_ModuleEntryPoint
.reload UiApp.dll=0`E9E74000,0`2A600
x UiApp!_ModuleEntryPoint
.reload Shell.dll=0`e9c62000,0`10e000
x Shell!_ModuleEntryPoint
x DxeCore!_ModuleEntryPoint
bl
lsp -a 5 9
l+l
l+s
l-t
k

加载好符号后,点击运行按钮,长按幽兰电源键关机,然后按电源键开机,并以最快速在NDB点击break按钮:

断下来后,立即k命令观察调用栈,哇,好早的阶段,手点得还算快(暂时还不完整)

观察串口的log:

断点对应的源代码

k命令观察的断点不完整,可以用dqs直接解释栈中的符号,手动分析调用栈:




3fffffff已经是栈底了,至此,手动观察到了完整的调用栈。

UEFI的第一条log字符串,就在栈底压着。

作者:朱博渊  创建时间:2024-04-11 22:01
最后编辑:朱博渊  更新时间:2024-05-06 17:42