如果使用 LoadLibrary 显式链接 dll,则列出从 PE 文件中导入的函数

Posted

技术标签:

【中文标题】如果使用 LoadLibrary 显式链接 dll,则列出从 PE 文件中导入的函数【英文标题】:Listing imported functions from a PE file if dll is linked explicitly using LoadLibrary 【发布时间】:2012-03-07 06:33:50 【问题描述】:

我需要通过解析PE来列出所有导入的函数。 如果 exe 或 dll 隐式链接 dll(使用导入库),我可以从导入表中获取所有调用的函数。但是,如果任何 dll 或 exe 显式链接 dll(使用 LoadLibrary 和 getProcAddress),则导入表将没有显式链接的该 dll 的条目。

请告诉我如何在显式加载 dll 时获取调用的所有外部函数的列表(使用 getProcAddress)。

感谢和问候, 基兰

【问题讨论】:

【参考方案1】:

没有办法 100% 可靠。基本上,您可以设置一些东西来监视在运行时将哪些参数传递给LoadLibraryGetProcAddress 以查看您发现的内容 - 但您需要注意用户在执行期间所做的选择可以并且将会影响什么出现了。

它还可以根据配置文件的内容、在任意目录中找到的文件等进行更改(例如,加载目录 X 中的所有 DLL,并在每个中调用 initialize_plugin())。

【讨论】:

以上是关于如果使用 LoadLibrary 显式链接 dll,则列出从 PE 文件中导入的函数的主要内容,如果未能解决你的问题,请参考以下文章

动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)

GetProcAddress与__declspec(dllimport)

QT 调用 DLL 方法(三种方法)

C++ - LoadLibrary() 实际上链接到库吗?

DLL编写中extern “C”和__stdcall的作用

LoadLibraryA与GetProcAddress介绍