链接器实际修改了什么?
问题描述:
我无法确定哪些指令将被链接器修改,哪些不会。我的教科书说,那些将被修改的是那些其值被定义为程序起始地址+ - 常数的那些。它提供了以下2点MIPS的例子:链接器实际修改了什么?
- Ĵ有#在源程序一些标签
- SW $ 5导致#WHERE结果是计划内的标签
则说,这些不需要修改是那些表达式是独立的程序的起始地址的
- 李$ L2,buffend缓冲#bufend和缓冲的标签
- BNE $ 2,$ 0时,出口
我,因为我认为BNE是PC相对寻址,所以我认为这将需要一个连接中号特别困惑。我认为我对链接器的理解是缺乏的,如果有人能够帮助我获得一些理解,我会非常感激。
感谢,
版
答
的链接...链接...对象斑点汇集成最终的二进制。物体在可能的位置独立。硬编码地址很好,但是基于标签的编译/汇编时间不依赖于位置,或者链接器在链接时解析它们。还有其他标签,如外部函数和全局变量,在汇编/编译时也无法解析,必须由链接器解析。
这不仅仅是被修改的指令。根据指令集和指令,绝对地址可能会被添加,然后在.text内部作为.rodata被解析,因此不仅可以插入指令,还可以插入地址或其他解决方案。根据工具链,链接器可能会添加说明以及数据。
由于可能使用外部标签,因此您的文本/讲师可能会说中断向量表,因此这些标签(地址)必须由链接器解析。但这只是一个更大局面的简单例子。