Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定可执行文件将加载哪些DLL?_Dll_Executable - Fatal编程技术网

如何确定可执行文件将加载哪些DLL?

如何确定可执行文件将加载哪些DLL?,dll,executable,Dll,Executable,如果我有一个Windows可执行文件,我如何知道它将加载哪些DLL 我只是说哪些是静态加载的,而不是用LoadLibrary之类的东西动态加载的。有一些实用程序可以为您实现这一点 过去我使用过VB附带的MS工具(depends.exe): 还有这个: 也可能是其他的。可以帮助您确定将加载哪个.dll。progfr简单而有用: [是VC++附带的工具 要查看程序将导入的DLL,请执行以下操作: 开放式Visual Studio 菜单项“工具”| Visual Studio命令提示符 cd到包

如果我有一个Windows可执行文件,我如何知道它将加载哪些DLL


我只是说哪些是静态加载的,而不是用LoadLibrary之类的东西动态加载的。

有一些实用程序可以为您实现这一点

过去我使用过VB附带的MS工具(depends.exe):

还有这个:


也可能是其他的。

可以帮助您确定将加载哪个.dll。

progfr简单而有用: [

是VC++附带的工具

要查看程序将导入的DLL,请执行以下操作:

  • 开放式Visual Studio
  • 菜单项“工具”| Visual Studio命令提示符
  • cd到包含可执行文件的文件夹
  • dumpbin/dependents which.exe
要查看它将导入哪些函数(和DLL),请使用

C:\> dumpbin /imports whatever.exe

有一个名为NDepend的方便工具,可以提供所有DLL依赖项。

只需转到命令提示符并键入
任务列表/m
,您将看到特定程序使用的DLL文件列表。

Microsoft.Net解决方案:

foreach (AssemblyName a in Assembly.ReflectionOnlyLoadFrom("SAMPLE.EXE").GetReferencedAssemblies()) 
{
    MessageBox.Show(a.Name); 
}

打开命令提示符,然后键入下面的命令

tasklist/m/fi“imagename eq netbeans.exe”

键入netbeans.exe,不管您的exe文件名是什么。

Process Explorer 附带系统内部组件套件

优点:允许浏览已经运行的进程(我还没有找到将依赖项遍历器附加到现有进程的was)

显示Windows可执行文件将加载哪些DLL,并且它在现代Windows 10中运行良好


它的功能稍逊于,但后者可能在Windows 10中工作,也可能不工作,因为它上一次更新是在2006年。(较新版本的Dependency Walker与Windows 10的某些版本的Windows Development Kit捆绑在一起,但不再如此。)

我认为应该是:dumpbin/dependents which.exe/dependents只显示DLL。/imports显示函数和DLL。这是最好的答案。不幸的是,此工具只显示直接为
.exe
加载的DLL,而不显示可执行文件间接依赖的DLL。“dependens.exe”它与Visual Studio/VB/…一起安装,可以从中下载的“depends.exe”是完全相同的工具(仅不同版本)是的,这就是你所说的,但是,如果一个可执行文件启动了多个进程,你将永远无法从命令行中找到哪个进程是由可执行文件启动的,因此你将不知道可执行文件的所有依赖dll。不加载路径。很好的GUI程序。
依赖性Walker
尝试查找dll和它们的层次依赖关系。
NDepend
是一个用于.NET托管代码的静态分析工具。因此它只适用于.NET应用程序。您忘了提到它作为vs扩展。我使用了它,但它没有给我它使用的DLL的完整列表,我的exe正在使用一堆crystalreports DLL,但我没有看到任何人通过该命令打印的列表中已分区。有什么想法吗?此解决方案不包括其子级所需的参考DLL。
foreach (AssemblyName a in Assembly.ReflectionOnlyLoadFrom("SAMPLE.EXE").GetReferencedAssemblies()) 
{
    MessageBox.Show(a.Name); 
}