CN1892602A - 一种二进制翻译中库函数调用的处理方法 - Google Patents
一种二进制翻译中库函数调用的处理方法 Download PDFInfo
- Publication number
- CN1892602A CN1892602A CN 200510080339 CN200510080339A CN1892602A CN 1892602 A CN1892602 A CN 1892602A CN 200510080339 CN200510080339 CN 200510080339 CN 200510080339 A CN200510080339 A CN 200510080339A CN 1892602 A CN1892602 A CN 1892602A
- Authority
- CN
- China
- Prior art keywords
- function
- built
- carry out
- call
- translation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种二进制翻译中库函数调用的处理方法,尽可能地对源X86二进制程序中的库函数调用进行识别和提升;对于可包装库函数,用目标机本地的约定进行传参和返回值处理,这样省去了对X86参数压栈和从堆栈中取返回值的模拟,避免了频繁的内存操作,使用本地的库函数,也不会因为翻译PLT、fixup函数、库函数的源二进制代码造成代码膨胀导致的性能损失,提高了程序执行的效率;对于PLT短路库函数,虽然继续维护X86模拟堆栈,但是控制流不进入PLT和动态链接器的fixup函数,即不翻译PLT和动态链接器的fixup函数的源二进制代码,避免了因为翻译PLT、fixup函数造成代码膨胀导致的性能损失,控制流直接进入库函数的本地码,也能够较好地提高程序执行的效率。
Description
技术领域
本发明涉及计算机领域的二进制翻译技术,尤其涉及动静结合方式下二进制翻译中对库函数调用的处理方法。
背景技术
二进制翻译技术是目前解决软件移植问题的一个研究热点,能将现有的软件移植到新开发的处理器上执行,使新处理器摆脱向前兼容的约束,对促进处理器体系结构的发展和国产微处理器的推广具有重要意义。
在介绍本发明之前,首先简要讲解本发明所涉及的一些背景技术,主要包括:动静结合二进制翻译***的特点;被执行程序与***之间的翻译界面定在***调用一级的原因;过程链接表(Procedure Linkage Table以下简称PLT)和全局偏移表(Global Offset Table以下简称GOT)的工作原理;以及X86和MIPS在进行函数调用时参数和返回值的传递方法。
动静结合二进制翻译***综合了动态和静态二进制翻译***的优点。优化以静态为主,利用传统的静态编译优化方法对翻译出来的本地码进行深度优化,避免动态优化的时间消耗,我们称静态模块翻译出来的目标机本地代码为静态本地码。动态模块把静态本地码装入内存执行,并且翻译静态模块不能翻译的源二进制代码,把间接跳转和间接调用的目标传给静态模块帮助其进一步扩大翻译优化的范围。经过几遍动静结合的迭代翻译之后,能够得到质量较好的本地码。
被执行程序与***之间的翻译界面定在***调用一级而不是定在主文件和共享库之间的原因主要有两点:(1)可能造成全局变量在不同的文件中有多个副本,不便于管理;(2)对于结构变量,由于源与目标机器对齐方式不同,占用空间可能不同,可能造成目标机本地的库函数对X86的结构变量的引用错误。
GOT(全局偏移表)与PLT(过程链接表)是ELF(可执行和可链接格式)文件提供的处理库函数动态链接的标准结构。GOT的作用是记录一个文件中调用的库函数的地址,这个地址在发生库函数调用时由动态链接器填写。PLT包括两部分,所有库函数公用的PLT表项(PLT0),以及每个库函数自己的PLT表项(PLTi,i=1,2,…)。调用库函数时,控制转入库函数对应的PLTi中,然后间接跳转到PLT0中,PLT0调用动态链接器的fixup函数,再由fixup执行要调用的库函数并且填写GOT。以后再调用这个库函数时,就依照GOT中的地址把控制转移到库函数。PLT的伪代码如图1所示。
X86/Linux***的参数传递是采用堆栈形式进行的。主调函数(Caller)把参数存入堆栈中,被调函数(Callee)从堆栈中取出参数,参与相应的操作。返回值的传递方式分情况处理,对于单一数据,通过eax寄存器或者浮点寄存器ST(0)传递;若是结构类型,传参时将返回值地址作为参数压栈,Callee将返回值存入参数指定的地址完成传递工作。MIPS/Linux***的传参和传返回值比较复杂,采用堆栈和寄存器结合的形式。传参方式对整数和浮点数区分处理,提供了4个整型寄存器($4-$7)和4个浮点寄存器($f12-$f15)用于传参,当寄存器不够用时借助堆栈。传递返回值的方式类似于传参方式,有专门的返回寄存器,当返回值超过返回寄存器的存储限制,则借助堆栈传送。
通过对背景知识的分析我们知道,由于翻译界面定在***调用一级,源机器的库函数代码也是被翻译的对象。由于采用动静结合的二进制翻译方式,可以事先对源机器共享库的库函数代码进行静态翻译,把静态本地码存在磁盘上,动态模块把需要的共享库的本地码装入内存。
目前二进制翻译中对库函数调用的处理方法主要有两种:一种方法是对本地库函数的简单包装,这种方法主要应用在翻译界面定在主文件和共享库之间的情况,具体就是在目标机上用内存模拟X86的堆栈及其参数压栈和取返回值的行为,通过包装的方法与本地的库函数之间传递参数和返回值,但是存在前面所述的多个副本以及对齐方式的问题;另一种方法是在目标机上模拟X86的动态链接机制以及参数和返回值传递约定,这种方法主要应用在翻译界面定在***调用一级的情况。具体就是在目标机上用内存模拟X86的堆栈及其参数压栈和取返回值的行为,按照X86处理动态链接的执行流程,把PLT、fixup函数、库函数的源二进制代码都进行翻译执行。由于翻译会造成代码膨胀,因此会造成执行效率的下降。
发明内容
本发明的目的是针对现有技术存在的缺陷,消除由于全局变量多个副本以及结构变量对齐方式差异带来的问题,提高二进制翻译中对库函数调用处理的效率。
为了达到上述目的,本发明提供了一种二进制翻译中库函数调用的处理方法,包括以下步骤:
a.建立库函数分类查询表;
b.利用动静结合二进制翻译***中的静态模块对主文件和它涉及的共享库中的库函数进行翻译;
c.在控制转移到动态翻译之前,把静态翻译好的本地码装入内存,这部分本地码包括被执行主文件和共享库中的库函数两部分;
d.在目标机中用内存模拟X86的寄存器和堆栈;具体定义如图2所示;
e.依次对X86二进制程序中的每个基本块进行处理,取X86二进制程序中的第一个基本块;
f.判别基本块的结束指令的指令类型是否为CALL指令,如果是,则进行步骤g,如果否,则进行步骤h;
g.调用CALL指令处理模块处理CALL指令;
h.判断是否所有的基本块都处理了?如果是,则结束;如果否,则进行步骤i;
i.取下一个基本块,然后进行步骤f。
在上述方案中,可包装库函数是一种库函数,没有全局变量多个副本和结构变量对齐方式差异,可以调用本地的库函数。
在上述方案中,PLT短路库函数是一种库函数,其本地码在静态模块已经翻译过,动态模块直接跳入静态本地码中,不需要翻译执行PLT和fixup函数。
在上述方案中,包含以下步骤:
f1)判断CALL的目标是否为库函数?,如果是,则进行步骤f2,如果否,则进行步骤f8;
f2)查询库函数分类表;
f3)判断是否是可包装库函数,如果是,进行步骤f4,如果否,进行步骤f5;
f4)进行可包装库函数处理;
f5)判断是否是PLT短路库函数?,如果是,进行步骤f6,如果否,进行步骤f7:
f6)进行PLT短路库函数处理;
f7)在目标机上模拟X86的参数和返回值传递约定,按照X86处理动态链接的执行流程,把PLT、fixup函数、库函数的源二进制代码都进行翻译执行;
f8)模拟X86传参和返回值约定的方法对这种主文件内部的普通函数调用进行处理。
在上述方案中,在步骤f4中,包含以下子步骤:
f41)根据相应库函数的行参说明,在本基本块内往前找压参数的语句;
f42)判断是否查找成功?如果是,则进行步骤f43,如果否,则进行步骤f44;
f43)删除本基本块内找到的那些压参数指令翻译后对应的本地码,并形成如下本地代码:将这些参数按照目标机传参约定放入到相应的寄存器和堆栈中;X86模拟寄存器ESP=X86模拟寄存器ESP-所有参数总大小;调用本地库函数;按照目标机传返回值约定取出返回值,然后按照X86约定放入到X86模拟寄存器或内存中;
f44)在目标机上模拟X86的参数和返回值传递约定,调用包装的本地库函数完成库函数调用的处理。
在上述方案中,在步骤f6中,包含以下子步骤:
f61)在静态部分提供的本地码和动态部分翻译的本地码中查找当前要处理的库函数的本地码;
f62)判断是否查找成功?,如果是,进行步骤f63,如果否,进行步骤f64;
f63)把调用库函数的CALL指令翻译成如下的本地代码:跳转到库函数本地码在内存中存放的地址,并且把返回地址放入约定好的寄存器中;
f64)生成跳转目标是空的转移指令,并做好标记,同时把返回地址放入约定好的寄存器中,当把库函数的本地码装入内存或者翻译之后,再把本地码的存放地址填入跳转指令中。
因此,本发明尽可能地对源X86二进制程序中的库函数调用进行识别和提升;对于可包装库函数,用目标机本地的约定进行传参和返回值处理,这样省去了对X86参数压栈和从堆栈中取返回值的模拟,避免了频繁的内存操作,使用本地的库函数,也不会因为翻译PLT、fixup函数、库函数的源二进制代码造成代码膨胀导致的性能损失,提高了程序执行的效率;对于PLT短路库函数,虽然继续维护X86模拟堆栈,但是控制流不进入PLT和动态链接器的fixup函数,即不翻译PLT和动态链接器的fixup函数的源二进制代码,避免了因为翻译PLT、fixup函数造成代码膨胀导致的性能损失,控制流直接进入库函数的本地码,也能够较好地提高程序执行的效率。
综上所述,本发明中对可包装库函数的处理带来的性能上的提高强于对PLT短路库函数的处理,但是对于库函数不具有普适性,不是所有的库函数都是可包装库函数;PLT短路库函数虽然不如可包装库函数对性能提高的贡献大,但是具有较强的普适性。但总的来说,两种情况的处理都具有较好的效率。
附图说明
图1是现有技术中PLT的伪代码(摘自ELF手册)示意图;
图2是现有技术中目标机中用内存模拟X86的寄存器和堆栈示意图;
图3是本发明中一种二进制翻译中库函数调用的处理方法的流程图;
图4是本发明中对CALL指令的处理方法流程图;
图5是本发明中对可包装库函数的处理方法流程图;
图6是本发明中对PLT短路库函数的处理方法流程图。
具体实施方式
在本发明中,定义两个术语:可包装库函数和PLT短路库函数。如果某个库函数没有全局变量多个副本和结构变量对齐方式差异这两种问题,那么可以调用本地的库函数,这样就不会因为翻译PLT、fixup函数、库函数的源二进制代码造成代码膨胀导致的性能损失,本发明中称这类库函数为可包装库函数;有些库函数的本地码在静态模块已经翻译过,动态模块可以直接跳入静态本地码中,不需要翻译执行PLT和fixup函数,相当于把动态链接在某种程度上还原回静态链接,也避免了因为翻译PLT、fixup函数造成的性能损失,本发明中称这类库函数为PLT短路库函数。
本发明提出了一种二进制翻译中库函数调用的处理方法,对于可包装库函数和PLT短路库函数分别处理,同时在处理之前建立库函数分类查询表来区分可包装库函数和PLT短路库函数,以便对每个库函数分类处理,若某个库函数不在分类查询表中,则采取在目标机上模拟X86的动态链接机制以及参数和返回值传递约定的方法处理。
本发明建立在如下三个基本的原则上:一是尽可能地识别和提升原X86二进制程序的库函数调用;二是对可包装库函数尽可能地避免在处理库函数调用时模拟X86的堆栈,而是用目标机本地函数调用约定来处理库函数调用,从而提高翻译出来的本地码的执行效率;三是对于PLT短路库函数尽可能地利用已经翻译好的本地码,尤其是静态模块翻译的质量较高的本地码,尽可能地避免翻译PLT和动态链接器的X86代码,从而提高翻译出来的本地码的执行效率。
下面参照附图详细说明本发明的技术方案。
如图3所示,一种二进制翻译中库函数调用的处理方法包括以下步骤:
步骤1,首先,建立库函数分类查询表;
动静结合二进制翻译***中的静态模块和动态模块都要参照这个表;
步骤2,利用动静结合二进制翻译***中的静态模块对主文件和它涉及的共享库中的库函数进行翻译;
步骤3,在控制转移到动态翻译之前,把静态翻译好的本地码装入内存,这部分本地码包括被执行主文件和共享库中的库函数两部分;
步骤4,在目标机中用内存模拟X86的寄存器和堆栈;具体定义如图2所示;
步骤5,依次对X86二进制程序中的每个基本块进行处理,取X86二进制程序中的第一个基本块;
步骤6,判别基本块的结束指令的指令类型是否为CALL指令,如果是,则进行步骤7,如果否,则进行步骤8;
步骤7,调用CALL指令处理模块处理CALL指令;
步骤8,判断是否所有的基本块都处理了?如果是,则结束;如果否,则进行步骤9;
步骤9,取下一个基本块,然后进行步骤6。
如图4所示,在步骤6中,包含以下步骤:
步骤61,判断CALL的目标是否为库函数?,如果是,则进行步骤62,如果否,则进行步骤68;
步骤62,查询库函数分类表;
步骤63,判断是否是可包装库函数,如果是,进行步骤64,如果否,进行步骤65;
步骤64,进行可包装库函数处理;
步骤65,判断是否是PLT短路库函数?,如果是,进行步骤66,如果否,进行步骤67;
步骤66,进行PLT短路库函数处理;
步骤67,在目标机上模拟X86的参数和返回值传递约定,按照X86处理动态链接的执行流程,把PLT、fixup函数、库函数的源二进制代码都进行翻译执行;
步骤68,模拟X86传参和返回值约定的方法对这种主文件内部的普通函数调用进行处理。
如图5所示,在步骤64中,包含以下子步骤:
步骤400,根据相应库函数的行参说明,在本基本块内往前找压参数的语句;
步骤410,判断是否查找成功?如果是,则进行步骤420,如果否,则进行步骤430;
步骤420,删除本基本块内找到的那些压参数指令翻译后对应的本地码,并形成如下本地代码:将这些参数按照目标机传参约定放入到相应的寄存器和堆栈中;X86模拟寄存器ESP=X86模拟寄存器ESP-所有参数总大小;调用本地库函数;按照目标机传返回值约定取出返回值,然后按照X86约定放入到X86模拟寄存器或内存中。
步骤430,在目标机上模拟X86的参数和返回值传递约定,调用包装的本地库函数完成库函数调用的处理。
如图6所示,在步骤66中,包含以下子步骤:
步骤600,在静态部分提供的本地码和动态部分翻译的本地码中查找当前要处理的库函数的本地码;
步骤610,判断是否查找成功?,如果是,进行步骤620,如果否,进行步骤630;
步骤620,把调用库函数的CALL指令翻译成如下的本地代码:跳转到库函数本地码在内存中存放的地址,并且把返回地址放入约定好的寄存器中。
步骤630,由于目标库函数的本地码可能没有被动态模块装入或者没有被翻译,因此采用回填的方法处理库函数的调用;具体就是生成跳转目标是空的转移指令,并做好标记,同时把返回地址放入约定好的寄存器中,当把库函数的本地码装入内存或者翻译之后,再把本地码的存放地址填入跳转指令中。
本发明所提供的动静结合二进制翻译中的库函数调用处理方法具有如下特点:在翻译前对库函数进行分类,分为可包装库函数和PLT短路库函数;静态模块会对库函数进行一定程度的翻译并把翻译结果传给动态模块;对源X86二进制程序中的库函数调用进行识别和提升;对于可包装库函数,用目标机本地的约定进行传参和返回值处理,这样能省去将参数压入X86模拟堆栈,然后又从堆栈中取出放入到目标机传参寄存器或堆栈中过程中频繁对内存的操作,提高了程序执行的效率;对于PLT短路库函数,虽然继续维护X86模拟堆栈,但是控制流不进入PLT和动态链接器的fixup函数,即不翻译PLT和动态链接器的fixup函数的源二进制代码,直接进入库函数的本地码,也能够提高程序执行的效率。
最后应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (6)
1、一种二进制翻译中库函数调用的处理方法,包括以下步骤:
a.建立库函数分类查询表,在表中,对可包装库函数和PLT短路库函数做分类;
b.利用动静结合二进制翻译***中的静态模块对主文件和它涉及的共享库中的库函数进行翻译;
c.在控制转移到动态翻译之前,把静态翻译好的本地码装入内存,这部分本地码包括被执行主文件和共享库中的库函数两部分;
d.在目标机中用内存模拟X86的寄存器和堆栈;
e.依次对X86二进制程序中的每个基本块进行处理,取X86二进制程序中的第一个基本块;
f.判别基本块的结束指令的指令类型是否为CALL指令,如果是,则进行步骤g,如果否,则进行步骤h;
g.调用CALL指令处理模块处理CALL指令;
h.判断是否所有的基本块都处理了,如果是,则结束;如果否,则进行步骤i;
i.取下一个基本块,然后进行步骤f。
2、如权利要求1所述的一种二进制翻译中库函数调用的处理方法,其特征在于,在步骤f中,包含以下步骤:
f1)判断CALL的目标是否为库函数,如果是,则进行步骤f2,如果否,则进行步骤f8;
f2)查询库函数分类表;
f3)判断是否是可包装库函数,如果是,进行步骤f4,如果否,进行步骤f5;
f4)进行可包装库函数处理;
f5)判断是否是PLT短路库函数,如果是,进行步骤f6,如果否,进行步骤f7;
f6)进行PLT短路库函数处理;
f7)在目标机上模拟X86的参数和返回值传递约定,按照X86处理动态链接的执行流程,把PLT、fixup函数、库函数的源二进制代码都进行翻译执行;执行流程,把PLT、fixup函数、库函数的源二进制代码都进行翻译执行;
f8)模拟X86传参和返回值约定的方法对这种主文件内部的普通函数调用进行处理。
3、如权利要求2所述的一种二进制翻译中库函数调用的处理方法,其特征在于,在步骤f4中,包含以下子步骤:
f41)根据相应库函数的行参说明,在本基本块内往前找压参数的语句;
f42)判断是否查找成功,如果是,则进行步骤f43,如果否,则进行步骤f44;
f43)删除本基本块内找到的那些压参数指令翻译后对应的本地码,并形成如下本地代码:将这些参数按照目标机传参约定放入到相应的寄存器和堆栈中;X86模拟寄存器ESP=X86模拟寄存器ESP-所有参数总大小;调用本地库函数;按照目标机传返回值约定取出返回值,然后按照X86约定放入到X86模拟寄存器或内存中;
f44)在目标机上模拟X86的参数和返回值传递约定,调用包装的本地库函数完成库函数调用的处理。
4、如权利要求2所述的一种二进制翻译中库函数调用的处理方法,其特征在于,在步骤f6中,包含以下子步骤:
f61)在静态部分提供的本地码和动态部分翻译的本地码中查找当前要处理的库函数的本地码;
f62)判断是否查找成功,如果是,进行步骤f63,如果否,进行步骤f64;
f63)把调用库函数的CALL指令翻译成如下的本地代码:跳转到库函数本地码在内存中存放的地址,并且把返回地址放入约定好的寄存器中;
f64)生成跳转目标是空的转移指令,并做好标记,同时把返回地址放入约定好的寄存器中,当把库函数的本地码装入内存或者翻译之后,再把本地码的存放地址填入跳转指令中。
5、如权利要求1或2所述的一种二进制翻译中库函数调用的处理方法,其特征在于,所述的可包装库函数是一种库函数,没有全局变量多个副本和结构变量对齐方式差异,可以调用本地的库函数。
6、如权利要求1或2所述的一种二进制翻译中库函数调用的处理方法,其特征在于,所述的PLT短路库函数是一种库函数,其本地码在静态模块已经翻译过,动态模块直接跳入静态本地码中,不需要翻译执行PLT和fixup函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100803398A CN100359472C (zh) | 2005-07-01 | 2005-07-01 | 一种二进制翻译中库函数调用的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100803398A CN100359472C (zh) | 2005-07-01 | 2005-07-01 | 一种二进制翻译中库函数调用的处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1892602A true CN1892602A (zh) | 2007-01-10 |
CN100359472C CN100359472C (zh) | 2008-01-02 |
Family
ID=37597489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100803398A Active CN100359472C (zh) | 2005-07-01 | 2005-07-01 | 一种二进制翻译中库函数调用的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100359472C (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103186414A (zh) * | 2011-12-27 | 2013-07-03 | 联想(北京)有限公司 | 一种程序执行方法、程序管理器和虚拟机 |
CN101706734B (zh) * | 2009-11-10 | 2013-08-14 | 中国科学院计算技术研究所 | 二进制翻译中间接跳转指令的翻译方法及其*** |
CN103577728A (zh) * | 2013-11-16 | 2014-02-12 | 哈尔滨工业大学 | 一种使用收缩执行依赖图识别库函数的方法 |
WO2016000550A1 (zh) * | 2014-06-30 | 2016-01-07 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
WO2017067175A1 (zh) * | 2015-10-21 | 2017-04-27 | 百度在线网络技术(北京)有限公司 | 一种加载elf文件的方法、装置、设备和计算机存储介质 |
CN107408052A (zh) * | 2015-04-10 | 2017-11-28 | 谷歌公司 | 共享对象层级上的二进制转换 |
US10203942B2 (en) | 2017-06-09 | 2019-02-12 | National Chiao Tung University | Binary-code translation device and method |
CN110874259A (zh) * | 2018-08-31 | 2020-03-10 | 龙芯中科技术有限公司 | 程序执行方法、装置、设备和存储介质 |
CN113590348A (zh) * | 2021-07-26 | 2021-11-02 | 京东科技控股股份有限公司 | 基于树状结构的参数传递方法、装置、设备及介质 |
WO2024036517A1 (zh) * | 2022-08-17 | 2024-02-22 | 芯原微电子(上海)股份有限公司 | 一种交叉链接方法、装置,电子设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5421016A (en) * | 1991-12-12 | 1995-05-30 | International Business Machines Corporation | System and method for dynamically invoking object methods from an application designed for static method invocation |
US6704925B1 (en) * | 1998-09-10 | 2004-03-09 | Vmware, Inc. | Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache |
JP2002312180A (ja) * | 2001-04-11 | 2002-10-25 | Hitachi Ltd | 動的命令変換機能を有するプロセッサシステム、該プロセッサシステムを備えたコンピュータにて実行されるバイナリートランスレーションプログラム及びそのプロセッサシステムを実装した半導体デバイス |
US20030088860A1 (en) * | 2001-11-02 | 2003-05-08 | Fu-Hwa Wang | Compiler annotation for binary translation tools |
CN1296815C (zh) * | 2003-10-21 | 2007-01-24 | 中国科学院计算技术研究所 | 二进制翻译中标志位的优化处理方法 |
-
2005
- 2005-07-01 CN CNB2005100803398A patent/CN100359472C/zh active Active
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101706734B (zh) * | 2009-11-10 | 2013-08-14 | 中国科学院计算技术研究所 | 二进制翻译中间接跳转指令的翻译方法及其*** |
CN103186414A (zh) * | 2011-12-27 | 2013-07-03 | 联想(北京)有限公司 | 一种程序执行方法、程序管理器和虚拟机 |
CN103577728B (zh) * | 2013-11-16 | 2016-03-30 | 哈尔滨工业大学 | 一种使用收缩执行依赖图识别库函数的方法 |
CN103577728A (zh) * | 2013-11-16 | 2014-02-12 | 哈尔滨工业大学 | 一种使用收缩执行依赖图识别库函数的方法 |
CN105335203B (zh) * | 2014-06-30 | 2018-10-19 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
CN105335203A (zh) * | 2014-06-30 | 2016-02-17 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
WO2016000550A1 (zh) * | 2014-06-30 | 2016-01-07 | 华为技术有限公司 | 共享库的二进制翻译执行方法和装置 |
CN107408052A (zh) * | 2015-04-10 | 2017-11-28 | 谷歌公司 | 共享对象层级上的二进制转换 |
CN107408052B (zh) * | 2015-04-10 | 2021-04-16 | 谷歌有限责任公司 | 共享对象层级上的二进制转换的方法、***和介质 |
WO2017067175A1 (zh) * | 2015-10-21 | 2017-04-27 | 百度在线网络技术(北京)有限公司 | 一种加载elf文件的方法、装置、设备和计算机存储介质 |
US10203942B2 (en) | 2017-06-09 | 2019-02-12 | National Chiao Tung University | Binary-code translation device and method |
TWI660307B (zh) * | 2017-06-09 | 2019-05-21 | 國立交通大學 | 二元碼轉譯裝置及方法 |
CN110874259A (zh) * | 2018-08-31 | 2020-03-10 | 龙芯中科技术有限公司 | 程序执行方法、装置、设备和存储介质 |
CN113590348A (zh) * | 2021-07-26 | 2021-11-02 | 京东科技控股股份有限公司 | 基于树状结构的参数传递方法、装置、设备及介质 |
CN113590348B (zh) * | 2021-07-26 | 2024-05-17 | 京东科技控股股份有限公司 | 基于树状结构的参数传递方法、装置、设备及介质 |
WO2024036517A1 (zh) * | 2022-08-17 | 2024-02-22 | 芯原微电子(上海)股份有限公司 | 一种交叉链接方法、装置,电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN100359472C (zh) | 2008-01-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1892602A (zh) | 一种二进制翻译中库函数调用的处理方法 | |
CN1153141C (zh) | 调试优化代码的方法和设备 | |
CN1752934A (zh) | 编译器、编译方法以及编译程序 | |
CN1577268A (zh) | 共享库***及构建该***的方法 | |
CN1885264A (zh) | 用于嵌入式***的软件包构建方法和*** | |
CN1371499A (zh) | 传统数据结构的对象特性元模型仿真器 | |
CN100342353C (zh) | 嵌入式操作***中进程映射实现方法 | |
CN1504881A (zh) | 爪哇执行设备和爪哇执行方法 | |
CN1367895A (zh) | 把不同源语言转移到一个执行介质 | |
CN1238500A (zh) | 用于进行静态初始化的方法和*** | |
CN1313927C (zh) | 智能卡运行环境的控制方法 | |
CN101038611A (zh) | 一种软件保护的方法 | |
CN1324469A (zh) | 提高数字图像的可移植性 | |
CN1492361A (zh) | 嵌入式数据库查询的处理方法 | |
CN101075213A (zh) | 只读存储器数据修补电路和方法、及其嵌入式*** | |
CN1975693A (zh) | 具有自驱动功能的指令仿真解析***及其实现方法 | |
CN101055542A (zh) | 一种交叉集成开发环境中的符号调试方法及*** | |
CN1234549A (zh) | 实现多重返回位置的方法和装置 | |
CN1295778C (zh) | 一种验证芯片硬件行为与软件模拟行为的一致性的方法 | |
CN1851690A (zh) | 一种翻译网页的方法和*** | |
CN1834911A (zh) | 实现程序加载运行的方法 | |
CN200953143Y (zh) | 一种虚拟硬件*** | |
CN1860437A (zh) | 可编译计算机程序的处理 | |
CN1129846C (zh) | 程序执行方法 | |
CN1286008C (zh) | 一种实现单片机软件版本更新的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |