lm 命令不显示正确的模块

lm command does not show correct module

我使用 WinDbg 分析 Adob​​e Acrobat Reader,AcroRd32.exe。我想查看 AcroRd.exe 加载了哪些模块(与 AcroRd32.exe 在同一目录中的 .dll 模块)。

我使用 WinDbg 监控打开一个 PDF 文件,然后使用 lm 命令显示加载的模块。但是,没有与 AcroRd32.exe 具有相同目录的模块 (.DLL)。

这是否意味着 AcroRd32.exe 没有使用这些 DLL?为了验证我的假设,我删除了与 AcroRd32.exe 在同一目录中的所有 DLL 文件。那么AcroRd32.exe就不能正常启动了。这意味着这些 DLL 是 AcroRd32.exe 所必需的。但是为什么 WinDbg 的 lm 命令没有显示这些 DLL 模块?

Acrobat Reader 启动它自己的另一个实例。您需要调试第二个实例以查看正在加载的模块:

ntdll!LdrpDoDebuggerBreak+0x2b:
77e9db9b cc              int     3
0:000> .childdbg 1
Processes created by the current process will be debugged    
0:000> sxe cpr
0:000> g
[...]
Executable search path is: 
ModLoad: 00c20000 00e45000   AcroRd32.exe

至此,第二个实例即将启动

1:010> g
ntdll!LdrpDoDebuggerBreak+0x2b:
77e9db9b cc              int     3
1:010> g

如果您在 Acrobat Reader 加载时中断,您将看到:

1:010> |0s
0:000> lmf
[...]
No Adobe Acrobat Reader DLLs
[...]
0:000> |1s
1:010> lmf
[...]
56910000 56961000   sqlite   C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\sqlite.dll
56970000 569a4000   AXE8SharedExpat C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AXE8SharedExpat.dll
569b0000 56a9c000   ACE      C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\ACE.dll
56aa0000 56d78000   CoolType C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\CoolType.dll
56d80000 56d9e000   BIB      C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\BIB.dll
56da0000 572c2000   AGM      C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AGM.dll
[...]

第一个实例没有从 Adob​​e Acrobat 的目录加载 DLL,但第二个实例有。