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