Linker 链接器实际上修改了什么?

Linker 链接器实际上修改了什么?,linker,loading,machine-code,Linker,Loading,Machine Code,我很难确定链接器将修改哪些指令,哪些不会修改。我的教科书上说,那些将被修改的是那些其值被定义为程序的起始地址+-一个常量的程序。它给出了以下2个mips示例: 源程序中有一些标签 sw$5,结果,其中结果是程序内的标签 然后是说那些不需要修改的是那些表达式独立于程序的起始地址的 li$l2、buffend bufend和buffer是标签 bne$2,$0,退出 一,;我特别困惑,因为我认为bne是PC相对寻址,所以我认为这需要一个链接器。我认为我对链接器的理解还不够,如果有人能帮助我获得一些理

我很难确定链接器将修改哪些指令,哪些不会修改。我的教科书上说,那些将被修改的是那些其值被定义为程序的起始地址+-一个常量的程序。它给出了以下2个mips示例:

源程序中有一些标签 sw$5,结果,其中结果是程序内的标签 然后是说那些不需要修改的是那些表达式独立于程序的起始地址的

li$l2、buffend bufend和buffer是标签 bne$2,$0,退出 一,;我特别困惑,因为我认为bne是PC相对寻址,所以我认为这需要一个链接器。我认为我对链接器的理解还不够,如果有人能帮助我获得一些理解,我将非常感激

谢谢


ed

链接器…将…对象块链接到一起,形成最终的二进制文件。对象尽可能独立于位置。硬编码地址可以,但基于标签的地址要么在编译/组装时解析为位置独立的地址,要么在链接时由链接器解析。还有其他标签,如外部函数和全局变量,也不能在汇编/编译时解析,必须由链接器解析

修改的不仅仅是指令。根据指令集和指令,可以添加绝对地址,然后在.text中解析为.rodata,因此不仅可以插入指令,还可以插入地址或其他解决方案。根据工具链,链接器可以添加指令和数据

您的文本/讲师可能会说谈论中断向量表,因为这可能是已知的使用外部标签,因此这些标签地址必须由链接器解析。但这只是一个简单的大局例子