19&20 關於DLL

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基地址重定位

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章