在64位机器上检查32位程序时,是否可以获得tasklist/m的正确DLL模块列表?
windows上的命令在64位机器上检查32位程序时,是否可以获得tasklist/m的正确DLL模块列表?,dll,cmd,command-prompt,windows-7-x64,Dll,Cmd,Command Prompt,Windows 7 X64,windows上的命令tasklist具有非常有用的功能:它可以列出一个进程或所有进程的所有dll模块。下面的命令将列出explorer.exe使用的所有DLL文件: tasklist /fi "ImageName eq explorer.exe" /m 如下所示(缩写,翻译成英语): 问题是,这对于64位进程来说效果不太好: C:\>tasklist /fi "ImageName eq firefox.exe" /m Process name PID
tasklist
具有非常有用的功能:它可以列出一个进程或所有进程的所有dll
模块。下面的命令将列出explorer.exe使用的所有DLL文件
:
tasklist /fi "ImageName eq explorer.exe" /m
如下所示(缩写,翻译成英语):
问题是,这对于64位进程来说效果不太好:
C:\>tasklist /fi "ImageName eq firefox.exe" /m
Process name PID Modules
========================= ======== ============================================
firefox.exe 4980 ntdll.dll, wow64.dll, wow64win.dll,
wow64cpu.dll
您看到的是不完整的,看起来更像这样:
然后我的问题是:我可以将tasklist作为32位程序启动,还是确保它返回正确的值?我需要从另一个程序(Java)调用tasklist,并获取加载的DLL文件列表。我需要它来确保我不会尝试加载DLL两次。您可以从
示例输出:
F:\>c:\apps\NirSoft\SysinternalsSuite\listdlls firefox
ListDLLs v3.1 - List loaded DLLs
Copyright (C) 1997-2011 Mark Russinovich
Sysinternals - www.sysinternals.com
--------------------------------------------------------------------
firefox.exe pid: 2000
Command line: C:\apps\Firefox\firefox.exe
Base Size Path
0x00000000012c0000 0x5f000 C:\apps\Firefox\firefox.exe
0x0000000076d80000 0x1a9000 C:\Windows\SYSTEM32\ntdll.dll
0x00000000748a0000 0x3f000 C:\Windows\SYSTEM32\wow64.dll
0x0000000074840000 0x5c000 C:\Windows\SYSTEM32\wow64win.dll
0x0000000074830000 0x8000 C:\Windows\SYSTEM32\wow64cpu.dll
0x00000000012c0000 0x5f000 C:\apps\Firefox\firefox.exe
0x0000000076f60000 0x180000 C:\Windows\SysWOW64\ntdll.dll
0x000000006d100000 0x47000 C:\apps\Avast\snxhk.dll
0x0000000074960000 0x110000 C:\Windows\syswow64\KERNEL32.dll
0x00000000766d0000 0x47000 C:\Windows\syswow64\KERNELBASE.dll
0x00000000741d0000 0x62000 C:\Windows\SysWOW64\guard32.dll
0x0000000076880000 0x100000 C:\Windows\syswow64\USER32.dll
0x00000000753d0000 0x90000 C:\Windows\syswow64\GDI32.dll
0x0000000075110000 0xa000 C:\Windows\syswow64\LPK.dll
0x0000000074b00000 0x9d000 C:\Windows\syswow64\USP10.dll
0x00000000757c0000 0xac000 C:\Windows\syswow64\msvcrt.dll
0x0000000075720000 0xa0000 C:\Windows\syswow64\ADVAPI32.dll
0x00000000753b0000 0x19000 C:\Windows\SysWOW64\sechost.dll
0x0000000075490000 0xf0000 C:\Windows\syswow64\RPCRT4.dll
0x0000000074900000 0x60000 C:\Windows\syswow64\SspiCli.dll
0x00000000748f0000 0xc000 C:\Windows\syswow64\CRYPTBASE.dll
0x00000000746a0000 0x9000 C:\Windows\SysWOW64\VERSION.dll
0x0000000074c50000 0x5000 C:\Windows\syswow64\PSAPI.DLL
0x0000000074bb0000 0x60000 C:\Windows\SysWOW64\IMM32.DLL
0x0000000074d50000 0xcc000 C:\Windows\syswow64\MSCTF.dll
0x0000000074600000 0x7000 C:\Windows\SysWOW64\fltlib.dll
0x000000006d0c0000 0x1b000 C:\apps\Firefox\mozglue.dll
0x000000006d040000 0x71000 C:\apps\Firefox\MSVCP120.dll
0x0000000067c20000 0xee000 C:\apps\Firefox\MSVCR120.dll
0x0000000060700000 0x1a0000 C:\apps\Firefox\nss3.dll
...
来源 ListDLL是一个实用程序,用于报告加载到进程中的DLL。您可以使用它列出加载到所有进程、特定进程中的所有DLL,或列出加载了特定DLL的进程。ListDLL还可以显示DLL的完整版本信息,包括它们的数字签名,并可用于扫描进程以查找未签名的DLL
免责声明:我没有任何关联,我只是该软件的最终用户。可用于枚举目标进程中的32位和/或64位模块。您可以使用PowerShell:
Get-Process winword| select -ExpandProperty modules|ft -Autosize
摘自:尝试使用c:\windows\syswow64中32位版本的tasklist.exe。-虽然这些是32位DLL,而不是64位DLL,但您可能需要重新考虑它们是否计数;很难说,因为我不明白你们到底想实现什么。我在应用程序中注入DLL,我知道它是32位的。注射DLL两次可能会做坏事。因此,我需要检查DLL是否已被注入,并禁用触发注入的按钮。@HarryJohnston Tasklist at
C:\Windows\SysWOW64\Tasklist.exe
不幸地打印相同的结果。这需要我将此程序与我的应用程序捆绑在一起。我在windows安装中看到了一些东西,我想这是一个windows函数,可以通过适当的dll文件导入Java JVM。我不熟悉使用Java调用本机API。在C DLL(或应用程序)中实现面向API的代码并从Java调用可能更简单。@HarryJohnson需要一些工作,但可以使用JNA在Java中实现(也可以使用JNI)。如果我成功了,我会把它贴在这里,我认为这个答案是可以接受的,因为它提出了比运行(和捆绑)外部应用程序更多的编程方法。我用EnumProcessModulesEx()的Win API调用替换了tasklist命令,用32位进程解决了这个问题。
Get-Process winword| select -ExpandProperty modules|ft -Autosize