2015-06-14 71 views
0

如我們所知,對於可執行文件的隱式鏈接DLL,加載 時,它們將由加載程序加載到內存中,並且加載程序也會調用它們的入口點以初始化它們。 這是一個線性過程 - 它們被逐個加載,並且被 逐個初始化。所以最重要的是訂單, 這個訂單影響很多東西。有關DLL加載順序的問題

Q1:初始化順序可以不同於加載順序,是 這是真的嗎?

Q2:加載順序受導入表影響,這是真的嗎?

Q3:獨立的DLL的初始化順序由 導入表的影響 - 一個DLL可以首先因爲它似乎 第一,這是真的初始化?

回答

0

「的過程中與所述 CREATE_SUSPENDED標誌給CreateProcess掛起狀態創建。繞行隨後修改的新過程中,應用程序二進制的 圖像以包括所述 指定的DLL作爲其第一個導入。執行的過程中當執行恢復時,Windows進程加載器 將在調用應用程序條目 點之前首先加載目標DLL,然後加載應用程序導入表中的任何其他DLL。

我在Microsoft Detours的文檔中發現了這條重要信息。所以對於Q2和Q3,是的,這是真的。我將在這個主題上做更多的研究 。