(19)国家知识产权局
(12)发明 专利申请
(10)申请公布号
(43)申请公布日
(21)申请 号 202210748606.8
(22)申请日 2022.06.28
(71)申请人 湖南卡姆派乐信息科技有限公司
地址 410205 湖南省长 沙市岳麓区高新 开
发区麓龙路199 号麓谷商务中心BCD座
BCD栋519
(72)发明人 罗杰 丁传新 陈伟业 刘曜
王锋 张乔 刘鑫
(74)专利代理 机构 湖南企企卫知识产权代理有
限公司 43257
专利代理师 任合明
(51)Int.Cl.
G06F 8/52(2018.01)
G06F 9/445(2018.01)
G06F 8/76(2018.01)G06F 12/1027(2016.01)
(54)发明名称
一种动静结合的二进制程序翻译方法
(57)摘要
本发明公开了一种动静结合的二进制程序
翻译方法, 目的是减少翻译过程的开销, 提高翻
译效率, 提升翻译后二进制程序性能。 技术方案
是构建一个由源程序解析模块、 指令译码模块、
IRs优化模块、 HIR生成模 块、 IRt生成模 块、 IRt优
化模块、 动态翻译函数插入模块、 目标程序生成
模块组成的动静结合的二进制翻译系统, 以静态
二进制翻译为主, 将二进制程序中能用静态方法
翻译的程序进行静态翻译, 生 成目标平台对应的
二进制程序; 对于静态翻译不能翻译的指令, 在
静态翻译后生成的目标平台对应的二进制程序
中插入动态翻译函数, 采用动态翻译函数对静态
翻译不能翻译的指令进行动态翻译。 采用本发明
可减少翻译带来的开销, 有效提升二进制程序性
能。
权利要求书5页 说明书13页 附图2页
CN 114995832 A
2022.09.02
CN 114995832 A
1.一种动静结合的二进制程序翻译方法, 其特 征在于包括以下步骤:
第一步, 构建动静结合的二进制翻译系统, 动静结合的二进制翻译系统由源程序解析
模块、 指令译码模块、 IRs优化模块、 HIR生成模块、 IRt生成模块、 IRt优化模块、 动态翻译函
数插入模块、 目标程序生成模块组成; 源程序解析模块读取并识别用户输入的源平台二进
制程序, 得到代码段、 数据段、 符号表, 构建地址映射表, 并对数据段进 行翻译得到翻译后的
数据段, 将符号表、 代码段发送给指 令译码模块, 将地址映射表发送给I Rs优化模块, 将符号
表发送给IRt优化模块和动态翻译函数插入模块, 将翻译后的数据段发送给目标程序生成
模块; 指令译码模块对从源程序解析模块接 收的代码段进行译码, 生成源平台相关的中间
表示IRs, 将IRs发送给IRs优化模块; IRs优化模块构建包含基本块列表的地址映射表和控
制流图, 将包含基本块列表的地址映射表、 控制流图发送给IRt优化模块, 将包含基本块列
表的地址映射表发送给目标程序生成模块, 对从指 令译码模块接收的I Rs进行优化, 得到优
化后的IRs,将优化后的IRs发送给HIR生成模块; HIR生 成模块对从I Rs优化模块接收的优化
后的IRs进行转化, 得到源平台无关的中间表示HIR, 将HIR发送给IRt生成模块; IRt生成模
块对从HIR生成模块接收的HIR进行分析转换, 生成目标平台相关的中间表示IRt, 将IRt发
送给IRt优化模块; IRt优化模块从IRs优化模块接收包含基本块列表的地址映射表, 从IRt
生成模块接收IRt,对IRt进行优化, 得到优化后的I Rt, 并将优化后的I Rt发送给动态翻译函
数插入模块; 动态翻译函数插入模块从源程序解析模块接收符号表, 从I Rt优化模块接收优
化后的IRt, 在符号表中插入跳转目标标签; 分析优化后的IRt, 对优化后的IRt插入动态翻
译函数, 得到插入了动态翻译函数的优化后的IRt, 将插入了动态翻译函数的优化后的IRt
发送给目标程序生成模块, 将插入了跳转 目标标签的符号表发送给目标程序生成模块; 目
标程序生成模块 从动态翻译函数插入模块接收插入了动态翻译函数后的优化后的I Rt和地
址映射表, 生成最终的目标平台二进制程序和地址映射表;
第二步, 源程序解析模块读取用户输入的源平台二进制程序, 将源平台二进制程序识
别成代码段、 数据段、 符号表, 构建地址映射表, 并在地址映射表添加函数地址和变量地址;
方法是:
2.1源程序解析模块读取用户输入的源平台二进制程序, 根据源平台二进制程序的格
式, 将源平台二进制程序识别成内容为指令的代码段、 数据段、 符号表, 所述符号表内容为
函数名、 变量名及它 们在源平台二进制程序中的地址;
2.2构建地址映射表, 地址映射表用于存储函数及变量在源平台二进制程序中对应的
地址信息, 方法是: 将符号表中的函数名、 变量名及它们在源平台二进制程序中的地址添加
到地址映射表; 地址映射表由M+N个表项组成, M为源平台二进制程序中函数的个数, N为源
平台二进制程序中变量的个数, 每个表项包含2个域, 分别为函数名 和函数起始地址, 或变
量名和变量 地址;
2.3根据源平台和目标平台大小端有无差异对源平台二进制程序的数据段进行翻译,
得到翻译后的数据段;
2.4将符号表、 代码段发送给指令译码模块, 将翻译后的数据 段发送给目标程序生成模
块; 将地址映射表发送给IRs优化模块, 将符号表发送给IRt优化模块和动态翻译函数插入
模块;
第三步, 指令译码模块从源程序解析模块接收符号表、 代码段, 将代码段翻译成源平台权 利 要 求 书 1/5 页
2
CN 114995832 A
2相关的中间表示 IRs, 将IRs发送给IRs优化模块, 方法是:
3.1令变量m=1;
3.2从符号表中获取第m个函数的起始地址, 遍历第m个函数的每条指令, 对每条指令进
行译码, 将指令转换成源平台相关的中间表示形式即IRs; 若指令是运算指令, 则一条指令
对应一条IRs; 若指令是执行会引起标志 位的变化的特殊指 令, 则一条指 令对应多 条IRs; 若
指令的执 行依赖标志位, 则一条指令对应多条IRs;
3.3令m=m+1, 若m≤M, 转3.2; 若m>M, 将翻译得到的源平台相关的中间表示即IRs发送
给IRs优化模块, 转第四步;
第四步, IRs优化模块从指令译码模块接收IRs, 从源程序解析模块接收地址映射表, 对
IRs进行优化, 得到优化后的IRs, 同时修改地址映射表, 得到包含基本块列表的地址映射
表; 构建控制流图; 将优化后的IRs发送给HIR生成模块, 将包含基本块列表的地址映射表、
控制流图发送给IRt优化模块, 将包含基本块列表的地址映射表发送给动态翻译函数插入
模块; 方法是:
4.1对IRs进行基本块分割, 得到Q个基本块, 并在地址映射表中添加Q个基本块表项, 这
Q个基本块表项称为基本块列 表, 每个基本块表项包括基本块序号和基本块地址两个域, 得
到添加了基本块列表的地址映射表; Q 为正整数;
4.2遍历4.1得到的地址映射表中基本块列表, 给基本块列表中的每个基本块找到该基
本块对应的父节点和子节点, 即每个基本块的前驱和后继; 将同一个函数中的所有基本块
按前驱和后继的关系构成一个控制流图; M个函数共有M个控制流图; 将 M个控制流图发送给
IRt优化模块;
4.3对M个控制流图分别进行数据流分析, 包括活跃变量分析、 到达定值分析, 构建引
用‑定值链即ud链和 定值‑引用链即du链, 计算每个基本块寄存器的活跃信息, 活跃信息包
括与标志位相关的数据流信息;
4.4根据数据流分析的结果中与标志位相关的数据流信息, 在IRs中删除没有被使用的
对标志位赋值的指令, 得到优化后的IRs;
4.5将优化后的IRs发送给HIR生成模块, 将包含基本块列表的地址映射表、 控制流图发
送给IRt优化模块, 将包 含基本块列表的地址映射表发送给动态翻译函数插 入模块;
第五步, HIR生成模块从IRs优化模块接收优化后的IRs, 将优化后的IRs转换成源平台
无关的中间表示即HIR, 将HIR 发送给IRt生成模块; 方法是:
5.1将优化后的IRs中所有和源平台相关的物理寄存器信息转换到全局内存空间, 使得
每一个源平台的物理寄存器对应一个独立的全局内存存储位置, 记录每个物理寄存器在源
平台中的属性, 将 每个物理寄存器在 源平台中的属性添加到初步优化后的I Rs中, 得到源平
台无关的中间表示即HIR;
5.2将HIR 发送给IRt生成模块, 令 HIR中共有Q个物理寄存器, Q 为正整数;
第六步, IRt生成模块从HIR生成模块接收HIR,将HIR转换成目标平台相关的中间表示
即IRt,将IRt发送给IRt优化模块, 方法是:
6.1将源平台的能映射到目标平台的寄存器映射到目标平台的寄存器, 得到目标平台
无关的中间表示, 令目标平台无关的中间表示中共有P条目标平台无关的中间表示, P为正
整数;权 利 要 求 书 2/5 页
3
CN 114995832 A
3
专利 一种动静结合的二进制程序翻译方法
文档预览
中文文档
21 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共21页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 16:31:53上传分享