何謂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 )把可執行文件從外存裝入內存並進行執行 <