elf格式的可执行文件包含各种片段,如代码,数据,bss,堆栈等。 如果我们说段xyz是静态重定位的,那意味着什么?
精灵格式二进制包含每个段的相对地址。当我们说静态重定位是否意味着相对地址实际上是物理地址?
答案 0 :(得分:4)
静态重定位意味着在程序运行之前移动数据或编码并为它们分配绝对位置。 例如: - 链接器是一个静态重定位的例子,它移动程序的几个模块并将它们组合成程序。
答案 1 :(得分:2)
静态重定位是指在程序开始执行之前完成的地址转换。典型的硬件指令周期如下所示:
loop
w := M[instr_ctr]; (* fetch instruction *)
oc := Opcode(w);
adr := Address(w);
instr_ctr := instr_ctr + 1;
case oc of
1: reg := reg+M[adr]; (* add *)
2: M[adr] := reg; (* store *)
3: instr_ctr := adr; (* branch *)
...
end
end (* loop *)
答案 2 :(得分:1)
在无内存抽象情况下(程序直接访问物理内存) 它是这样的: 程序A使用地址x 程序B在某些时候也使用地址x
为了使两个程序同时运行某些操作系统/早期计算机(例如IBM 360)在加载时动态修改程序B的地址,以便它不会使用程序A使用的内存地址
当程序在地址16,384处加载时,常量 在加载过程中,每个程序地址都添加了16,384个。