gpt4 book ai didi

c++ - 当 .dll 文件被 .exe 程序使用时,我如何知道在 .dll 文件中调用了哪些函数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:40:44 25 4
gpt4 key购买 nike

我有一个关于在 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 utility with /IMPORTS as described here .

更新:如评论中所述,可执行文件可以加载 DLL 并以一种在编译时不创建符号的方式动态访问它们。例如,通过调用 GetProcAddress使用 LoadLibrary 加载 DLL 后.在这种情况下,不会出现符号,DUMPBIN 也不会列出它,但函数可能会被调用,也可能不会被调用。

如果您或多或少知道 exe 是如何工作的,并且它似乎没有动态执行某些操作(例如从插件 DLL 加载代码),那么可以安全地假设没有发生动态加载。此外,如果 exe 的符号表显示了给定 DLL 中的一些函数,则该 exe 不太可能动态访问同一 DLL 中的函数。

此外,函数出现在符号表中的事实并不能保证它会被 exe 调用,但在任何正常的静态情况下,它很有可能被调用。

关于c++ - 当 .dll 文件被 .exe 程序使用时,我如何知道在 .dll 文件中调用了哪些函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com