重定位方法、装置、链接器及编译系统制造方法及图纸

技术编号:31241420 阅读:19 留言:0更新日期:2021-12-08 10:33
本申请提供的重定位方法、装置、链接器及编译系统,应用于计算机技术领域,所述方法包括:在加载目标文件时,获取所述目标文件中的重定位表项,所述重定位表项至少包括:符号、重定位类型;基于将所述符号的信息,对栈操作数执行所述重定位类型相对应的栈编辑操作;将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域。本方案通过在重定位表项中设置具有栈风格的重定位类型,从而基于重定位类型对应的栈编辑操作对栈操作数进行操作后将栈操作数弹出的信息符号的重定位地址写入指令位域,使得重定位类型基于栈风格相互正交,从而尽可能减少了重定位类型的耦合性和冗余,降低了重定位类型的复杂度。复杂度。复杂度。

【技术实现步骤摘要】
重定位方法、装置、链接器及编译系统


[0001]本申请属于计算机
,特别是涉及一种重定位方法、装置、链接器及编译系统。

技术介绍

[0002]通常程序是通过对程序进行编译、汇编和链接三个阶段的操作来实现程序在在电子设备上的运行,而在链接时需要获取目标文件中的指令所需访问符号的地址,此时由于符号的内存地址在链接后可能发生偏移,并不是原本指定的内存地址,因此就需要对指令所需访问符号的内存地址进行重定位。
[0003]现有技术中的重定位方式是将目标文件中指令所需访问符号的内存地址直接写入重定位表,在链接时通过遍历重定位表,将查询每个指令所需访问符号的重定位地址直接写入执行文件中指令位域,从而完成对于指令的重定位操作,也就是说在汇编过程中编写重定位表时已经知晓了指令所需访问符号的重定位地址。
[0004]但是这种方式需要针对不同指令的重定位规则设置专门的重定位类型来指定所需访问符号的重定位地址,随着指令集的扩展和演变,如需访问某些新符号,就需要为这些新符号设置新的重定位类型,这些新的重定位类型和原有重定位类型相互组合使用,使得重定位类型之间的组合成倍增加,同一指令可能涉及多个不同的重定位类型或重定位类型组合,直接导致重定位类型的耦合度高和冗余,大大提升了重定位类型的复杂度,不利于程序的后期维护。

技术实现思路

