[问题] 连结&加载器,分段分页,Binding关系

楼主: gigigigi (gigigigi)   2015-07-11 01:04:06
何谓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 )把可执行文件从外存装入内存并进行执行 <

Links booklink

Contact Us: admin [ a t ] ucptt.com