在 64 位机器上检查 32 位程序时,我可以获得任务列表 /m 的正确 DLL 模块列表吗?

Tom*_*ica 5 dll cmd command-prompt windows-7-x64

Windows 上的命令tasklist具有非常有用的功能:它可以列出dll一个进程的所有模块或所有进程。下面的命令将列出以下命令使用的所有 DLL 文件explorer.exe

tasklist /fi "ImageName eq explorer.exe" /m
Run Code Online (Sandbox Code Playgroud)

看起来像这样(缩短,翻译成英文):

Process name              PID      Modules
========================= ======== ============================================
explorer.exe                  1104 ntdll.dll, kernel32.dll, KERNELBASE.dll,
                                   ADVAPI32.dll, msvcrt.dll, sechost.dll,
                                   RPCRT4.dll, GDI32.dll, USER32.dll, LPK.dll,
                                   USP10.dll, SHLWAPI.dll, SHELL32.dll,
                                   ole32.dll, OLEAUT32.dll, EXPLORERFRAME.dll,
                                   DUser.dll, DUI70.dll, IMM32.dll, MSCTF.dll,
Run Code Online (Sandbox Code Playgroud)

问题是这对于 64 位进程来说效果不太好:

C:\>tasklist /fi "ImageName eq firefox.exe" /m

Process name              PID      Modules
========================= ======== ============================================
firefox.exe                   4980 ntdll.dll, wow64.dll, wow64win.dll,
                                   wow64cpu.dll
Run Code Online (Sandbox Code Playgroud)

你看到的并不完整,它看起来更像是这样的:

图片描述

我的问题是:我可以将任务列表作为 32 位程序启动还是以其他方式确保它将返回正确的值?我需要从另一个程序(Java)调用任务列表并获取已加载的 DLL 文件的列表。我需要这个来确保我不会尝试加载 DLL 两次。

Har*_*ton 2

EnumProcessModulesEx () 函数可用于枚举目标进程中的 32 位和/或 64 位模块。