我正在尝试探索 profapi.dll 导出的函数,但遇到了无法解释的行为。
阅读有关 PE 二进制格式的信息,我发现导出表有 3 个表(数组):一个数组包含导出函数的函数指针,另一个包含导出函数的名称(字符串),第三个数组包含导出的整数序数职能。链接器需要名称和/或序数表中的信息来修补对其他 DLL 中导出函数的调用。如果 DLL 仅使用序数导出其函数,则名称表指针可以为 NULL。
但是,对于profapi.dll,我看到name table 和ordinal table 指针都是NULL;但 DLL 导出 6 个函数(使用 IDAPro 验证)。事实上,shell32.dll 使用其序号调用 profapi.dll 中的函数之一,链接器以某种方式解析地址。我不确定链接器如何解析 shell32.dll 中的调用。此外,我用来解析 DLL 的 Python 库 pefile 报告 profapi.dll 不导出任何函数,因为名称和序数表指针都是 NULL。我错过了什么?
我在 Windows 7 上使用 profapi.dll 版本 6.1.7600.16385 和 shell32.dll 版本 6.1.7601.2278。我使用 pefile 版本 1.2.10-139。