![](/img/trans.png)
[英]How can I turn my program into a .dll file and run it in cmd using rundll32.exe?
[英]How can I know which functions are invoked in a .dll file when this .dll file is used by a .exe program?
我有一个与调用dll文件中的函数有关的问题。 如果我很了解,在dll文件中,我们可以定义许多可能由.exe文件调用的功能。 例如,可以从a.dll
文件调用的功能包括以下功能:
void fun1(int k);
int fun2(float value);
float fun3(double sig);
对于特定程序,例如a.exe
,它只能在a.dll
调用fun1
函数,而不使用其他函数。 然后我的问题是,如何知道运行.exe程序时调用了哪些函数。
您可以检查可执行文件的符号表中是否有导入的符号。 对于Windows( .exe
文件),您可以将DUMPBIN
实用程序与/IMPORTS
,如此处所述 。
更新 :如注释中所述,可执行文件可以加载DLL并以在编译时不创建符号的方式动态访问它们。 例如,通过使用LoadLibrary加载DLL之后调用GetProcAddress 。 在这种情况下,将不存在符号,并且DUMPBIN
不会列出该符号,但是可以调用或可以不调用该函数。
如果您或多或少知道exe的工作方式,并且它似乎并没有动态地进行处理(例如从插件DLL加载代码),则可以假定没有动态加载发生。 此外,如果exe的符号表显示了给定DLL中的某些功能,则exe不太可能从同一DLL中动态访问功能。
同样,函数出现在符号表中的事实并不能保证该函数将被exe调用,但是在任何正常的静态情况下,它都很有可能。
您可以使用Dependency Walker
“ Dependency Walker是一个免费的实用程序,它可以扫描任何32位或64位Windows模块(exe,dll,ocx,sys等),并为所有从属模块构建层次结构树图。对于找到的每个模块,它将列出所有该模块导出的功能以及其他模块实际上正在调用的功能。另一个视图显示所需文件的最小集,以及有关每个文件的详细信息,包括文件的完整路径,基址,版本号,计算机类型,调试信息等。”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.