2010-09-18 51 views
0

它可以用来在windows中运行任意动态链接库,LOADDLL.EXE的原理是什么?

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

+1

@halfdan,SO是一个可以回答问题的地方,而不是名誉嫖娼,对吗?为什么不回答他的问题? – mrduclaw 2010-09-18 15:33:33

回答

1

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

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

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

(来自MSDN文章Dynamic-Link Library Entry-Point Function服用。)

所以基本上,入口点可以在DLL中指定的,和操作系统的DLL加载器知道怎么看这件事。

+0

所以它只适用于dll提供入口点本身? – Alan 2010-09-18 09:57:54

0

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

关于IMAGE_OPTIONAL_HEADER的更多信息可在here找到。并且this纸只是一般PE知识的好处。

0

“运行DLL”是什么意思? DLL不是正常的程序,它们只是一个函数集合。入口点本身通常除了初始化DLL中其他函数所需的东西之外没有太大的作用。加载DLL时会自动调用入口点(您可以使用LoadLibrary来执行此操作)。

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