重定位 靜態(tài)鏈接 動(dòng)態(tài)鏈接 動(dòng)態(tài)加載


總結(jié):并沒有找到動(dòng)態(tài)鏈接與動(dòng)態(tài)加載的明顯區(qū)別,但動(dòng)態(tài)鏈接與靜態(tài)鏈接的區(qū)別是明顯的:
一個(gè)是編譯時(shí)就鏈接進(jìn)可執(zhí)行文件,一個(gè)是執(zhí)行時(shí)才鏈接。


靜態(tài)重定位

  • 重定位時(shí),取重定位項(xiàng),加上重定位因子得到欲修改位置的實(shí)際地址。
  • 優(yōu)點(diǎn):無須硬件支持
  • 缺點(diǎn):程序重定位以后就不能在內(nèi)存中移動(dòng)。要求程序的存儲(chǔ)空間連續(xù)的,不能把程序存儲(chǔ)到若干個(gè)不連續(xù)的區(qū)域中。

動(dòng)態(tài)重定位

  • 當(dāng)CPU取一條訪問內(nèi)存的指令時(shí),地址變換硬件將指令中的相對(duì)地址重定位寄存器中的值 相加,再根據(jù)和值去訪問該單元的數(shù)據(jù)。
  • 裝配模塊不加任何修改就裝入內(nèi)存
  • 需要硬件(重定位寄存器)的支持

靜態(tài)鏈接、動(dòng)態(tài)鏈接

  • 靜態(tài)鏈接
  • 動(dòng)態(tài)鏈接(dll)
    • 裝入時(shí)鏈接
    • 運(yùn)行時(shí)鏈接

裝入時(shí)鏈接:

  • 用一個(gè)動(dòng)態(tài)導(dǎo)入表保存需要使用的dll文件和dll中的函數(shù)。
  • 裝入時(shí)檢根據(jù)動(dòng)態(tài)導(dǎo)入表依次裝入每個(gè)動(dòng)態(tài)庫。

運(yùn)行時(shí)鏈接:

  • 用API函數(shù)LoadLibrary或LoadLibraryEx函數(shù)來裝入動(dòng)態(tài)庫(共享引用計(jì)數(shù)增加1)
  • 通過GetProcAddress函數(shù)來獲得函數(shù)的地址,并且傳遞給函數(shù)相應(yīng)的參數(shù),調(diào)用這個(gè)函數(shù)。
  • 在動(dòng)態(tài)庫用完后,可通過FreeLibrary函數(shù)來釋放動(dòng)態(tài)庫資源(共享引用計(jì)數(shù)減1)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容