0

它可以用来在windows中运行任意的动态链接库,

它怎么可能知道任意 dll 的入口点?

4

3 回答 3

1

答案取决于您需要多少细节。基本上,它归结为:

DLL 可以选择指定入口点函数。如果存在,则只要进程或线程加载或卸载 DLL,系统就会调用入口点函数。

[...]如果您提供自己的入口点,请参阅 DllMain 函数。名称 DllMain 是用户定义函数的占位符。您必须指定在构建 DLL 时使用的实际名称。

(取自 MSDN 文章Dynamic-Link Library Entry-Point Function。)

所以基本上,入口点可以在 DLL 中指定,操作系统的 DLL 加载器知道如何查找它。

于 2010-09-18T09:40:30.053 回答
0

“运行 DLL”是什么意思?DLL 不是普通程序,它们只是函数的集合。除了初始化 DLL 中其他函数所需的内容外,入口点本身通常不会做太多事情。加载 DLL 时会自动调用入口点(您可以使用它LoadLibrary来执行此操作)。

如果您想在加载 DLL 后调用特定的函数,您可以使用GetProcAddress来获取指向您想要的函数的指针。

于 2010-09-18T15:40:31.030 回答
0

(Windows 机器上可移植可执行文件头的IMAGE_OPTIONAL_HEADER一部分)包含 的 RVA,AddressOfEntryPoint由寻找调用入口点的程序(例如,加载程序)调用。

更多信息IMAGE_OPTIONAL_HEADER可以在这里找到。这篇论文只适用于一般的 PE 知识。

于 2010-09-18T15:32:25.503 回答