(19)国家知识产权局
(12)发明 专利
(10)授权公告 号
(45)授权公告日
(21)申请 号 202210381743.2
(22)申请日 2022.04.13
(65)同一申请的已公布的文献号
申请公布号 CN 114461227 A
(43)申请公布日 2022.05.10
(73)专利权人 飞腾信息技 术有限公司
地址 300450 天津市滨 海新区海 洋高新技
术开发区信安创业广场5号楼
(72)发明人 吕蓊鉴 李根 黄能超 吴楠
徐霞丽
(74)专利代理 机构 北京布瑞知识产权代理有限
公司 11505
专利代理师 张欣
(51)Int.Cl.
G06F 8/41(2018.01)G06F 9/445(2018.01)
(56)对比文件
CN 114115990 A,202 2.03.01
审查员 刘杰
(54)发明名称
运行软件的方法、 装置以及机器可读存储介
质
(57)摘要
提供一种运行软件的方法、 装置和机器可读
存储介质。 该方法包括: 对第一软件的源二进制
代码进行静态翻译, 得到目标二进制代码, 该源
二进制代码包括第一调用指令, 该第一调用指令
所调用的函数地址由第一软件在运行过程中动
态生成, 在 目标二进制代码中, 第一调用 指令被
翻译成包装函数的调用指令; 在目标机器上运行
第一软件, 并在运行第一软件的过程中执行包装
函数, 以执行 以下操作: 响应于函数地址指向源
二进制代码, 跳转至目标二进制代码中的与函数
地址对应的翻译 地址; 和/或, 响应于函数地址指
向第一软件运行期间生成的代码, 对第一软件运
行期间生 成的代码进行翻译。 本申请实施例提出
的静态翻译方法可以降低软件在目标机器上运
行时的延 迟, 并可以增加翻译过程中指令优化的
空间。
权利要求书3页 说明书12页 附图5页
CN 114461227 B
2022.07.12
CN 114461227 B
1.一种运行软件的方法, 其特征在于, 所述方法用于将第一软件从源机器移植至目标
机器, 所述源机器的处理器基于第一指令集架构, 所述 目标机器的处理器基于第二指令集
架构, 所述第一指令集架构与所述第二指令集架构不同,
所述方法包括:
对所述第一软件的源二进制代码进行静态翻译, 得到目标二进制代码, 其中所述源二
进制代码为基于所述第一指令集架构的代码, 所述目标二进制代码为基于所述第二指 令集
架构的代码, 所述源二进制代码包括第一调用指令, 所述第一调用指令所调用的函数地址
由所述第一软件在运行过程中动态生成, 在所述 目标二进制代码中, 所述第一调用指令被
翻译成第二调用指令, 所述第二调用指令用于调用所述第一调用指令的包 装函数;
在所述目标机器上运行所述第 一软件, 并在运行所述第 一软件的过程中执行所述包装
函数, 以执 行以下操作:
响应于所述函数地址指向所述源二进制代码, 跳转至所述目标二进制代码中的与 所述
函数地址对应的翻译地址;
响应于所述函数地址指向所述第 一软件运行期间生成的代码, 调用动态翻译引擎对所
述第一软件运行期间生成的代码进行翻译;
响应于所述函数地址指向所述第二指令集架构的代码, 对所述第一调用指令进行ABI
转换, 得到转换后的调用指令, 并执 行所述转换后的调用指令; 和/或
响应于所述函数地址指向所述第一指令集架构的代码, 对所述第一调用指令进行ABI
转换, 得到所述第一调用指令的等 价指令, 并执 行所述等价指令。
2.根据权利要求1所述的方法, 其特征在于, 所述包装函数包括第一参数和第二参数,
所述第一参数用于指示内存中的代码的类型, 所述第二参数用于指示所述函数地址, 其中
所述函数地址指向的代码的类型包括以下类型中的一种或多种:
第一类型, 表示所述 函数地址指向所述源二进制代码;
第二类型, 表示所述 函数地址指向所述第一软件运行期间生成的代码;
第三类型, 表示所述源二进制代码翻译过程中生成的翻译代码; 以及
第四类型, 表示所述 函数地址指向所述第二指令集架构的原生代码。
3.根据权利要求2所述的方法, 其特征在于, 所述第 一参数的取值由所述目标机器上的
动态加载器在加载 所述第一软件时提供。
4.根据权利要求1所述的方法, 其特征在于, 所述对所述第 一软件的源二进制代码进行
静态翻译, 包括:
对所述源二进制代码中的函数进行识别, 得到第一 函数集合;
针对所述第一 函数集合中的函数, 以函数为单位进行 所述静态翻译。
5.根据权利要求4所述的方法, 其特征在于, 所述对所述源二进制代码中的函数进行识
别, 得到第一 函数集合, 包括:
根据所述源二进制代码中的符号表对所述源二进制代码中的函数进行识别, 得到第 二
函数集合;
根据所述第二函数集合中的每个函数的内部调用指令对所述源二进制代码中的函数
进行识别, 得到第三 函数集合;
确定所述第二 函数集合和所述第三 函数集合的并集, 得到所述第一 函数集合。权 利 要 求 书 1/3 页
2
CN 114461227 B
26.根据权利要求1所述的方法, 其特 征在于, 所述方法还 包括:
将所述目标二进制代码转换为中间表示;
对所述中间表示进行优化, 得到所述目标二进制代码的优化代码。
7.根据权利要求1所述的方法, 其特征在于, 所述第一调用指令包括call指令、 jump指
令和条件跳转指令中的一种或多种。
8.一种运行软件的装置, 其特征在于, 所述装置用于将第一软件从源机器移植至目标
机器, 所述源机器的处理器基于第一指令集架构, 所述 目标机器的处理器基于第二指令集
架构, 所述第一指令集架构与所述第二指令集架构不同,
所述装置包括:
翻译模块, 用于对所述第 一软件的源二进制代码进行静态翻译, 得到目标二进制代码,
其中所述源二进制代码为基于所述第一指 令集架构的代码, 所述目标二进制代码为基于所
述第二指令集架构的代码, 所述源二进制代码包括第一调用指令, 所述第一调用指令所调
用的函数地址由所述第一软件在运行过程中动态生成, 在所述 目标二进制代码 中, 所述第
一调用指 令被翻译成第二调用指令, 所述第二调用指 令用于调用所述第一调用指 令的包装
函数;
运行模块, 用于在所述目标机器上运行所述第一软件, 并在运行所述第一软件的过程
中执行所述包装函数, 以执 行以下操作:
响应于所述函数地址指向所述源二进制代码, 跳转至所述目标二进制代码中的与 所述
函数地址对应的翻译地址;
响应于所述函数地址指向所述第 一软件运行期间生成的代码, 调用动态翻译引擎对所
述第一软件运行期间生成的代码进行翻译;
响应于所述函数地址指向所述第二指令集架构的代码, 对所述第一调用指令进行ABI
转换, 得到转换后的调用指令, 并执 行所述转换后的调用指令; 和/或
响应于所述函数地址指向所述第一指令集架构的代码, 对所述第一调用指令进行ABI
转换, 得到所述第一调用指令的等 价指令, 并执 行所述等价指令。
9.根据权利要求8所述的装置, 其特征在于, 所述包装函数包括第一参数和第二参数,
所述第一参数用于指示内存中的代码的类型, 所述第二参数用于指示所述函数地址, 其中
所述函数地址指向的代码的类型包括以下类型中的一种或多种:
第一类型, 表示所述 函数地址指向所述源二进制代码;
第二类型, 表示所述 函数地址指向所述第一软件运行期间生成的代码;
第三类型, 表示所述源二进制代码翻译过程中生成的翻译代码; 以及
第四类型, 表示所述 函数地址指向所述第二指令集架构的代码。
10.根据权利要求9所述的装置, 其特征在于, 所述第一参数的取值由所述目标机器上
的动态加载器在加载 所述第一软件时提供。
11.根据权利要求8所述的装置, 其特征在于, 所述翻译模块用于对所述源二进制代码
中的函数进 行识别, 得到第一函数集合; 针对所述第一函数集合中的函数, 以函数为单位进
行所述静态翻译。
12.根据权利要求11所述的装置, 其特征在于, 所述翻译模块用于根据 所述源二进制代
码中的符号表对所述源二进制代码中的函数进行识别, 得到第二函数集合; 根据所述第二权 利 要 求 书 2/3 页
3
CN 114461227 B
3
专利 运行软件的方法、装置以及机器可读存储介质
安全报告 >
其他 >
文档预览
中文文档
21 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共21页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 00:07:46上传分享