Assembler生成的可重定位机器代码的用途是什么?如果生成然后使用获取可重定位的机器代码将其转换为绝对代码?
我看了这个视频。 https://www.youtube.com/watch?v=Qkwj65l_96I&t=309s
他提到了绝对和相对机器代码
答案 0 :(得分:2)
所以可重定位代码使用相对地址?
没有。至少不一定。
或者你的意思是"与位置无关的代码"代替"可重定位代码"?
Assembler生成的可重定位机器代码的用途是什么?
理论上你可以一次组装一个完整的程序。 (事实上,当我为一个历史性的CPU编写汇编程序时,我已经这样做了。)
然而,这有一个主要缺点:
考虑以下代码行:
mov [myVariable], eax
我们假设变量myVariable
位于地址0x1234560
。然后在机器代码中,您将获得以下指令:
mov [0x1234560], eax
现在您修改项目中的一个文件,其中包含约200个文件(这是汽车行业中的典型项目)。我们假设您在项目开始时向某个文件添加了一些说明。
这意味着项目中该文件后面的所有元素(文件)的地址都会发生变化。我们现在说myVariable
的地址不再是0x1234560
,而是0x1234870
。
这意味着我们的代码行现在必须转换为以下指令:
mov [0x1234870], eax
因此,必须再次组装项目中的所有文件!
如果您有可重定位代码,则会生成以下指令:
mov [0], eax
...以及地址0
必须替换为myVariable
地址的一些信息。
这意味着当200个文件中的一个发生更改时,只能替换地址。