二进制翻译中间接跳转指令的翻译方法及其系统技术方案

技术编号:4251566 阅读:363 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及二进制翻译中间接跳转指令的翻译方法及系统,方法包括:步骤1,在反汇编到间接跳转指令时,根据反汇编出的源指令序列判断所述间接跳转指令是否为多分支语句或虚函数调用,如果是则进行标记,获得被标记的间接跳转指令的源跳转表;步骤2,在翻译时,将被标记的间接跳转指令翻译为根据待构建的所述被标记的间接跳转指令的目标跳转表的内容进行跳转的指令,为所述目标跳转表预留重定位项;步骤3,翻译完所述被标记的间接跳转指令后,根据所述间接跳转指令的源跳转表构建所述间接跳转指令的目标跳转表;步骤4,将构建的所述目标跳转表的地址写入所述重定位项。本发明专利技术能够减少了访问内存的开销,提高了二进制翻译的效率。

【技术实现步骤摘要】

本专利技术涉及的是计算机领域中二进制翻译领域,尤其涉及二进制翻译中间接跳转指令的翻译方法及其系统
技术介绍
二进制翻译器功能是将一种指令集体系结构(ISA)上的可执行程序翻译到另一 种ISA上执行。当源机器和目标机器的ISA不同时,可以实现不同机器间的代码迁移。该 项技术可以用于解决遗产代码的移植,为某一处理器提供更加丰富的软件资源等。当ISA 相同时,该项技术可以用于实现动态优化和软件插桩等。另外在虚拟机系统的实现中,存在 一个关键步骤就是二进制翻译。上述开发过程中,均会面临的问题为如何高效地处理程序 中存在的间接跳转指令。 间接跳转指令不同于普通的跳转指令,它的跳转目标地址只有在运行的时刻才能 够获得。例如Intel X86体系结构上间接跳转指令的格式如下所示。 FF/4 JMP r/ml6 Jump near,absolute indirect, address given in r/ml6 FF/4 JMP r/m32 Jump near,absolute indirect, address given in r/m32 FF/5 JMP ml6:16 Jump near, absolute indirect, address given in ml6:16 FF/4 JMP ml6:32 Jump near, absolute indirect, address given in ml6:32 可见,间接跳转指令的操作数可能是寄存器,也可能是内存,该操作数指示的内存 地址中存放的内容即为要跳转的目标地址。在二进制翻译系统中,如何有效地翻译上述间 接跳转指令,从而达到较高的运行效率,成为现有技术中的一个问题。 现有技术中的方法是在内存中构造一个哈希表,该表记录了源机器上跳转目标地 址,简称为源PC,和相应的本地码地址,简称为目标PC,的对应关系。当遇到间接跳转指令 时,就生成查询哈希表的代码。如果查询成功,就将对应的目标PC装载到一个临时寄存器, 跳转到目标PC处继续执行;如果查询失败,就返回到二进制翻译器的运行时环境,并对源 PC处的代码进行翻译。翻译完成后修改哈希表对应表项的内容,以备以后查询。该方法在 每次执行间接跳转指令时,都需要查询哈希表,开销太大。
技术实现思路
为解决上述问题,本专利技术提供了一种二进制翻译中间接跳转指令的翻译方法及其系统,能够减少了访问内存的开销,提高了 二进制翻译的效率。本专利技术公开了一种二进制翻译中间接跳转指令的翻译方法,包括 步骤l,在反汇编到间接跳转指令时,根据反汇编出的源指令序列判断所述间接跳转指令是否为多分支语句或虚函数调用,如果是则进行标记,获得被标记的间接跳转指令的源跳转表; 步骤2,在翻译时,将被标记的间接跳转指令翻译为根据待构建的所述被标记的间 接跳转指令的目标跳转表的内容进行跳转的指令,为所述目标跳转表预留重定位项; 步骤3,翻译完所述被标记的间接跳转指令后,根据所述间接跳转指令的源跳转表 构建所述间接跳转指令的目标跳转表; 步骤4,将构建的所述目标跳转表的地址写入所述重定位项。 所述步骤l进一步为, 步骤21,在反汇编到间接跳转指令时,根据反汇编出的源指令序列判断所述间接 跳转指令是否为多分支语句或虚函数调用,如果是,则对所述间接跳转指令进行标记; 步骤22,获得所述被标记的间接跳转指令的源跳转表的大小,所述源跳转表中记载的各个跳转目标地址,记录计算所述源跳转表索引的指令。 所述步骤2进一步为, 步骤31,翻译所述计算源跳转表的索引的指令,在索引所述目标跳转表时使用所 述索引; 步骤32,将被标记的间接跳转指令翻译为根据所述索引从待构建的所述间接跳转 指令的目标跳转表中获得对应表项,并按所述表项的内容进行跳转的指令; 步骤33,为所述目标跳转表预留重定位项。 所述步骤3进一步为, 步骤41,翻译完所述被标记的间接跳转指令后,构建目标跳转表的大小同源跳转 表的大小相同; 步骤42,判断源跳转表的表项中的跳转地址是否已被翻译并生成对应的本地码, 如果是,执行步骤43,否则,执行步骤44 ; 步骤43,将所述对应的本地码的入口地址填入所述目标跳转表对应的表项中; 步骤44,将所述目标跳转表对应的表项填为跳转到翻译控制器的代码入口地址。 所述步骤1和所述步骤2之间还包括 步骤51 ,将被标记的间接跳转指令的翻译中取源跳转表表项内容的指令对应生成 的本地码移到跳转寄存器指令之后; 所述步骤3进一步为, 步骤51,翻译完所述被标记的间接跳转指令后,构建目标跳转表的大小同源跳转 表的大小相同; 步骤52,判断源跳转表的表项中的跳转地址是否已被翻译并生成对应的本地码, 如果是,执行步骤53,否则,执行步骤54 ; 步骤53,将所述对应的本地码的入口地址填入所述目标跳转表对应的表项中; 步骤54,将所述目标跳转表对应的表项填为所述跳转寄存器指令的下一条指令的 地址。 所述步骤2还包括,对于未被标记的间接跳转指令,按查找哈希表的方法进行翻 译。 本专利技术还公开了一种二进制翻译中间接跳转指令的翻译系统,包括 间接跳转指令标识模块,用于在反汇编到间接跳转指令时,根据反汇编出的源指令序列判断所述间接跳转指令是否为多分支语句或虚函数调用,如果是则进行标记,获得被标记的间接跳转指令的源跳转表; 翻译模块,用于在翻译时,将被标记的间接跳转指令翻译为根据待构建的所述被标记的间接跳转指令的目标跳转表的内容进行跳转的指令,为所述目标跳转表预留重定位 项; 目标跳转表构建模块,用于在翻译完所述被标记的间接跳转指令后,根据所述间 接跳转指令的源跳转表构建所述间接跳转指令的目标跳转表; 所述翻译模块还用于将构建的所述目标跳转表的地址写入所述预留的重定位项, 完成翻译。 所述间接跳转指令标识模块进一步用于在反汇编到间接跳转指令时,根据反汇编 出的源指令序列判断所述间接跳转指令是否为多分支语句或虚函数调用,如果是,则对所 述间接跳转指令进行标记;获得所述被标记的间接跳转指令的源跳转表的大小,所述源跳 转表中记载的各个跳转目标地址,记录计算所述源跳转表索弓I的指令。 所述翻译模块在所述目标跳转表被构建前进一步用于翻译所述计算源跳转表的 索引的指令,在索引所述目标跳转表时使用所述索引;将被标记的间接跳转指令翻译为根 据所述索引从待构建的所述间接跳转指令的目标跳转表中获得对应表项,并按所述表项的 内容进行跳转的指令;为所述目标跳转表预留重定位项。 所述目标跳转表构建模块进一步用于翻译完所述被标记的间接跳转指令后,构建 目标跳转表的大小同源跳转表的大小相同;判断源跳转表的表项中的跳转地址是否已被翻 译并生成对应的本地码,如果是,将所述对应的本地码的入口地址填入所述目标跳转表对 应的表项中,否则,将所述目标跳转表对应的表项填为跳转到翻译控制器的代码入口地址。 所述系统在所述间接跳转指令标识模块和所述翻译模块之间还包括 指令修改模块,用于将被标记的间接跳转指令的翻译中取源跳转表表项内容的指 令对应生成的本地码移到跳转寄存器指令之后; 所述目标跳转表构建模块进一步用于翻译完所述被标记的间接跳转指令后,构建 目标跳转表的大小同源跳转表的大小相同;判断源跳转表的表项中的跳转本文档来自技高网
...