[0005]有鉴于此,本申请实施例提出一种重定位方法、装置、链接器及编译系统,用于尽可能解决现有技术中在程序链接的过程中重定位类由于设置专门的重定位类型指定指令所需访问符号的重定位地址,导致重定位类型的耦合度高和冗余,提升了重定位类型的复杂度的问题。
[0006]本申请第一方面提供一种重定位方法,所述方法包括:
[0007]在加载目标文件时,获取所述目标文件中的重定位表项,所述重定位表项至少包括:符号、重定位类型;
[0008]基于将所述符号的信息,对栈操作数执行所述重定位类型相对应的栈编辑操作;
[0009]将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域。
[0010]可选地,所述将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域,包括:
[0011]若编辑后的栈操作数的字节位数大于指令位域的字节位数,则对所述编辑后的栈操作数执行防溢出操作,得到目标栈操作数;
[0012]将所述目标栈操作数中弹出的信息作为所述符号的重定位地址并添加至指令位
域。
[0013]可选地,所述对所述编辑后的栈操作数执行防溢出操作,包括:
[0014]根据所述编辑后的栈操作数和所述指令位域的字节位数差值,确定移动方向和移动位数;
[0015]将所述编辑后的栈操作数中的信息向所述移动方向移动所述移动位数。
[0016]可选地,所述重定位类型相对应的栈编辑操作包括:压栈操作、弹栈操作中的至少一种;
[0017]所述基于将所述符号的信息,对栈操作数执行所述重定位类型相对应的栈编辑操作,包括:
[0018]在所述重定位类型相对应的栈编辑操作是压栈操作时,将所述符号的第一指定信息的压入所述栈操作数的栈顶;
[0019]在所述重定位类型相对应的栈编辑操作是弹栈操作时,从所述栈操作数的栈顶弹出所述符号的第二指定信息。
[0020]可选地,所述将所述符号的第一指定信息的压入所述栈操作数的栈顶,包括:
[0021]对所述符号的信息执行所述重定位类型相对应信息编辑操作;
[0022]将编辑后的信息压入所述栈操作数的栈顶。
[0023]可选地,所述获取所述目标文件中重定位表项,包括:
[0024]在所述目标文件为宏指令时,获取与所述宏指令相对应的至少两个重定位表项。
[0025]可选地,所述将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域,包括:
[0026]将编辑后的栈操作数中弹出的信息转换为指定数据类型,得到所述符合的重定位地址,并将所述重定位地址添加至指令位域。
[0027]依据本申请第二方面,提供一种重定位装置,所述装置包括:
[0028]获取模块,被配置为在加载目标文件时,获取所述目标文件中的重定位表项,所述重定位表项至少包括:符号、重定位类型;
[0029]编辑模块,被配置为基于将所述符号的信息,对栈操作数执行所述重定位类型相对应的栈编辑操作;
[0030]链接模块,被配置为将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域。
[0031]可选地,所述链接模块,还被配置为:
[0032]若编辑后的栈操作数的字节位数大于指令位域的字节位数,则对所述编辑后的栈操作数执行防溢出操作,得到目标栈操作数;
[0033]将所述目标栈操作数中弹出的信息作为所述符号的重定位地址并添加至指令位域。
[0034]可选地,所述链接模块,还被配置为:
[0035]根据所述编辑后的栈操作数和所述指令位域的字节位数差值,确定移动方向和移动位数;
[0036]将所述编辑后的栈操作数中的信息向所述移动方向移动所述移动位数。
[0037]可选地,所述重定位类型相对应的栈编辑操作包括:压栈操作、弹栈操作中的至少
一种;
[0038]所述编辑模块,还被配置为:
[0039]在所述重定位类型相对应的栈编辑操作是压栈操作时,将所述符号的第一指定信息的压入所述栈操作数的栈顶;
[0040]在所述重定位类型相对应的栈编辑操作是弹栈操作时,从所述栈操作数的栈顶弹出所述符号的第二指定信息。
[0041]可选地,所述编辑模块,还被配置为:
[0042]对所述符号的信息执行所述重定位类型相对应信息编辑操作;
[0043]将编辑后的信息压入所述栈操作数的栈顶。
[0044]可选地,所述获取模块,还被配置为:
[0045]在所述目标文件为宏指令时,获取与所述宏指令相对应的至少两个重定位表项。
[0046]可选地,所述链接模块,还被配置为:
[0047]将编辑后的栈操作数中弹出的信息转换为指定数据类型,得到所述符合的重定位地址,并将所述重定位地址添加至指令位域。
[0048]依据本申请第三方面,提供一种链接器,包括上述的重定位装置。
[0049]依据本申请第四方面,提供一种编译系统,包括汇编器和上述的链接器,所述链接器接收所述汇编器汇编得到的目标文件。
[0050]依据本申请第三方面,提供一种电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现上述第一方面所述重定位方法。
[0051]依据本申请第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的重定位方本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种重定位方法,其特征在于,所述方法包括:在加载目标文件时,获取所述目标文件中的重定位表项,所述重定位表项至少包括:符号、重定位类型;基于将所述符号的信息,对栈操作数执行所述重定位类型相对应的栈编辑操作;将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域。2.根据权利要求1所述的方法,其特征在于,所述将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域,包括:若编辑后的栈操作数的字节位数大于指令位域的字节位数,则对所述编辑后的栈操作数执行防溢出操作,得到目标栈操作数;将所述目标栈操作数中弹出的信息作为所述符号的重定位地址并添加至指令位域。3.根据权利要求2所述的方法,其特征在于,所述对所述编辑后的栈操作数执行防溢出操作,包括:根据所述编辑后的栈操作数和所述指令位域的字节位数差值,确定移动方向和移动位数;将所述编辑后的栈操作数中的信息向所述移动方向移动所述移动位数。4.根据权利要求1所述的方法,其特征在于,所述重定位类型相对应的栈编辑操作包括:压栈操作、弹栈操作中的至少一种;所述基于将所述符号的信息,对栈操作数执行所述重定位类型相对应的栈编辑操作,包括:在所述重定位类型相对应的栈编辑操作是压栈操作时,将所述符号的第一指定信息的压入所述栈操作数的栈顶;在所述重定位类型相对应的栈编辑操作是弹栈操作时,从所述栈操作数的栈顶弹出所述符号的第二指定信息。5.根据权利要求4所述的方法,其特征在于,所述将所述符号的第一指定信息的压入所述栈操作数的栈顶,包括:对所述符号的信息执行所述重定位类型相对应信息编辑操作;将编辑后的信息压入所述栈操作数的栈顶。6.根据权利要求1所述的方法,其特征在于,所述获取所述目标文件中重定位表项,包括:在所述目标文件为宏指令时,获取与所述宏指令相对应的至少两个重定位表项。7.根据权利要求1所述的方法,其特征在于,所述将编辑后的栈操作数中弹出的信息作为所述符号的重定位地址并添加至执行文件中的指令位域,包括:将编辑后的栈操作数中弹出的信息转换为指定数据类型,得到所述符合的重定位地址,并将所述重定位地址添加至指令位域。8.一种重定位装置,其特征在于,所述装置包括:获取模块,被配置为在加载目标文件时,获取所述目标文件中的重定位表项,所述重定位表项至少包括:符号、重定位类型;编辑模块,被配置为基于将所述符号的信...

【专利技术属性】
技术研发人员:徐成华程璐璐
申请(专利权)人:龙芯中科技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1