二进制翻译中的库函数处理
二进制翻译技术
3 有代表性的二进制翻译系统
目前,二进制翻译已经得到了广泛的重视和研究,一些有代表性的系统见表 2。 表 2 所列出的多数翻译器都与机器特性高度相关,重利用是非常困难的。其中 1994 年 AT&T 公 司开发的 Flashport 二进制翻译器可以运用到多个源、目标平台,但不能完全自动化,需要专 业用户通过图形用户界面(GUI)进行交互。昆士兰(Queensland)大学开发的 UQBT 以及 UQDBT,
代码翻译
MPE XL)
Mimic
IBM
(1987)
[6] 对每条源机器指令代码扩 IBM system /370 IBM RT PC 展倍数为 4 的软件模拟器
Accelera- Tandem tor (1991)
[7] 将 CISC 移植到 RISC 的静 态翻译器,采用解释器作 为补充
TNS CISC
动态翻译
FX!32 UQBT
JVMs JITs BOA Aries
图 1 二进制翻译的三种方法
解释执行对源处理器代码中的每条指令实时解释执行,系统不保存也不缓存解释过的指令,不 需要用户干涉,也不进行任何优化。解释器相对容易开发,比较容易与老的体系结构高度兼容, 但代码执行效率很差[1] 。 [14]
Alpha 的混合模拟器和二
NT)
NT)
进制翻译器
Daisy (1996)
IBM [9] [10] 利用二进制翻译调度
(PowerPC,
PowerPC 代码到超长指令
UnixV)
字(VLIW)处理器,增加并
行性
பைடு நூலகம்
VLIW
Aries
HP
[4] 解释和动态翻译相结合, HP Precision
在线二进制代码翻译成汉字
在线二进制代码翻译成汉字
在线二进制代码翻译成汉字是一种将二进制代码转化成文字的方法,它可以帮助人们更快速地理解计算机语言。
在线二进制代码翻译技术的基本原理是将每一位二进制数字
(0或1)映射为对应的中文汉字。
例如,有8位二进制代码:01100101,可以翻译成“公里”汉字。
第一步,需要将8位二进制代码拆分为4个二进制数字组:0110 0101。
每组2个二进制数字被称为一个位字节,因此整
个8位的二进制代码包含4个字节。
第二步,使用在线二进制代码翻译技术,通过每组2个二进制数字的字节翻译成相应的一个汉字。
例如,第一组二进制数字(0110)翻译成汉字“公”,第二组(0101)翻译成汉字“里”。
第三步,将每个字节翻译出来的汉字连接起来,如“公里”,就是将上述8位二进制代码翻译成汉字的完整结果。
总之,在线二进制代码翻译到汉字是一个简单可行的方法。
它可以快速准确的将二进制代码转换成汉字,从而提高编程效率。
此外,这种转换方式也给用户提供了一种可视化的模式,可以更好地理解计算机语言,从而更好地操作和使用电脑。
动态二进制翻译中基本块重叠冗余的优化
[ src]Ma yd n mibn r a s tr coebs lc s h nt fr s t nade euin teb s lcsob as tdi d nmi Abta t n y a c ia t nl os h s ai bo ka e io a l i n xc t ,h aibok et nl e y a c yr a c t u t ao n o c t r a n
qemu在翻译过程中会记录每个基本块翻译后的首地址以定位所要执行的代码如基本块b的目标机器代码首地址为pctbl0为了避免重新翻译基本块aa的目标机器代码首地址将无法确定需要在b的目标机器代码中找到a对应的代码代码定位是消除冗余的主要工作也是优化所带来的额外开销之一
维普资讯
LI u , n GUAN l i g L n -in , ANG li J Ha- n , IZe g xa g LI b A-e
( c o l f lc o i I fr t na dE e t c l n ie r g S a g a Ja tn ie s y S a g a 0 2 0 S h o e t nc n o mai n lc ia E g n e n , h n h i ioo gUnv r t h h 2 0 4 ) oE r o r i i, n i
前翻译 的基本块可能是一个 已经过翻译的基 本块子集 ,或者包含 一个已翻译 的基 本块 ,这增加了翻译开销。该文从优化动态二进 制翻译 角 度 出发 ,检测、消除 由基本块重叠冗余带来 的开销 。实验表明 ,在动态二进 制翻译 过程 中存在 5 %左右的基本块重叠率 ,通 过消 除这些冗 余可 以将翻译和执行 的性能提 高 1 4 %~ %。
二进制翻译系统BATSUP中的动态翻译器的设计与实现
二进制翻译系统BATSUP中的动态翻译器的设计与实现黄英兰;杨晋兴;钟珊
【期刊名称】《航空计算技术》
【年(卷),期】2005(035)003
【摘要】针对目前航电系统硬件的升级换代而导致老的软件的不可用的问题,提出了一个用于航电系统软件升级的二进制翻译系统(BTASUP系统).该系统能把解释执行和动态翻译结合起来,在PowerPC处理器上实现对1750A处理器的二进制可执行代码的透明执行.介绍了系统的结构和工作原理,重点讨论了作为系统重要组成部分的动态翻译器的设计与实现.
【总页数】5页(P50-53,58)
【作者】黄英兰;杨晋兴;钟珊
【作者单位】中国航空计算技术研究所,陕西,西安,710068;中国航空计算技术研究所,陕西,西安,710068;中国航空计算技术研究所,陕西,西安,710068
【正文语种】中文
【中图分类】TP314
【相关文献】
1.系统级动态二进制翻译系统中访存异常的制导技术研究 [J], 张龙龙;董卫宇;王立新
2.一个用户级动态二进制翻译系统的设计与实现 [J], 曹宏嘉;俞磊;邓鹍;周兴铭
3.动态二进制翻译器QEMU中冗余指令消除技术研究 [J], 宋强;陈香兰;陈华平
4.间接转移指令在动态二进制翻译器中的预测方法 [J], 徐超豪;臧斌宇
5.一个动态二进制翻译系统的设计与实现 [J], 刘毅;臧红伟;谢克嘉;杨晋兴
因版权原因,仅展示原文概要,查看原文内容请购买。
一种改进QEMU精确异常处理机制的研究
华中科技大学硕士学位论文一种改进QEMU精确异常处理机制的研究姓名:余璐申请学位级别:硕士专业:计算机应用技术指导教师:章勤20080602华中科技大学硕士学位论文摘要QEMU是一款非常流行的使用动态二进制翻译技术并支持多源多目标翻译的二进制翻译器。
但是QEMU在支持精确异常方面仍存在不足,具体表现在当异常发生时,无法完全恢复到异常发生前CPU的正确状态,无法定位异常指令的具体位置。
针对QEMU支持精确异常不足的缺点,异常处理系统给出了一种对异常进行处理的机制,异常处理系统将异常分为可预测性异常和不可预测性异常,可预测性异常是指在异常未发生前就能定位异常位置的一类异常,不可预测性异常是指在异常未发生前无法确定异常位置,只有到异常发生时才能确定异常位置的一类异常,因此使用设置异常点法对可预测性异常进行处理,使用计算异常点法对不可预测性异常进行处理。
当异常发生时异常处理系统实现对QEMU用户模式下异常指令准确定位。
异常处理系统集成QEMU远程调试功能,能够在与GDB调试器链接时,响应GDB命令请求,并能够在调试过程中监控CPU状态。
当用户在执行过程中出现异常时,以网页方式显示异常处CPU状态,具有与用户交互强,操作简单的特点,因此具备很好的实用价值。
实验表明:异常处理系统能够对QEMU用户模式下异常指令实现准确定位。
同时与GDB(GNU Debugger)相比,异常处理系统能够定位边界溢出指令位置而GDB无法定位该类异常。
另一方面当异常发生时异常处理系统能给出异常的具体原因,而GDB仅能提供除法异常原因。
最后异常处理系统能够给出异常点之前通用寄存器状态和标志位寄存器状态,而GDB则必须通过多次设置程序断点方式才能得到此类信息。
因此在发生异常情况下,异常处理系统提供了比GDB更全面的信息,而这些信息有助于程序员提高调试程序的效率。
关键词:动态二进制翻译器,精确异常,QEMU,设置异常点法,计算异常点法华中科技大学硕士学位论文AbstractQEMU is a dynamic binary translator, but there are some deficiencies in supporting the precise exception. When exception happens, it does not completely restore the CPU state, does not locate the position of exception.Against the lack of QEMU support the precise exception, common exception handling system gives a way to improve the mechanism of the precise exception of QEMU. Common exception handling system divides the exceptions into two parts, one part is called predictable exception and the other part is called unpredictable exception. Using set exception point method to deal with predictable exception and using compute exception point method to deal with unpredictable exception. In the end common exception handling system realizes to locate the position of exception of user mode of QEMU.Precise Exception handling system integrates the remote debugging of QEMU, it will respond to the requests of the GDB commands if it connect to the GDB and monitor the state of the process of debugging. It will return the result to the web if the exception happens and it has the features of strong user interaction, simplifies the operations, therefore it is very useful.Result shows common exception handling system realizes to locate the position of exception instruction. Compared with GDB, common exception handling system could locate the position of BOUND exception but GDB could not do it. On the other hand, common exception handling system could give the reasons of exception but GDB could not do it. In the end, common could give the state of general registers and EFLAGS once, but GDB must spend more time to get this information by setting break points. Therefore, common exception handling exception provides faster and more information than GDB, it raises the efficiency when programmers debug the programs.Key words: dynamic binary translation, precise exception, QEMU, set exception point method, compute exception point method独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。
动态二进制翻译优化研究的开题报告
动态二进制翻译优化研究的开题报告一、选题的背景和意义随着计算机技术的不断发展,人们越来越依赖于计算机软件来提高工作效率和准确性,因此,计算机软件的开发和优化成为了一个重要的研究领域。
在编写软件时,我们通常使用高级编程语言来描述算法和程序,但这些高级语言通常需要经过复杂的编译和链接处理才能生成可执行文件,而这个过程中存在许多性能瓶颈,例如二进制代码的优化、代码翻译等。
因此,研究如何优化二进制代码翻译的问题是非常重要的,具有广泛的应用前景。
二、选题的研究现状动态二进制翻译(Dynamic Binary Translation,DBT)是一种通过执行中间代码来翻译二进制代码的技术,在计算机系统中广泛应用。
目前,DBT 的实现主要有两种方式:JIT(Just-in-Time)编译和从解释执行。
JIT 编译是指在第一次遇到某段代码时将其翻译成可执行的机器码,之后再执行这段机器码。
而从解释执行则是执行一段代码时,通过解释器来进行翻译。
这两种方法在翻译二进制代码的性能和准确性方面有不同的表现。
目前,DBT 的优化研究主要包括以下方面:指令翻译技术、动态指令选择、动态指令调度、缓存管理等。
三、选题的研究内容和研究方法本课题旨在研究如何通过优化动态二进制翻译来提高计算机系统的性能。
具体研究内容包括以下几个方面:1、指令翻译技术。
研究如何构造更高效的指令翻译器,提高机器码的翻译效率和准确性,以及如何处理复杂指令。
2、动态指令选择。
研究如何在不同上下文中选择最优的指令,提高指令的执行效率。
3、动态指令调度。
研究如何根据指令之间的依赖关系来进行指令调度,避免指令执行时的冲突。
4、缓存管理。
研究如何利用缓存技术提高动态二进制翻译的效率和准确性。
本课题所使用的研究方法主要包括理论分析、仿真实验和实际测试三种。
在理论分析阶段,我们主要是根据相关的研究文献来进行模型的构建和理论推导,在仿真实验阶段,我们将根据理论分析的结果,使用相应的仿真工具来进行实验;在实际测试阶段,我们将设计相应的实验系统,通过实际测试来验证我们的理论分析和仿真实验结果。
块链优化技术在动态二进制翻译中的应用研究
基金项目:湖南省教育厅“静态二进制翻译中动态链接库函数的识别与恢复算法研究”(项目编号:13C623)。 作者简介:孙光辉 (1978—),男,湖北孝感人,硕士研究生,讲师。研究方向:嵌入式、单片机。
— 28 —
2019 年第 18 期
信息与电脑 China Computer & Communication
计算机工程应用技术
信息与电脑 China Computer & Communication
2019 年第 18 期
块链优化技术在动态二进制翻译中的应用研究
孙光辉 王丽娟 (湖南文理学院 计算机与电气工程学院,湖南 常德 415000)
摘 要:在动态二进制翻译系统中,指令的执行过程中通常会涉及频繁的上下文切换,很大程度上影响了 AB (Architecture Bridge)系统的执行效率。为此,笔者提出了一种块链优化技术,通过指令间的直接跳转,有效减少上 下文切换次数,对 AB 系统的翻译缓存进行优化,提高了动态二进制翻译系统中执行模块的时间占比。实验分析表明,块 链优化技术能提供 10% 左右的加速比。
1.1 块链结构
AB 系统基本块的结构如图 1 所示,包括 g_code_buffe(r 首 地址指针),code_num(基本块指令数)、real_add(r 物理地址)、 eip(虚地址)和 cs_base(基地址),最后保存源指令信息。 在查找基本块时,可以通过虚地址也可以通过物理地址实现, 若査找失败,可以将目标代码写入缓存,将首地址返回给首 地址指针,继续进行下一次查找,直至成功,则直接通过目 标代码首地址指针去执行。
Key words: dynamic binary translation; chain optimization; architecture bridge system; jump
二进制转英文在线翻译
二进制转英文在线翻译摘要:1.二进制与英文翻译的概述2.二进制转英文在线翻译的工具与方法3.常用二进制转英文翻译场景及实例4.在线翻译工具的优缺点对比5.提高二进制转英文翻译准确性的技巧正文:随着科技的飞速发展,二进制与英文之间的转换变得越来越普遍。
在日常生活中,我们可能会遇到许多需要将二进制转换为英文的场景,如计算机编程、网络通信等。
为了帮助大家更方便地进行二进制与英文之间的翻译,今天我们将介绍一些实用的二进制转英文在线翻译工具和方法。
一、二进制与英文翻译的概述二进制(Binary)是一种计算机中使用的数制,只由0和1两个数字组成。
英文(English)则是全球广泛使用的语言之一。
将二进制转换为英文,可以帮助我们更好地理解和交流计算机技术相关的内容。
二、二进制转英文在线翻译的工具与方法1.在线翻译平台:有许多专业的在线翻译平台可以实现二进制与英文之间的转换,如谷歌翻译、百度翻译等。
用户只需将二进制代码输入到平台上,点击翻译按钮,系统便会自动将二进制转换为英文。
2.编程语言库:部分编程语言库提供二进制与英文之间的转换功能,如Python、Java等。
开发者可以利用这些库在程序中实现二进制转英文的功能。
3.手动转换:对于简单的二进制代码,用户可以尝试手动转换为英文。
这种方法较为耗时,但对于学习者和研究者来说,可以加深对二进制和英文之间对应关系的理解。
三、常用二进制转英文翻译场景及实例1.计算机编程:程序员在编写代码时,需要将高级编程语言转换为底层的二进制指令。
此时,二进制与英文之间的转换显得尤为重要。
2.网络通信:在网络数据传输过程中,二进制代码承担着数据存储和传输的任务。
将二进制代码转换为英文,有助于分析网络数据包的内容。
3.密码学:加密算法中的密钥通常采用二进制表示。
将密钥转换为英文,有助于更好地理解和分析加密算法。
四、在线翻译工具的优缺点对比1.优点:在线翻译工具速度快、操作简便,适用于大规模的二进制代码转换。
二进制语言翻译
二进制语言翻译
二进制语言是一种用于计算机的低级语言,它使用0和1两个数字表示信息。
因此,二进制翻译通常是将二进制代码转化为人类可读的高级语言或指令。
二进制到高级语言的翻译可以通过反汇编器来完成。
反汇编器将二进制代码逐条翻译为相应的机器指令,并尽可能地还原为可读的汇编语言代码。
这样,程序员就可以理解和修改二进制代码。
另一方面,高级语言到二进制的翻译通常是编译器的工作。
编译器将高级语言代码翻译为可以在特定计算机体系结构上直接执行的二进制代码。
这个过程包括词法分析、语法分析、语义分析和代码生成等步骤。
总的来说,二进制语言翻译涉及将二进制代码转化为可读的高级语言或指令,或将高级语言代码翻译为可执行的二进制代码。
这是计算机软件开发中非常重要的一环。
优化动态二进制翻译器
DigitalBridge 由 5 个模块构成 分别是装入器 BT 控制 器 基本块信息管理器 翻译器和优化器 如图 1 所示 图 中深色框表示翻译好的代码区 实箭头代表控制转移 虚箭 头代表写入数据
文件装入及初始化
基本块信息管理
翻译器
BT 控制器
优化器
上下文切换
104
热路径上的标志位计算 分别是基于模式的指令组合翻译优 化和延迟标志位计算的优化 3.1 基于模式的指令组合优化翻译
实际上在初次翻译时就已经对标志位计算进行了优化 以基本块为单位 在进行指令选择之时 记录下该指令读写 标志位的需求 在指令选择完成之后 分析标志位的引用定 值关系 保留有效的标志位计算 即使这样必要的标志位计 算仍会造成巨大开销 在这些开销中有一部分可以通过指令 组合的优化翻译来省略掉 例如在编译生成 X86 代码时 通 常用(cmp|test)/jcc 指令组合来实现条件分支 先通过 cmp 或 者 test 指令将比较结果的标志记录在标志寄存器中 再用 jcc 指令根据相应的标志位值来判断是否跳转 (cmp|test)/jcc 构 成一个指令组合模式 如果不加优化 则这样的两条指令将 被翻译成 50~60 条指令 其中 40~50 条指令用于标志位计算 在仔细研究源与目标指令集的对应关系后不难发现 只要用 MIPS 指令对 set / branch 就可完成与(cmp|test)/jcc 模式相对应 的功能 从而使优化翻译后的指令减少到 15 条左右 统计 显示 程序动态执行中的控制转移平均 6 成以上是条件分支 仅(cmp|test)/jcc 组合的优化翻译就可显著提高系统性能 3.2 延迟标志位计算优化
103
器来等待目标的指派 而直接跳转到目标基本块的本地代码 入口 这种基本块连接是提高性能的有效手段之一
二进制翻译中代码Cache的分级双粒度管理策略
第2 4卷第6期
20 0 7年 6月
计 算 机 应 用 研 究
Ap l a in Re e r h o mp t r p i t s a c fCo u e s c o
Vo . 4 No 6 12 .
J n 2 o ue 07
大量牺牲 内存的方式来换取时间上的优势 , 是会 给硬 件的内 但 存 容量带来压力。尤其是那些嵌入式系统 中, 由于内存容量有 限 , 内存使用量的 限制非常严 格 。这种 策略并 不可取 , 对 不作 为 L C策略的实验对 比对象 。 R
() 2 全清空策略
行源体 系结构 的二进制 代码 , 收集 Po l信 息 ; rfe i 通过反 馈信息 对执行频度较 高的代码 采用 简单 高效的策略进行深度优化 , 得 到效率更 高的 目标机本地代码 。
etdL C Lvl einC uk ce et t a e o eccem ae et ce e tnertdtem d f h l ne R ( ee- go-h n )shm a sanw cd ah a gm n hm .I i g e e t ef l R h w n s t a h ot u
l h s h me I O s h me a d mu t l e c e n k t e o a d s aill ai n o e r lcn v r e d i o f s c e ,F F c e n l - v l a h ,a dto et mp r l n p ta c l ya d c d p a i go e h a t u ie c o h a o t e n
Байду номын сангаас
文章 编号 :10 .65 20 )600 .4 0 139 (0 7 0.320
【计算机应用】_二进制翻译_期刊发文热词逐年推荐_20140725
推荐指数 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2009年 序号 1 2 3 4
科研热词 超级块 数据预取 动态优化 二进制翻译
推荐指数 1 1 1 1
2010年 序号 1 2 3 4
科研热词 隐马尔可夫模型 热路径 动态优化 动态二进制翻译
推荐指数 1 1 1 1
2011年 序号 1 2 3 4 5 6 7 8
2011年 科研热词 动态二进制翻译 虚拟化 模拟器 寄存器映射 x86体系结构 qemu mips体系结构 dos系统 推荐指数 2 1 1 1 1 1 1 1
2012年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
2008年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
科研热词 动态二进制翻译 静态二进制翻译 系统库函数 粗粒度的先进先出 特殊库函数 替换算法 普通库函数 指令调度 寄存器分配 基于工作集的全清空 回调函数 可执行链接格式文件 动态优化 列表调度 冗余删除 二进制翻译 tcache
科研热词 软件移植 虚拟机 二进制翻译 进程虚拟机 软件可移植性 虚拟化 流模式提取 指令集体系结构 应用程序二进制接口 动态优化 动态二进制翻译 冗余指令消除 全清空 先进先出 二进制程序 二进制移植 tcache gpu
推荐指数 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2013年 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14
科研热词 龙芯3a 路径调度 语义提取 翻译块 移植 微代码生成 并行化 多核 原子指令 动态符号执行 动态二进制翻译 优化 二进制程序缺陷发现 1 1 1 1 1 1
二进制翻译中的库函数识别技术研究
A s at Anwp cs r r ic rps gi ati f a e l e , ne t o ̄ rao e e bt c e oe o a hete oe sn c s t st r dv o r h drh pp az i ot w r : r s c t u s i f n rko ow e e p s i e i i tn fh n
( eatetfC m e r c nead Tcnl y I o m tnadE gne n nvrt hnzo ea 50 2 C i ) D pr n o p e i c n ehoo ,n r ai n n ie i U i sy m o Se g f o rg e i,Z egh uH n n4 00 , hn a
就更为突出。
比如是从第三方购买或源代码已经丢失 , 二进制翻译的意义 及 Cm a 公 司的 Tne o pq adm等 。以上 翻译 器均 为定 源定 目标
Ap .2 0 r 06
二进 制翻 译 中 的库 函数 识别 技 术 研 究
齐 宁, 付 文 , 荣彩 赵
( 信息工程学院 计算机科学与技术 系, 河南 郑州 4 00 ) 502
( inn @ 13 cr) q— ig 6 .o n
摘 要: 系结构的不断发展给软件开发者带来了巨大的风险, 体 造成 了新体 系结构推广的困难, 而二进制翻译技术使得可执行代码可 自 动迁移到新的体 系结构。介绍 了 开发一个静 态二进制翻译 在 系统 (2 IA翻 译 系统 ) 中的库 函数 识 别技 术 , 提 出 了解决 库 函数 识 别 问题 的新 的 方 法 。基 于 I-4 并 A6 体 系结构的调用约定及 实例分析证 明, 该方法是一种 简单实用的库 函数识别方法 , I 系统验证是 经 2 A 有效的 。 关键词: 库函数 ; 二进制翻译; 过程恢复 ; 6 ; I 4 调用约定 A一 中图分类号 : P 1 .4 T 3 15 文献标识码: A
MIPS安卓平台上ARM二进制翻译系统
doi:10.3772/j.issn.1002-0470.2021.01.004MIPS安卓平台上ARM二进制翻译系统①赵保华②……杯安宁饪③*…**徐哲冲**杜安利**苏涛“「北京工业大学信息学部北京100124)("全球能源互联网研究院有限公司北京102209)(”"电力系统人工智能(联研院)国家电网公司联合实验室北京102209)(**“龙芯中科技术有限公司北京100095)摘要无内部互锁流水级的微处理器(MIPS)是重要的处理器架构,安卓是目前主流的移动终端操作系统。
在MIPS架构处理器上运行安卓操作系统可以有效拓展使用领域,但存在的问题是调用高级精简指令集处理器(ARM)架构本地库的安卓应用程序不能运行,即存在应用不兼容问题。
本文提出了一种动态库跨平台二进制兼容模型,以及通用的跨平台二进制翻译系统的架构,并在MIPS安卓平台上设计实现了ARM二进制翻译系统。
该系统能够进行ARM动态库的跨平台加载,并采用动态二进制翻译,将ARM动态库中的二进制指令翻译成为MIPS架构的二进制指令,从而能够在MIPS架构处理器上执行。
实验结果表明,该系统可以运行调用ARM本地库的安卓应用程序,解决了MIPS平台安卓应用的兼容性问题。
本文工作对跨平台二进制翻译系统的研究具有重要参考价值。
关键词二进制翻译;无内部互锁流水级的微处理器(MIPS);高级精简指令集处理器(ARM);Android0引言无内部互锁流水级的微处理器(microprocessor without interlocked piped stages,MIPS)架构是1981年由斯坦福大学开发的简洁、具有高度可拓展性的精简指令集计算机(reduced instruction set computer, RISC)架构,MIPS公司的R系列处理器就是在这个架构的基础上研制岀来的微处理器。
MIPS架构处理器被广泛应用于游戏机、机顶盒、网络路由器,以及其他嵌入式设备和通设备中。
反编译中用户函数与库函数同名的区分技术研究
s me n me wih s me lb a y f c i n.Ba e n t or g y a a y i g t e s ns e us d b h a a t o i r r un to s d o h ou hl n l zn he r a o a e y t e
a t o s flysu yt eo g n zn ta e yo u h r u l t d h r a iigsr tg f ELF—4o j c i n h r igp l yo o i— — be t l a d t ewo k n o i fc mpl 6 fe c —
e s a i k r o de li.Th n a l o ih i r s n e o s v h o e l d b s rf ne r nd ln e s t a t e n a g rt m s p e e t d t ol e t e pr blm e y u e u — to ih h st a a t i a y f c i n,a tflst a fd c m p lto i a y i n wh c a hes me n me wih lbr r un to nd i il heg p o e o ia i n orb n r t a l to n t sa p c . r nsa i n i hi s e t
关键 词 反 编译 ; A 6 ; L 6 ; 态链 接 ; 户 函数 , 函数 , I 一4 E F 4 动 用 库 同名
TP3 1 1 DOI号 :1 . 7 4 S J 1 1 . 0 1 0 7 8 0 3 2 / P. . 0 6 2 1 . 0 3
中 图法 分 类 号
S u y o e nd Li r r n to si g ih n c n l g n De o t d f Us r a b a y Fu c insDitn u s i g Te h o o y i c mpi to l in a
用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装
专利名称:用于程序代码转换期间的本机代码和目标代码的组合执行的方法及装置
专利类型:发明专利
发明人:乔纳森·杰·安德鲁斯,杰拉恩特·诺森
申请号:CN200680019817.7
申请日:20060526
公开号:CN101189578A
公开日:
20080528
专利内容由知识产权出版社提供
摘要:在程序代码转换(特别是动态二进制翻译)中,主题代码(17)通过翻译器(19)被翻译为目标代码(21),以在目标处理器(13)上执行。
目标代码的选定部分(例如,库函数SFuncA(172))被执行本机代码的一部分(例如本机函数NFuncA(282))所替代。
本机函数对于目标处理器是本机特有的。
该方法还包括执行主题代码部分(例如,主题函数SFuncB(173))以替代本机代码部分(例如,库函数NFuncB(283))。
反向绑定技术以本机代码的选定部分(特别是本机库函数)替代主题代码,以在该翻译器(19)内保持控制。
这有助于维持该翻译器(19)中的准确主题状态,还具有其它优点。
申请人:特兰斯蒂有限公司
地址:英国伦敦
国籍:GB
代理机构:北京铭硕知识产权代理有限公司
更多信息请下载全文后查看。
undefinedsymbol问题解决记录
undefinedsymbol问题解决记录历经⼀个⽉,昨⽇完成打印机network部分的编写(c语⾔),编写makefile构建动态库。
构建完成后遂进⾏调⽤测试,出现:./network: symbol lookup error: /usr/lib64/netPrnctl.so: undefined symbol: cupsGetDests将解决⽅法与过程记录,以便⽇后查阅。
查找与分析原因在编译时未出现问题,没有报错,成功编译⽣成动态库。
以下为编译的makefile⽂件。
############################################################ File: netPrnctl.so Makefile# Author: Neko###########################################################CC = gccCFLAGS = -Wall -g -fPICINCLUDE = -I./inc -I../ -I../cups -I../backend -I/usr/include/libusb-1.0TARGET = netPrnctl.sovpath % .h ./incOBJS = public.o prnctlAvision.o prnctlNetwork.o prnctl.oSRCS = ./src/public.c ./src/prnctlAvision.c ./src/prnctlNetwork.c ./src/prnctl.c$(OBJS):$(SRCS)$(CC) $(CFLAGS) $(INCLUDE) -c $^all:$(OBJS)$(CC) -shared -fPIC -o $(TARGET) $(OBJS) -pthreadcp $(TARGET) /usr/bincp $(TARGET) /usr/lib64clean:rm -f *.orm -f netPrnctl.so虽成功⽣成了动态库,但是在调⽤时却出现找不到符号的问题,于是使⽤ ldd -r 查看neko@neko:~/ZCPrinterDevice/NetworkSetupTool/filter$ ldd -r /usr/lib64/netPrnctl.solinux-vdso.so.1 (0x00007ffeef44c000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9607add000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f96076ec000)/lib64/ld-linux-x86-64.so.2 (0x00007f9607f0f000)undefined symbol: libusb_open (/usr/lib64/netPrnctl.so)undefined symbol: cupsArrayNew (/usr/lib64/netPrnctl.so)undefined symbol: cupsDirOpen (/usr/lib64/netPrnctl.so)undefined symbol: ppdFindAttr (/usr/lib64/netPrnctl.so)undefined symbol: cupsParseOptions (/usr/lib64/netPrnctl.so)undefined symbol: cupsGetPPD (/usr/lib64/netPrnctl.so)undefined symbol: libusb_set_interface_alt_setting (/usr/lib64/netPrnctl.so)undefined symbol: libusb_release_interface (/usr/lib64/netPrnctl.so)undefined symbol: ppdClose (/usr/lib64/netPrnctl.so)undefined symbol: cupsGetOption (/usr/lib64/netPrnctl.so)undefined symbol: libusb_detach_kernel_driver (/usr/lib64/netPrnctl.so)undefined symbol: libusb_close (/usr/lib64/netPrnctl.so)undefined symbol: cupsFreeOptions (/usr/lib64/netPrnctl.so)undefined symbol: cupsDirClose (/usr/lib64/netPrnctl.so)undefined symbol: libusb_get_string_descriptor_ascii (/usr/lib64/netPrnctl.so)undefined symbol: libusb_free_config_descriptor (/usr/lib64/netPrnctl.so)undefined symbol: libusb_get_config_descriptor (/usr/lib64/netPrnctl.so)undefined symbol: cupsBackChannelWrite (/usr/lib64/netPrnctl.so)undefined symbol: _cupsGet1284Values (/usr/lib64/netPrnctl.so)undefined symbol: _ppdNormalizeMakeAndModel (/usr/lib64/netPrnctl.so)undefined symbol: libusb_attach_kernel_driver (/usr/lib64/netPrnctl.so)undefined symbol: libusb_get_device_list (/usr/lib64/netPrnctl.so)undefined symbol: libusb_kernel_driver_active (/usr/lib64/netPrnctl.so)undefined symbol: _cups_strcasecmp (/usr/lib64/netPrnctl.so)undefined symbol: libusb_bulk_transfer (/usr/lib64/netPrnctl.so)undefined symbol: _cupsLangPrintFilter (/usr/lib64/netPrnctl.so)undefined symbol: cupsSideChannelRead (/usr/lib64/netPrnctl.so)undefined symbol: cupsArrayCount (/usr/lib64/netPrnctl.so)undefined symbol: cupsFileClose (/usr/lib64/netPrnctl.so)undefined symbol: cupsDirRead (/usr/lib64/netPrnctl.so)undefined symbol: libusb_set_configuration (/usr/lib64/netPrnctl.so)undefined symbol: cupsFreeDests (/usr/lib64/netPrnctl.so)undefined symbol: libusb_open_device_with_vid_pid (/usr/lib64/netPrnctl.so)undefined symbol: libusb_reset_device (/usr/lib64/netPrnctl.so)undefined symbol: libusb_exit (/usr/lib64/netPrnctl.so)undefined symbol: ppdOpenFile (/usr/lib64/netPrnctl.so)undefined symbol: libusb_init (/usr/lib64/netPrnctl.so)undefined symbol: libusb_get_device_descriptor (/usr/lib64/netPrnctl.so)undefined symbol: cupsBackendReport (/usr/lib64/netPrnctl.so)undefined symbol: libusb_free_device_list (/usr/lib64/netPrnctl.so)undefined symbol: libusb_claim_interface (/usr/lib64/netPrnctl.so)undefined symbol: cupsFileOpen (/usr/lib64/netPrnctl.so)undefined symbol: libusb_control_transfer (/usr/lib64/netPrnctl.so)undefined symbol: cupsFileGets (/usr/lib64/netPrnctl.so)undefined symbol: cupsArrayAdd (/usr/lib64/netPrnctl.so)undefined symbol: backendGetMakeModel (/usr/lib64/netPrnctl.so)undefined symbol: cupsArrayFind (/usr/lib64/netPrnctl.so)undefined symbol: _cups_strlcpy (/usr/lib64/netPrnctl.so)undefined symbol: cupsGetDests (/usr/lib64/netPrnctl.so)undefined symbol: cupsSideChannelWrite (/usr/lib64/netPrnctl.so)undefined symbol: httpAssembleURIf (/usr/lib64/netPrnctl.so)发现动态库没有链接libusb 与 libcups 两个库,所以netPrnctl.so⽤到的这两个的函数都没有符号。
动态二进制翻译的库函数包装自动化
动态二进制翻译的库函数包装自动化梁英超;尚云海;李春强【摘要】库函数包装是在动态二进制翻译过程中将源二进制程序的库函数调用直接转嫁到目标机上的库函数调用,以此提高动态二进制翻译系统的性能。
针对目前动主流的库函数手动包装技术,提出一种基于 GCC 的动态二进制翻译中库函数的自动包装技术,无需对库函数分别进行人工包装,节省了大量的工作,同时也降低了包装过程中出错的可能性。
实验结果表明,通过库函数自动包装技术,动态二进制翻译器 qemu 的性能有了3%~5%的提升。
%Library function packaging is to directly transfer the library function calling of the source binary program onto that of the target machine in the process of dynamic binary translation.In order to improve translation performance,in this paper we propose a GCC-based automatic packaging technology for library function in dynamic binary translation.This method does not need separate manual packing of the library functions so that saves a lot of works,and meanwhile reduces the chance of error making in packing process aswell.Experimental results demonstrate that the performance of dynamic binary translator qemu improves 3% ~5% through library function automatic packing technology.【期刊名称】《计算机应用与软件》【年(卷),期】2015(000)006【总页数】3页(P14-16)【关键词】动态二进制翻译;GCC;库函数;包装自动化;QEMU【作者】梁英超;尚云海;李春强【作者单位】浙江大学超大规模集成电路设计研究所浙江杭州 310000;浙江大学超大规模集成电路设计研究所浙江杭州 310000;浙江大学超大规模集成电路设计研究所浙江杭州 310000【正文语种】中文【中图分类】TP311.1动态二进制翻译DBT(Dynamic Binary Translation)是近几年非常流行的一种二进制翻译技术,指的是在程序运行时动态地将源体系结构二进制代码翻译成目标机二进制代码的技术,它克服了静态翻译的无法处理间接跳转指令、自修改代码问题和需要用户参与等缺点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中图法分类号 ,-($A
二进制翻译技术是目前解决软件移植问题的一 个研究热点,能将现有的软件移植到新开发的处理 器上执行,其目的不仅仅是仿真源指令集体系结构 (H2;810<8H/2;9831<=H89<8019,!"X),更高的目标是翻 译产生的代码在目标!"X 上运行的速度等同甚至 超过源!"X 上的原有代码I
译器,结合了解释执行和静态翻译两种翻译模式,能
将运行在(?CD,E,0F:)系统下的应用程序运行在 ($+<3&,E,0F:)下!它主要是用内存模拟 ?CD上的
堆 栈 及 其 参 数 压 栈 和 取 返 回 值 的 行 为,对 大 约
GAHHH个 E,0@A$9"进行包装,一些包装还要对被 调用程序语义进行修改,同时也对 8IJ 组件进行 了包装!
K,0*.&02[@]是应用级动态二进制翻译器! 主要 是对系统调用进行包装!用内存模拟源机器的参数 传递行为,并且还要消除源与目标机器在系统调用
上的语义差 别! 因 为 处 理 系 统 调 用,因 此 相 比 处 理 库函数减少了很多工作量,但是也因此降低了性能!
LB#:[M]和 NO[M]是 ;B8 开发的两个二进制翻 译器,目的是为了使已有的 L$?和 J"9#代码能够 在新的 $+<3&$?9机器上运行!翻译界面定在需要 翻译的主文件和系统库之间,模拟源二进制程序所
TU;K:[D]和 E&+(&-45*[V]分 别 是 U5))02+&01 大学和#50公司开发的可变源和可变目标的动态二 进制翻译器!TU;K: 是对库函数进行包装来处理 系统库函数调用,对一些特殊的库函数要手写修改
包装! E&+(&-45*是对系统调用进行包装处理,这样 避免很多特殊库函数的手写工作!
:.&02,*,W)公司推出的商用化产品 U5,’(:.&02,*, 也是采用可变源和可变目标的二进制翻译技术,这
个公司直到今天仍然致力于二进制翻译技术的研究,
具体的 相 关 信 息 可 以 参 看 公 司 的 主 页 3**<:!!RRRX *.&02,*,W)2X’4N!!
" 背景知识介绍
由于不同"#$ 系统平台的对齐方式存在差异 以及翻译界面的定制问题,将引起很多难以处理的
法67;(%&’()*+,-.&./1,2<42,0=)和 #87;(234.*’5* +,-.&./1,2<42,0=)分别处理,消除不同"#$ 之间库函 数调用的差异性,同时兼顾执行速度和管理维护的
便捷性!
! 相关工作
二进制翻译系统处理库函数调用所采用的方法
与各自系统的特点有关! >?!@A[A]是 ;B8 研发的轮廓制导的二进制翻
# 库函数处理算法设计
首先介绍两个在算法中使用的定义定义$" 可包装库函数-如果某个库函数没有 同名全局变量多副本和结构变量对齐差异这两类问 题,那么可以调用目标机本地的库函数,不会因为翻 译过程 链 接 表(89#:(;49("23<%!()%$"(,=1,)、动 态 链接器、库函数的源二进制代码造成代码膨胀导致 的性能损失定义!"=1, 短 路 库 函 数- 有 些 库 函 数 在 静 态 阶段已经翻译过,动态阶段可以直接跳入静态本地 码中,不需要翻译执行 =1, 和动态链接器,相当于 把动态链接在某种程度上还原回静态链接,也避免 了因为翻译 =1,、动态链接器而造成的性能损失有些库函数虽然在初始的静态阶段没有被翻译,但 可以采用回填的方法在库函数代码被翻译之后填写 目标地址,这种情况也可以认为是 =1, 短路库函 数,在后面的算法设计中有讲解#"$ %&’(&算法概述 目前库函数处理的方法主要有两种:一种是对 本地库函数的包装[6,>,?],在目标机上模拟源机器的 传递参数万和方返数回据值的行为,通过包装与本地库函数
收稿日期:’%%CD$’D%’;修回日期:’%%BD%(D’)
基金项目:万国方家自数然据科学基金项目(B%A%(%$+)
基于软件的二进制翻译分为动态和静态两种翻 译形式[$],动态翻译对于间接指令可以知道实际的
跳转目标,而静态翻译可以利用传统静态编译优化
方法I动静结合二进制翻译技术综合了两者的优点, 优 化 以 静 态 为 主,避 免 动 态 优 化 本 身 的 时 间 消 耗I 动态通过翻译执行本地码,把静态不能识别的间接
(!"#$%$&$’()*(+,&$%"-.’/0"(1(-2,*0%"’#’3/45’+2()6/%’"/’#,7’%8%"-$%%%E%)
1#.+$%*+ ?H;7/;H2G8=94HN131F502<8H/2;<34453;832>955H<H9284FH;32H67/183287915/1632<9H;;09H28=9 NH231F8132;438H/289<=2/4/GFI P2934G/1H8=6 2369>.Q"*Q(R3<S984HN131F32>;=/18<084HN131F)H; 719;9289>8/>H;7/;98=94HN131F502<8H/2;<43;;H5H9>,T=H<=H;N3;9>/28=9>F236H<NH231F8132;438/1 H289G1389>TH8=;838H<719&8132;438/1I.Q"*Q<32 63S90;9/58=9 691H8/5>F236H<8132;438H/232>;838H< 8132;438H/2,32> 63S90;9/58=9</2@928H/2/58=9502<8H/2<344/28=9831G9871/<9;;/18/19>0<98=9 19>02>328696/1F3<<9;;I,=9;963S9H86/19955H<H9288=388=9/1HGH234NH231F</>9102;/28=9831G98 71/<9;;/1I ,=934G/1H8=6 <32549UHN4F;TH8<=N98T9928=94HN131F502<8H/232>;F;896 <344,32>=3@9 3774H<3NH4H8F5/18=94HN131F502<8H/2I ,=934G/1H8=6H;@91H5H9>H28=9NH231F8132;438/1;F;896—>HGH834 N1H>G9@91;H/2’I!8<32>H;7/;98=94HN131F502<8H/2<344;0<<9;;5044F32>955H<H9284F,32>H8;7915/1632<9=3; N992H671/@9>G19384FI
计算机研究与发展
!""#$%%%&$’()!*#$$&$+++!,-
./01234/5*/670891:9;931<=32>?9@94/76928
A(($’):’$+A"’$+),’%%B
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
在机器的函数调用约定,对本地库函数进行自动包
装处理,但一些特殊的库函数包装要手写,修改执行 语义来消万除方源数与据目标机器平台的差异!
"$P@ABO)’5*,407&/).[Q]是"0*)+公司开发的动 态二进制翻译器,能够把应用级的,&@A程序翻译到 ,&DM体系结构上,没有跨操作系统,能在 E,014R2 和 7,05O上运行!为了能够在多平台上运行,"$P@A B7主要由两个模块搭建而成,操作系统无关的模块 K:S)0).,’,存放系统调用包装的模块 K:7,-,这两 个模块之间通过约定好的 $9"进行通信!
问题,在论述算法之前将介绍处理过程中遇到的问
题和翻译界面的定制! "#! 处理库函数调用过程中遇到的问题
二进制翻译在处理库函数调用过程中,主要有
两个问题比较难以处理:
G)结构变量对齐问题!由于不同"#$ 系统平台 对于某些数据类型的对齐方式可能不同,因此一个
结构变量的某些域变量相对于结构变量起始存储位
杨 浩等:二进制翻译中的库函数处理
AGVQ
入口点传给静态帮助其扩大翻译优化的范围!经过 动静多遍迭代,最后几乎所有的本地代码都由静态
翻译产生! 二进制翻译中一类较重要的问题就是处理源二
进制代码中出现的库函数调用!不同"#$ 系统平台 上传递参数和返回值的方式有较大的差异,为了消
除这种差异必然会带来执行效率的下降!由于编程 上的模块化和代码重用思想,二进制代码中会较为
二进制翻译中的库函数处理
杨 浩 唐 锋 谢海斌 武成岗 冯晓兵
(中国科学院计算技术研究所 北京 $%%%E%) (F32G=3/$$%’#H<8I3<I<2)
!"#$%$&’()*+",)-"./,.")01//$,%*2")3")%$&4$%).5%+",)