什么是静态重定位或段的静态重定位?

3

Elf格式的可执行文件包含多个段,如代码段、数据段、BSS段、堆栈等。如果我们说段xyz是静态重定位的,那是什么意思?

Elf格式二进制文件为每个段包含相对地址。当我们说静态重定位时,是否意味着相对地址实际上是物理地址?


通常的重定位介绍:https://dev59.com/WGct5IYBdhLWcg3wZcmL#30507725 - Ciro Santilli OurBigBook.com
3个回答

5

静态重定位是指在程序运行之前移动数据或代码,并为它们分配绝对位置。例如:链接器就是静态重定位的例子,它将程序的多个模块移动并组合成一个程序。


3

静态重定位是指在程序开始执行之前进行地址转换。典型的硬件指令周期如下:

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 *)

1
在没有内存抽象的情况下(程序直接访问物理内存),情况会是这样的:程序A使用地址x,程序B在某一时刻也使用地址x。为了使两个程序能够同时运行,一些操作系统/早期计算机会像IBM 360一样,在加载程序B时即时修改其地址,以便它不使用程序A使用的内存地址。
引用内容如下: 当程序加载到地址16,384时,每个程序地址都会在加载过程中加上常数16,384。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接