Kernel32.dll - 管理內存,進程以及線程
User32.dll - 執行用戶界面相關操作(create dialog, send message)
GDI32.dll - 繪製圖像和顯示文字
爲什麼要用DLL?
1. 需要時載入
2. 不同團隊開發不同module
3. 兩個EXE使用同一個DLL,該DLL載入內存一次。共享該DLL在內存中的頁面
4. 共享資源(Dialog, strings, Icon, BMP)
5. 本地化
6. 跨平臺
DLL文件映射到調用進程的地址空間
-
隱式 (Implicit load-time linking)
-
顯式 (Explicit run-time linking)
20.6 DLL 重定向
共享的DLL先放在windows系統目錄中,方便定位和共享。但是時間久了,後來安裝的比較老的文件可能覆蓋這個目錄中的DLL
中定向特性:強制加載程序從EXE目錄中載入DLL。
必須有一個AppName.local文件或文件夾在EXE目錄中。
Vista以後的OS默認關閉重定向。因爲會從EXE文件夾中load僞造的系統DLL
20.7 DLL基地址重定位
?