2010-09-18 52 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來獲取指向所需函數的指針。