使用 WinDbg 查找模块的基地址

Find base address for a module using WinDbg

如何确定 WinDbg 中特定模块(例如,ntoskrnl.exe)的基地址?这可能吗?

lm(列表模块)显示 DLL 的信息。您可以使用 lm m <name> 按名称过滤,例如

0:000> lm m ntdll
Browse full module list
start    end        module name
77b90000 77d33000   ntdll      (pdb symbols)          d:\debug\symbols\wntdll.pdb74039C87B27BF997A06A9E2B1C84E61\wntdll.pdb

“开始”栏中的数字是基地址。您可以使用 !lmi 确认它只是一个不同的术语。该命令的输出明确提到“基址”:

0:000> !lmi ntdll
Loaded Module Info: [ntdll] 
         Module: ntdll
   Base Address: 77b90000
[...]

事实上,模块本身的名称就可以作为基地址,所以你实际上不需要copy/paste,键入或记住基地址。例如。而不是

0:000> db 77b90000 L2
77b90000  4d 5a                                            MZ

你也可以使用

0:000> db ntdll L2
77b90000  4d 5a                                            MZ

(实际上 !lmi 的示例已经使用了该技巧)