全网唯一标准王
(19)国家知识产权局 (12)发明 专利申请 (10)申请公布号 (43)申请公布日 (21)申请 号 202211326585.7 (22)申请日 2022.10.27 (71)申请人 飞腾信息技 术有限公司 地址 300450 天津市滨 海新区海 洋高新技 术开发区信安创业广场5号楼 (72)发明人 吕蓊鉴 李根 唐遇星 黄能超  罗昌杰 胡鑫垚  (74)专利代理 机构 北京布瑞知识产权代理有限 公司 11505 专利代理师 张欣 (51)Int.Cl. G06F 9/455(2006.01) G06F 9/30(2006.01) G06F 9/50(2006.01) (54)发明名称 二进制翻译方法及装置 (57)摘要 提供了一种二进制 翻译方法及装置, 所述方 法包括: 在主机的内存中加载目标程序对应的线 程数据, 该线程数据包括第一指令集架构相关的 第一线程结构体, 第二指令集架构相关的第二线 程结构体, 主程序的TLS数据以及主程序的一个 或多个依赖库的TLS数据, 第一线程结构体与主 程序的TLS数据在内存中的布局符合第一指令集 架构对应的TLS内存布局, 第二线程结构体与主 程序的TLS数据在内存中的布局符合第二指令集 架构对应的TLS内存布局; 根据基于线程指针的 访问代码的类型返回第一线程指针或第二线程 指针。 本申请在新的TLS内存布局的基础上引入 了两种类型的指针, 有助于实现跨指令集架构的 TLS数据的加载和访问。 权利要求书3页 说明书15页 附图5页 CN 115421876 A 2022.12.02 CN 115421876 A 1.一种二进制翻译方法, 其特征在于, 所述方法用于对基于第一指令集架构的目标程 序进行二进制翻译, 以在基于第二指令集架构的主机上运行所述 目标程序, 所述 目标程序 包括主程序以及所述主程序的一个或多个依赖库, 所述主机包括所述一个或多个依赖库中 的至少部分依赖库对应的本地原生库, 所述方法包括: 在所述主机的内存中加载所述目标程序对应的线程数据, 所述线程数据包括所述第 一 指令集架构相关的第一线程结构体, 所述第二指令集架构相关的第二线程结构体, 所述主 程序的TLS数据, 所述一个或多个依赖库的TLS数据, 所述第一线程结构体与所述主程序的 TLS数据在所述内存中的布局符合所述第一指 令集架构对应的TLS内存布局, 所述第二线程 结构体与所述主程序的TLS数据在所述内存中的布局符合所述第二指令集架构对应的TLS 内存布局; 如果基于线程指针的访问代码为所述第 一指令集架构下的代码, 则将所述访问代码翻 译为基于第一线程指 针的访问代码, 其中, 所述第一线程指针与所述第一指 令集架构对应; 和/或 如果基于线程指针的访问代码为所述第 二指令集架构下的代码, 则 基于第二线程指针 加载和/或执 行所述访问代码, 其中, 所述第二线程指针与所述第二指令集架构对应。 2.根据权利要求1所述的方法, 其特征在于, 所述如果基于线程指针的访问代码为所述 第一指令集架构下的代码, 则将所述访问代码翻译为基于第一线程指针的访问代码, 包括: 如果所述访问代码为所述第 一指令集架构下的代码, 且所述访问代码为基于线程指针 和固定偏移 值的访问代码, 则将所述访问代码翻译为基于所述第一线程指 针和所述固定偏 移值的访问代码。 3.根据权利要求1所述的方法, 其特征在于, 所述如果基于线程指针的访问代码为所述 第一指令集架构下的代码, 则将所述访问代码翻译为基于第一线程指针的访问代码, 包括: 如果所述访问代码为所述第 一指令集架构下的代码, 且所述访问代码为基于线程指针 和目标全局偏移表的访问代码, 则将所述访问代码翻译为基于所述第一线程指 针和所述目 标全局偏移 表的访问代码; 其中, 所述目标全局偏移 表中的偏移值 为相对所述第一线程指针的偏移值。 4.根据权利要求3所述的方法, 其特征在于, 在所述将所述访问代码翻译为基于第 一线 程指针的访问代码之前, 所述方法还 包括: 获取初始全局偏移表, 所述初始全局偏移表中的偏移值为相对所述第 二线程指针的偏 移值; 根据所述第 一线程指针的地址和所述第 二线程指针的地址之间的距离, 对所述初始全 局偏移表中的偏移值进行修 正, 得到所述目标全局偏移 表。 5.根据权利要求1所述的方法, 其特征在于, 所述主程序的TLS数据位于第一TLS块中, 所述第一线程结构体内嵌在所述第一TLS块中。 6.根据权利要求5所述的方法, 其特 征在于: 如果所述第一指令集架构对应的TLS内存布局为TLS_TCB_AT_TP, 所述第二指令集架构 对应的TLS内存布局为TLS_DTV_AT_TP, 则所述第一线程结构体内嵌在所述第一TLS块的尾 部; 或者,权 利 要 求 书 1/3 页 2 CN 115421876 A 2如果所述第一指令集架构对应的TLS内存布局为TLS_DTV_AT_TP, 所述第二指令集架构 对应的TLS内存布局为TLS_TCB_AT_TP, 则所述第一线程结构体内嵌在所述第一TLS块的头 部。 7.根据权利要求1所述的方法, 其特征在于, 所述主程序的TLS数据以及所述一个或多 个依赖库的TLS数据在所述内存中连续 排布。 8.根据权利要求1所述的方法, 其特 征在于: 如果所述第一指令集架构对应的TLS内存布局为TLS_TCB_AT_TP, 所述第二指令集架构 对应的TLS内存布局为TLS_DTV_AT_TP, 则在所述内存中, 所述第一线程结构体与所述主程 序的TLS数据连续排布, 所述第二线程结构 体与所述主程序的TLS数据之间设置有动态线程 向量, 所述第一线程指针指向所述第一线程结构体和所述主程序的TLS数据之间的位置, 所 述第二线程指针指向所述第二线程结构体和所述动态线程向量之间的位置; 或者, 如果所述第一指令集架构对应的TLS内存布局为TLS_DTV_AT_TP, 所述第二指令集架构 对应的TLS内存布局为TLS_TCB_AT_TP, 则在所述内存中, 所述第一线程结构体与所述主程 序的TLS数据之 间设置有动态线程向量, 所述第二线程结构体与所述主程序的TLS数据连续 排布, 所述第一线程指针指向所述第一线程结构体和所述动态线程向量之间的位置, 所述 第二线程指针指向所述第二线程结构体和所述主程序的TLS数据之间的位置 。 9.一种二进制翻译装置, 其特征在于, 所述装置用于对基于第一指令集架构的目标程 序进行二进制翻译, 以在基于第二指令集架构的主机上运行所述 目标程序, 所述 目标程序 包括主程序以及所述主程序的一个或多个依赖库, 所述主机包括所述一个或多个依赖库中 的至少部分依赖库对应的本地原生库, 所述装置包括: 加载模块, 用于在所述主机的内存中加载所述目标程序对应的线程数据, 所述线程数 据包括所述第一指 令集架构相关的第一线程结构体, 所述第二指 令集架构相关的第二线程 结构体, 所述主程序的TLS数据, 所述一个或多个依赖库的TLS数据, 所述第一线程结构体与 所述主程序的TLS数据在所述内存中的布局符合所述第一指令集架构对应的TLS内存布局, 所述第二线程结构体与所述主程序的TLS数据在所述内存中的布局符合所述第二指 令集架 构对应的TLS内存布局; 处理模块, 用于如果基于线程指针的访 问代码为所述第一指令集架构下的代码, 则将 所述访问代码翻译为基于第一线程指针的访问代码, 其中, 所述第一线程指针与所述第一 指令集架构对应; 和/或, 如果基于线程指针的访问代码为所述第二指令集架构下的代码, 则基于第二线程指针加载和/或执行所述访问代码, 其中, 所述第二线程指 针与所述第二指 令集架构对应。 10.根据权利要求9所述的装置, 其特征在于, 所述处理模块进一步用于: 如果所述访问 代码为所述第一指 令集架构下的代码, 且所述访问代码为基于线程指 针和固定偏移 值的访 问代码, 则将所述访问代码翻译为基于所述第一线程指针和所述固定偏移值的访问代码。 11.根据权利要求9所述的装置, 其特征在于, 所述处理模块进一步用于: 如果所述访问 代码为所述第一指 令集架构下的代码, 且所述访问代码为基于线程指 针和目标全局偏移表 的访问代码, 则将所述访问代码翻译为基于所述第一线程指 针和所述目标全局偏移表的访 问代码; 其中, 所述目标全局偏移 表中的偏移值 为相对所述第一线程指针的偏移值。权 利 要 求 书 2/3 页 3 CN 115421876 A 3

PDF文档 专利 二进制翻译方法及装置

文档预览
中文文档 24 页 50 下载 1000 浏览 0 评论 0 收藏 3.0分
温馨提示:本文档共24页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
专利 二进制翻译方法及装置 第 1 页 专利 二进制翻译方法及装置 第 2 页 专利 二进制翻译方法及装置 第 3 页
下载文档到电脑,方便使用
本文档由 SC 于 2024-02-24 01:00:29上传分享
友情链接
站内资源均来自网友分享或网络收集整理,若无意中侵犯到您的权利,敬请联系我们微信(点击查看客服),我们将及时删除相关资源。