【技术保护点】
一种二进制翻译中间接跳转指令的翻译方法,其特征在于,包括:    步骤1,在反汇编到间接跳转指令时,根据反汇编出的源指令序列判断所述间接跳转指令是否为多分支语句或虚函数调用,如果是则进行标记,获得被标记的间接跳转指令的源跳转表;    步骤2,在翻译时,将被标记的间接跳转指令翻译为根据待构建的所述被标记的间接跳转指令的目标跳转表的内容进行跳转的指令,为所述目标跳转表预留重定位项;    步骤3,翻译完所述被标记的间接跳转指令后,根据所述间接跳转指令的源跳转表构建所述间接跳转指令的目标跳转表;    步骤4,将构建的所述目标跳转表的地址写入所述重定位项。

【技术特征摘要】
一种二进制翻译中间接跳转指令的翻译方法,其特征在于,包括步骤1,在反汇编到间接跳转指令时,根据反汇编出的源指令序列判断所述间接跳转指令是否为多分支语句或虚函数调用,如果是则进行标记,获得被标记的间接跳转指令的源跳转表;步骤2,在翻译时,将被标记的间接跳转指令翻译为根据待构建的所述被标记的间接跳转指令的目标跳转表的内容进行跳转的指令,为所述目标跳转表预留重定位项;步骤3,翻译完所述被标记的间接跳转指令后,根据所述间接跳转指令的源跳转表构建所述间接跳转指令的目标跳转表;步骤4,将构建的所述目标跳转表的地址写入所述重定位项。2. 如权利要求1所述的二进制翻译中间接跳转指令的翻译方法,其特征在于, 所述步骤l进一步为,步骤21,在反汇编到间接跳转指令时,根据反汇编出的源指令序列判断所述间接跳转 指令是否为多分支语句或虚函数调用,如果是,则对所述间接跳转指令进行标记;步骤22,获得所述被标记的间接跳转指令的源跳转表的大小,所述源跳转表中记载的 各个跳转目标地址,记录计算所述源跳转表索引的指令。3. 如权利要求2所述的二进制翻译中间接跳转指令的翻译方法,其特征在于, 所述步骤2进一步为,步骤31,翻译所述计算源跳转表的索引的指令,在索引所述目标跳转表时使用所述索引;步骤32,将被标记的间接跳转指令翻译为根据所述索引从待构建的所述间接跳转指令 的目标跳转表中获得对应表项,并按所述表项的内容进行跳转的指令; 步骤33,为所述目标跳转表预留重定位项。4. 如权利要求2所述的二进制翻译中间接跳转指令的翻译方法,其特征在于, 所述步骤3进一步为,步骤41,翻译完所述被标记的间接跳转指令后,构建目标跳转表的大小同源跳转表的 大小相同;步骤42,判断源跳转表的表项中的跳转地址是否已被翻译并生成对应的本地码,如果 是,执行步骤43,否则,执行步骤44 ;步骤43,将所述对应的本地码的入口地址填入所述目标跳转表对应的表项中; 步骤44,将所述目标跳转表对应的表项填为跳转到翻译控制器的代码入口地址。5. 如权利要求2所述的二进制翻译中间接跳转指令的翻译方法,其特征在于, 所述步骤1和所述步骤2之间还包括步骤51,将被标记的间接跳转指令的翻译中取源跳转表表项内容的指令对应生成的本 地码移到跳转寄存器指令之后; 所述步骤3进一步为,步骤51,翻译完所述被标记的间接跳转指令后,构建目标跳转表的大小同源跳转表的 大小相同;步骤52,判断源跳转表的表项中的跳转地址是否已被翻译并生成对应的本地码,如果 是,执行步骤53,否则,执行步骤54 ;步骤53,将所述对应的本地码的入口地址填入所述目标跳转表对应的表项中;步骤54,将所述目标跳转表对应的表项填为所述跳转寄存器指令的下一条指令的地址。6. 如权利要求1所述的二进制翻译中间接跳转指令的翻译方法,其特征在于, 所述步骤2还包括,对于未被标记的间接跳转指令,按查找哈希表的方法进行翻译...

【专利技术属性】
技术研发人员:武成岗王文文
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

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

1