Windows11下使用WinDbg Preview调试LoadLibraryExW相关问题咨询
问题解答
一、LoadLibraryExW 第三个参数读取方法
- 你当前使用的是x64架构Windows,遵循微软x64调用约定:函数前4个参数依次存储在
RCX、RDX、R8、R9寄存器中,超出4个的参数才会压入栈。LoadLibraryExW共有3个参数,第三个参数dwFlags存储在R8寄存器中。 - 你贴出的
k命令输出中Args to Child列的数值仅为栈上对应偏移的原始值,在没有正确加载符号的情况下不具备参考性,无法直接作为参数值使用。 - 你当前断点触发后直接执行
r r8命令读取R8寄存器的取值,就是你要确认的LoadLibraryExW第三个参数。 - 补充你的故障根因判断:
AddDllDirectory()添加的路径要生效,必须保证LoadLibraryExW调用时第三个参数包含LOAD_LIBRARY_SEARCH_USER_DIRS标识,否则系统不会检索你添加的用户目录,就会出现DLL加载失败的问题。
二、kernelbase.pdb 获取方法
- 所有正式发布的Windows版本(包括旧版本)的
kernelbase.pdb都是公开的,托管在微软公共符号服务器上,你无法加载符号大概率是符号配置问题。 - 正确配置符号路径的操作:在WinDbg命令行输入以下命令:
.sympath srv*C:\Symbols*https://msdl.microsoft.com/download/symbols .reload /f kernelbase.dll
- 上述命令会将符号缓存路径设为
C:\Symbols,强制拉取对应版本的kernelbase.pdb。如果仍加载失败,可清空符号缓存目录后重试,若依旧失败则说明你当前系统的kernelbase.dll属于预览版/非正式渠道版本,无公开符号可用。
三、WinDbg 读取函数参数的常用命令
- 加载对应函数的符号后:
- 执行
kp/kP命令,堆栈会自动展开显示每个函数的参数名、参数值,可直接读取LoadLibraryExW的三个参数 - 停在函数断点处时执行
dv命令,会输出当前栈帧的所有参数、局部变量的取值
- 执行
- 无符号时可直接按调用约定读寄存器,无需符号即可取值:
- 第一个参数:
r rcx - 第二个参数:
r rdx - 第三个参数:
r r8 - 第四个参数:
r r9
- 第一个参数:
内容的提问来源于stack exchange,提问作者Justin Dearing
相关产品推荐
相关产品推荐

