[問題] 連結&載入器,分段分頁,Binding關係

看板LinuxDev作者 (gigigigi)時間9年前 (2015/07/11 01:04), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
何謂Binding Def: 決定程式執行的起始位址。 即:程式要在內存的哪個地方開始執行。 可能的Binding時期有三個: 1. Compiling Time 2. Loading Time 3. Execution Time 3-1 : Dynamic Binding 3-2 : Dynamic Loading 鏈接器( Linker )是把不同部分的代碼和數據,收集、組合成為一個可加載、可執行的文 件。 加載器( Loader )把可執行文件從外存裝入內存並進行執行 MMU : 分段 + 分頁 分段 - 邏輯位址 -> 線性位址 分頁 - 線性位址 -> 實體位址 _________________________________________________________________________________ 我被上面情況給搞的有點亂 , 有下面幾點疑惑 1. Binging 三個時期程式位址都算是虛擬位址? Compiling Time 位址是由編譯器計算出來? Loading Time 是由 加載器 計算出位址? Execution Time : 位址是 Local Address + Base Register ? 2. 目前Linux 是用MMU 段式 + 頁式 ? Linux 跟 Binding三個時期有關係嘛? Binding三個時期技術是早期的技術嘛? 目前有機會使用到嘛? 3. 鏈接器( Linker )是把不同部分的代碼和數據,收集、組合成為一個可加載、可執行的文 件。 我認知編譯出執行文件使用 objdump -d 就可以看到虛擬位址 , 就位址是ld Linker 計算出來的嘛? 如果是它是屬於哪個Binding? gcc -g test.c 使用 objdump -d ./a.out 08048414 <main>: 8048414: 55 push %ebp 8048415: 89 e5 mov %esp,%ebp 8048417: 6a 03 push $0x3 8048419: 6a 02 push $0x2 804841b: e8 e1 ff ff ff call 8048401 <foo> 8048420: 83 c4 08 add $0x8,%esp 8048423: b8 00 00 00 00 mov $0x0,%eax 8048428: c9 leave 8048429: c3 ret 804842a: 66 90 xchg %ax,%ax 804842c: 66 90 xchg %ax,%ax 804842e: 66 90 xchg %ax,%ax 加載器( Loader )把可執行文件從外存裝入內存並進行執行 <-- 這過程有經過虛擬位址 映射實體位址轉換嘛? Linux 系統的加載器( Loader ) 這是位於 linux kernel 裡面? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.197.33 ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1436547849.A.C7F.html
文章代碼(AID): #1Ld_i9n_ (LinuxDev)
文章代碼(AID): #1Ld_i9n_ (LinuxDev)