CN115729652A - 一种解释例程的执行方法、装置、设备及存储介质 - Google Patents

一种解释例程的执行方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN115729652A
CN115729652A CN202211503578.XA CN202211503578A CN115729652A CN 115729652 A CN115729652 A CN 115729652A CN 202211503578 A CN202211503578 A CN 202211503578A CN 115729652 A CN115729652 A CN 115729652A
Authority
CN
China
Prior art keywords
address
bytecode
interpretation routine
interpretation
processed
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.)
Pending
Application number
CN202211503578.XA
Other languages
English (en)
Inventor
宋浩楠
荆培杨
侯宪龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Eswin Computing Technology Co Ltd
Original Assignee
Beijing Eswin Computing Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Eswin Computing Technology Co Ltd filed Critical Beijing Eswin Computing Technology Co Ltd
Priority to CN202211503578.XA priority Critical patent/CN115729652A/zh
Publication of CN115729652A publication Critical patent/CN115729652A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本申请实施例公开了一种解释例程的执行方法、装置、设备及存储介质,其中,所述方法包括:获取并执行可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;确定所述多个待处理字节码对应的地址数组;获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程。

Description

一种解释例程的执行方法、装置、设备及存储介质
技术领域
本申请实施例涉及虚拟机技术领域,尤其涉及一种解释例程的执行方法、装置、设备及存储介质。
背景技术
相关技术中,虚拟机进行C++解释执行,通常使用译码分派解释器通过switch-case语句实现;其中,每条指令的解释需要在case语句中调用解释例程,这样会包括许多直接和间隔的分支指令,进而使得硬件平台需要大量计算资源进行预测并处理,其易降低虚拟机以及对应设备的运行效率。
发明内容
本申请实施例提供一种解释例程的执行技术方案。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种解释例程的执行方法,所述方法包括:获取并执行可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;确定所述多个待处理字节码对应的地址数组;获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程。
本申请实施例还提供一种解释例程的执行装置,所述装置包括:第一获取模块,用于获取并执行可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;确定模块,用于确定所述多个待处理字节码对应的地址数组;第二获取模块,用于获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;执行模块,用于基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程。
本申请实施例提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器上存储有计算机可执行指令,所述处理器运行所述存储器上的计算机可执行指令时能够实现上述的解释例程的执行方法。
本申请实施例提供一种计算机存储介质,所述计算机存储介质上存储有计算机可执行指令,该计算机可执行指令被执行后,能够实现上述的解释例程的执行方法。
本申请实施例提供一种解释例程的执行方法、装置、设备及存储介质,其中,首先,获取可执行代码文件,并执行所述可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;其次,确定所述多个待处理字节码对应的地址数组;同步获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;然后,基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程;如此,能够在解释例程的末尾处增加的相关跳转指令的基础上,基于解释例程的地址映射表和多个待处理字节码对应的地址数组,实现以线索解释的方式,即自动跳转的方式依次遍历执行多个待处理字节码的解释例程;这样,能够提升相关运行环境中解释例程的执行速度,进而能够提高级别高于汇编语言的计算机编程语言编译得到的可执行代码文件对应的运行速度,以及相关运行环境所处的运行设备的运行能力。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本申请实施例提供的技术方案。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:
图1为本申请实施例提供的第一种解释例程的执行方法的流程示意图;
图2为本申请实施例提供的第二种解释例程的执行方法的流程示意图;
图3为本申请实施例提供的第三种解释例程的执行方法的流程示意图;
图4为应用本申请实施例提供的解释例程的执行方法的框架示意图;
图5为本申请实施例提供的一种解释例程的执行装置的组成结构示意图;
图6为本申请实施例提供的一种计算机设备的组成结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请的具体技术方案做进一步详细描述。以下实施例用于说明本申请实施例,但不用来限制本申请实施例的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请实施例的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请实施例。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)虚拟机:(Android Run Time,ART)是安卓Android上的应用和部分系统服务使用的托管式运行时。ART及其前身Dalvik最初是专为Android项目打造的。作为运行时的ART可执行Dalvik可执行文件并遵循Dex字节码规范。
2)解释例程:是虚拟机软件保护架构设计的一套私有虚拟字节码的解释执行处理函数集。
3)字节码:字节码(Byte-code)是一种包含执行程序,由一序列op代码或数据对组成的二进制文件,是一种中间码。
本申请实施例提供的解释例程的执行方法可以应用于计算机设备,该方法所实现的功能可以通过计算机设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该计算机设备至少包括处理器和存储介质。
本申请实施例提供一种解释例程的执行方法,如图1所示,为本申请实施例提供的第一种解释例程的执行方法的流程示意图;结合图1中所述的步骤S101至步骤S104进行以下说明。
步骤S101、获取并执行可执行代码文件,得到多个待处理字节码。
其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件。
在一些实施例中,可执行代码文件的数量可以是一个,也可以是两个及以上;其中,可执行代码文件可以是基于C++、C、JAVA以及Python等计算机编程语言,且该计算机编程语言为级别高于汇编语言的计算机编程语言。
在一些实施例中,可以使用内部携带的虚拟机对可执行代码文件进行编译,以得到多个中间指令,即多个待处理字节码;其中,多个待处理字节码对应的数量可以是两个及以上,且不同待处理字节码所对应的指令不同。
在一些实施例中,多个待处理字节码中任意两个字节码可以相同,也可以不同。
步骤S102、确定所述多个待处理字节码对应的地址数组。
在一些实施例中,确定包括多个待处理字节码对应的地址数组,即生成或创建对应的地址数组;其中,对应的地址数组中对应的待处理字节码的地址是按照预设顺序排序的。
在一些实施例中,首先可以确定多个待处理字节码对应的执行序列,然后,基于该执行序列和多个待处理字节码中每一待处理字节码的字节数,创建地址数组。
在一些实施例中,执行序列中相邻的两个待处理字节码的地址在该地址数组中相邻。这里,在确定任一待处理字节码在地址数组中的地址信息之后,可以在该地址信息上增加当前字节码的字节数,得到与其相邻的下一个待处理字节码在地址数组中的地址信息。
步骤S103、获取字节码集合对应的解释例程的地址映射表。
其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令。
在一些实施例中,字节码集合中包括的字节码可以是虚拟机中涉及的所有字节码;其中,字节码集合中包括的字节码的数量为256个。
在一些实施例中,字节码集合对应的解释例程的地址映射表,其中,该地址映射表中,包括字节码集合中每一字节码,与其对应的解释例程的地址之间的对应的关系。
在一些实施例中,字节码集合中每一字节码的解释例程,其在末尾处均携带有译码跳转指令;这里,译码跳转指令可以是基于字节码当前所对应的地址信息和其的字节数确定的。
在一些实施例中,首先获取字节码集合中每一字节码的原始解释例程,然后对每一字节码的原始解释例程中的原始汇编指令进行修改,即可以在其的末尾处增加译码跳转指令,从而得到每一字节码的解释例程。
在一些实施例中,每一字节码的原始解释例程即为事先设定好的解释例程,该原始解释例程中包含底层汇编指令。
在一些实施例中,首先,在确定任一字节码的解释例程之后,获取该字节码的解释例程的地址;这里,可以是将该字节码的原始解释例程的地址,变更为字节码的解释例程的地址。
在一些实施例中,在获取到每一字节码的解释例程的地址之后,将字节码和字节码的解释例程的地址进行关联,以形成一映射表。
在一些实施例中,该映射表中包括:字节码1-字节码1的解释例程的地址、字节码2-字节码2的解释例程的地址、字节码3-字节码3的解释例程的地址等。
步骤S104、基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程。
在一些实施例中,可以根据创建的地址数组和获取的地址映射表,实现多个待处理字节码的解释例程的依次跳转,进而实现遍历执行多个待处理字节码的解释例程。
在一些实施例中,通过建立多个待处理字节码对应的地址数组,以及包括多个待处理字节码的字节码集合对应的解释例程的地址映射表。其中,解释例程的末尾处携带译码跳转指令;如此,能够根据该指令、地址数组以及地址映射表,查找对应的字节码的解释例程的地址,进而能够实现直接跳转到对应的解释例程的地址来执行对应的解释例程。这样,相对于现有技术中,通过switch-case语句实现译码分派引入的分支指令,能够提升虚拟机中基于级别高于汇编语言的计算机语言编译得到的代码文件,所对应的解释例程的执行速度。
在一些实施例中,首先,执行地址数组中第1字节码的解释例程,地址数组中第1个字节码为地址数组中第1个地址信息对应的待处理字节码;因地址数组中第1字节码的解释例程的末尾处有译码跳转指令;进而可以基于译码跳转指令中的第1字节码在地址数组中的地址信息和地址数组中第1字节码的字节数,确定地址数组中第2字节码关联的译码跳转指令,并基于地址映射表并跳转至地址数组中第2字节码的解释例程的地址,来执行第2字节码的解释例程;同时因地址数组中第2字节码的解释例程的末尾处同样携带有译码跳转指令,同样可基于确定地址数组中第3字节码的译码跳转指令和地址映射表,跳转至地址数组中第3字节码的解释例程的地址,来执行地址数组中第3字节码的解释例程…依次遍历执行地址数组中每一字节码的解释例程;如此,在多个待处理字节码序列对应的地址数组的基础上,基于解释例程中的末尾处增加的译码跳转指令和其对应的地址映射表,进而以自动跳转的方式实现遍历执行多个待处理字节码的解释例程。
本申请实施例提供的解释例程的执行方法,首先,获取可执行代码文件,并执行所述可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;如此,通过对级别高于汇编语言的计算机编程语言编译得到的可执行代码文件进行编译,获取与运行该设备的运行环境匹配的多个待处理字节码;其次,确定所述多个待处理字节码对应的地址数组;同步获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;如此,通过建立多个待处理字节码对应的地址数组,以及事先建立的包括多个待处理字节码的字节码集合对应的解释例程的地址映射表,且解释例程的末尾处携带有译码跳转指令,能够为后续实现自动跳转并执行多个解释例程提供基础;最后,基于所述地址数组和所述地址映射表,遍历执行所述多个字节码的解释例程;这样,能够在解释例程的末尾处增加的相关跳转指令的基础上,基于解释例程的地址映射表和多个待处理字节码对应的地址数组,实现以线索解释的方式,即自动跳转的方式依次遍历执行多个待处理字节码的解释例程;这样,能够提升相关运行环境中解释例程的执行速度,进而能够提高级别高于汇编语言的计算机编程语言编译得到的可执行代码文件对应的运行速度,以及相关运行环境所处的运行设备的运行能力。
在一些可能的实现方式中,首先,获取多个待处理字节码对应的执行序列以及多个待处理字节码中每一待处理字节码对应的字节数,然后基于获取的执行序列和每一待处理字节码的字节数,生成多个待处理字节码对应的地址数组;如此,能够使得生成的地址数组更加符合可执行代码文件的实际运行结果,且为后续基于生成的地址数组实现多个待处理字节码的解释例程的自动跳转提供基础,即上述实施例提供的步骤S102可以通过以下步骤S201和步骤S202的方式来实现,如图2所示,为本申请实施例提供的第二种解释例程的执行方法的流程示意图,结合图2所示的步骤S101、步骤S201至步骤S204以及步骤S104进行以下说明。
步骤S201、确定所述多个待处理字节码对应的执行序列。
在一些实施例中,执行序列,即为执行多个待处理字节码对应的顺序。
在一些实施例中,执行序列可以是:待处理字节码1、待处理字节码2、待处理字节码3等。
步骤S202、基于所述执行序列和所述待处理字节码的字节数,创建所述地址数组。
在一些实施例中,可以基于该执行序列和每个待处理字节码的字节数,将多个待处理字节码依次存储至对应的空间,以形成地址数组。
在一些实施例中,该地址数组中:地址1对应待处理字节码1、地址2对应待处理字节码2、地址3对应待处理字节码3等;其中,基于待处理字节码1的字节数对地址1进行地址偏移,即为地址2;对应地,基于待处理字节码2的字节数对地址2进行地址偏移,即为地址3,依次类推,可以形成多个待处理字节码对应的地址数组。
在一些可能的实现方式中,首先,获取字节码集合中每一字节码的解释例程,然后,根据字节码与字节码的解释例程之间的对应关系,生成对应的地址映射表;这样,能够得到精准度较高的地址映射表,进而为后续基于该地址映射表实现相关解释例程的跳转提供基础,即上述实施例提供的步骤S103,可以通过以下过程步骤S203和步骤S204的方式来实现:
步骤S203、获取所述字节码集合中每一字节码的解释例程。
在一些实施例中,字节码集合中不同字节码的解释例程的不同;其中,首先,可获取每一字节码的原始解释例程,然后,对每一字节码的原始解释例程进行调整,以得到每一字节码的解释例程。
这里,需要说明的是,字节码集合包括上述所描述的多个待处理字节码,即字节码集合中包括的字节码的数量,肯定是大于或等于上述多个待处理字节码的数量。
在一些可能的实现方式中,首先,获取字节码的原始解释例程,即最原始的解释例程,并从中确定对应的原始汇编指令;其次,确定与字节码关联的译码跳转指令,这里,可以基于该字节码的相关信息生成与其匹配的译码跳转指令;最后,在该字节码对应的原始汇编指令的末尾处,增加字节码关联的译码跳转指令,以得到字节码的解释例程;这样,能够使得每一字节码的解释例程的末尾处均携带有相关译码跳转指令,为后续基于跳转方式,实现遍历相关字节码的解释例程提供基础,即上述实施例提供的步骤S203可以通过以下步骤S2031至步骤S2033的方式来实现(图中未示出):
步骤S2031、获取所述字节码的原始解释例程中的原始汇编指令。
其中,字节码的原始解释例程中的原始汇编指令包括至少一个底层汇编指令,其用于解释字节码具体如何运行。
在一些实施例中,不同字节码的原始解释例程中的原始汇编指令不同,且不同字节码的原始解释例程中的原始汇编指令对应的地址不同。
步骤S2032、确定所述字节码关联的译码跳转指令。
在一些实施例中,生成与字节码关联的译码跳转指令;其中,针对不同字节码,可基于其相关属性信息不同,生成对应的译码跳转指令。
在一些可能的实现方式中,可以首先,获取字节码的字节数和字节码所对应的地址信息,然后,基于获取的字节数和地址信息,生成对应的字节码关联的译码跳转指令;这样,与相关地址信息和字节数,可以获取与当前字节码在地址上相邻的其他字节码的相关指向信息,进而可基于该指向信息,生成对应的译码跳转指令,即上述步骤S2032可以通过以下过程来实现:
首先,获取所述字节码的字节数和所述字节码对应的地址信息。
在一些实施例中,获取字节码的字节数以及字节码对应的地址信息;这里,不同字节码对应的地址信息不同,但不同字节码的字节数可相同,也可不同。
然后,基于所述字节数和所述地址信息,生成所述字节码关联的译码跳转指令。
在一些实施例中,可以基于获取的字节数,对获取的地址信息进行地址偏移,得到对应的译码跳转指令。
这里,该译码跳转指令可以包括地址指向指令、译码读取指令以及跳转指令;这样,首先,确定对应的地址信息,生成对应的地址指向指令;然后,基于该地址指向指令,在该地址上读取对应的字节码,即生成与地址指向指令关联的译码读取指令;最后,基于读取的字节码,执行相应的跳转,即生成与该译码读取指令关联的跳转指令;如此,能够基于该译码跳转指令中包括的多个不同指令,如:地址指向指令、译码读取指令以及跳转指令,能够使得后续的跳转更加精准,即上述步骤中涉及的“基于所述字节数和所述地址信息,生成所述字节码关联的译码跳转指令”,可以包括以下过程:
第一步,基于所述字节数对所述地址信息进行地址偏移,得到地址指向指令。
在一些实施例中,在该地址信息上进行该字节数对应的地址长度的偏移,即得到对应的地址执行指令。
第二步,生成与所述地址指向指令关联的译码读取指令。
在一些实施例中,基于该地址指向指令,在该地址上读取对应的字节码,即生成与地址指向指令关联的译码读取指令。
第三步,生成与所述译码读取指令关联的跳转指令。
在一些实施例中,基于读取的字节码,执行相应的跳转,即生成与该译码读取指令关联的跳转指令。
步骤S2033、在所述原始汇编指令的末尾处,增加所述译码跳转指令,得到所述字节码的解释例程。
在一些实施例中,在该原始汇编指令的末尾处,即最后增加译码跳转指令,从而得到字节码的解释例程。
需要说明的是,通过在原始汇编指令的末尾处,增加译码跳转指令,并不会改变字节码的解释例程(原始解释例程)对应的地址信息。
这里,将译码跳转指令,增加至原始汇编指令之后,即译码跳转指令的执行顺序位于原始汇编指令之后。
步骤S204、根据所述字节码与所述字节码的解释例程的地址之间的对应关系,生成所述地址映射表。
在一些实施例中,字节码的解释例程的地址,可以与字节码的原始解释例程的地址相同,也可以不同。
在一些实施例中,基于每一字节码,与每一字节码的解释例程的地址之间的对应关系,生成一地址映射表,即该地址映射表中将字节码与其对应的解释例程的地址一一关联。
这里,通过构建字节码与其对应的解释例程的地址映射表,能够为后续基于地址映射表和地址数组实现解释例程的自动跳转遍历,提供基础。
在一些实施例中,所述译码跳转指令包括地址信息和字节数,在执行地址数组中第i字节码的解释例程中的译码跳转指令,均会在执行其内部包含的多个指令时,会执行到指向地址数组中第i+1字节码的跳转指令,这时,可以基于指向地址数组中第i+1字节码的跳转指令以及映射表,自动跳转至第i+1字节码的解释例程的地址,进而可以基于该第i+1字节码的解释例程的地址,执行第i+1字节码的解释例程;如此,多次轮询重复该步骤,直至执行完地址数组中最后一个地址中的字节码的解释例程;这样,能够在解释例程中增加的相关跳转指令的基础上,基于地址映射表和地址数组,实现以线索解释的方式,即自动跳转的方式依次遍历执行多个待处理字节码的解释例程;即上述实施例提供的步骤S104可以通过以下步骤S301至步骤S303的方式来实现,如图3所示,为本申请实施例提供的第三种解释例程的执行方法的流程示意图,结合图3中所示的步骤S101至步骤S103、以及步骤S301至步骤S303进行以下说明。
步骤S301、执行所述地址数组中第i字节码的解释例程,得到指向所述地址数组中第i+1字节码的译码跳转指令。
其中,所述地址数组中第i字节码表征位于所述地址数组中第i个地址信息对应的待处理字节码;i为大于或等于1的整数。
在一些实施例中,基于上文描述,可知地址数组中第i字节码的解释例程的末尾处携带译码跳转指令,其可以将译码跳转指令,生成指向地址数组中第i+1字节码的译码跳转指令。
在一些实施例中,可以基于地址数组第i字节码的解释例程的末尾处携带译码跳转指令,该译码跳转指令中包括的地址数组第i字节码的地址信息和地址数组第i字节码的字节数,进而可以基于该包括有地址数组第i字节码的地址信息和字节数的译码跳转指令,得到指向地址数组中第i+1字节码的译码跳转指令。
步骤S302、基于指向所述地址数组中第i+1字节码的译码跳转指令和所述地址映射表,执行所述地址数组中第i+1字节码的解释例程。
在一些实施例中,基于指向地址数组中第i+1字节码的译码跳转指令和地址映射表,依次实现获取位于地址数组的第i+1字节码的具体信息,以及基于映射表获取第i+1字节码的解释例程的地址,进而以实现执行地址数组中第i+1字节码的解释例程。
在一些可行的实现方式中,首先,基于该地址数组中第i+1字节码关联的译码跳转指令,在地址映射表中,获取对应的解释例程的地址信息;然后基于该地址数组中第i+1字节码关联的译码跳转指令以及获取的地址信息,跳转至对应的地址以执行对应的解释例程,即执行地址数组中第i+1字节码的解释例程;这样,能够直接基于地址映射表和地址数组中上一个字节码的解释例程的末尾处携带的译码跳转指令,直接跳转至地址数组中当前字节码的解释例程,实现解释例程自动跳转和遍历,即能够提高相关解释例程的执行速度,即上述步骤S302可以通过以下步骤S3021和步骤S3022的方式来实现(图中未示出):
步骤S3021、基于指向所述地址数组中第i+1字节码的译码跳转指令,在所述地址映射表中,确定所述地址数组中第i+1字节码的解释例程的地址。
在一些实施例中,基于指向地址数组中第i+1字节码的译码跳转指令,并参考地址映射表中相关字节码与字节码的解释例程的地址之间的关联关系,确定与地址数组中第i+1字节码关联的解释例程的地址。
步骤S3022、根据指向所述地址数组中第i+1字节码的译码跳转指令和所述地址数组中第i+1字节码的解释例程的地址,执行所述地址数组中第i+1字节码的解释例程。
在一些实施例中,在获取到地址数组中第i+1字节码的解释例程的地址之后,可以基于指向地址数组中第i+1字节码的译码跳转指令,实现地址跳转,直接跳转至地址数组中第i+1字节码的解释例程的地址上,进而以实现执行地址数组中第i+1字节码的解释例程。
这里,指向地址数组中第i+1字节码的译码跳转指令,依次按顺序包括:所述地址数组中第i+1字节码的地址指向指令、地址数组中第i+1字节码的译码读取指令以及地址数组中第i+1字节码的跳转指令;如此,首先,根据地址指向指令,确定地址数组中第i+1字节码的地址信息;其次,根据译码读取指令和地址数组中第i+1字节码的地址信息,读取第i+1字节码的内容;然后,在地址映射表中,根据地址数组中第i+1字节码的内容,确定地址数值中第i+1字节码的解释例程的地址;最后,根据地址数组中第i+1字节码的解释例程的地址,实现跳转至地址数组中第i+1字节码的解释例程的地址上,并执行地址数值中第i+1字节码的解释例程;如此,可实现从地址数组中当前字节码的解释例程,自动跳转至在地址数组中与其相邻的下一个字节码的解释例程。
步骤S303、重复上述步骤,直至执行完所述地址数组中最后一个地址信息对应的待处理字节码的解释例程。
在一些实施例中,重复上述步骤,直至将地址数组中最后一个地址信息的待处理字节码的解释例程执行完成,即可结束。
下面结合一个具体实施例对上述解释例程的执行方法进行说明,然而值得注意的是,该具体实施例仅是为了更好地说明本申请实施例,并不构成对本申请实施例的不当限定。
相关技术中,Android系统应用广泛,如手机、电视、平板电脑、车载系统等,ART为Android系统上的众多应用程序(Application,APP)提供运行时环境。目前ART支持以下三个编译运行模式:解释执行、全时段的编译(All-Of-the-Time compilation,AOT)以及即时编译(Just In Time,JIT),且三个编译运行模块还可以混合运行;这里,可以根据不同设备的需求,配置ART的编译等级(即编译运行模式),进而使得相关应用在安装速度、运行速度、存储空间和耗电量等指标都达到相对最优。
一方面,随着设备使用时间变长,由AOT编译产生的机器码占用空间变大,进而导致设备经常卡顿、用户体验感变差。若设备空间较小,解释执行则是最优选择的执行方式;这里,即使设备空间足够,为保证安装速度,APP前期仍需要以解释执行方式执行。另一方面,ART虚拟机解释执行有C++解释执行及汇编解释执行两种方式;其中,C++解释执行通过通用的C++代码,以译码分派的方式,调用不同Dex的指令(opcode)对应的解释例程;而汇编解释执行以汇编语言的形式,支持硬件架构为ARM/X86等系统,以线索解释的方式,调用对应opcode的解释例程。但对于其他硬件架构,或者在进行ART后端移植的过程中,以C++解释执行方式运行是必要的;因此,提升C++解释执行的运行速度,是提升ART运行性能以及提升安卓系统运行速度的突破点。
基于此,本申请实施例提供一种解释例程的执行方法,提供了一种优化ART中的C++解释执行的运行速度的方法;其中,该方法将当前ART在使用C++解释执行时,选择的译码分派优化为线索解释方法,能够避免中间代码按序解释执行过程中的直接或间接分支指令,进而能够提升虚拟机运行速度;其中,该线索解释执行方法应用于ART中的方法步骤如下,同时参考图4所示:
第一步,基于相关设备发出的可执行代码文件401,如:dex_pc,采用ART对其进行编译执行,得到对应的多个指令,即字节码,然后对多个字节码创建对应的地址数组402;同时获取事先建立好的字节码集合对应的解释例程的地址映射表;其中,每一解释例程的末尾处携带有译码跳转指令,该译码跳转指令至少包括以下新增指令1至3,即如图4中的403所示;同时,402中的多个字节码可以是:CONST/CONST_16/…/ADD_FLOAT/RETURN等。
其中,每一个字节码对应的解释例程的最后,可以包括新增指令1至3,如新增指令1至3为:
新增指令1:FETCH_ADVANCE_INST x,其用于更新dex_pc地址,即由当前字节码地址,增加当前字节码的字节数,指向在地址数组402与其相邻的下一条字节码的地址;这里,可以是基于当前字节码的字节数对地址数组402中当前字节码的地址进行地址偏移,得到与当前字节码在地址数组402中相邻的下一个字节码,在地址数组中的地址。
新增指令2:GET_INST_OPCODE:根据新增指令1中指向的地址,获取该地址上对应的字节码。
新增指令3:GOTO_OPCODE:根据上述建立的地址映射表,以及新增指令2中获取的字节码,直接跳转到并执行该字节码对应的解释例程。
基于此,本申请实施例提供的基于线索解释执行相关解释例程,其不仅仅适用于ART,其对于任何使用简单译码分派的解释执行的虚拟机,都可以通过更改为线索解释执行,以提升设备的运行速度。即能够优化ART基于C++解释执行的运行速度,进而能够提升安卓系统中APP运行速度;也就是说,其能够提高使用译码分派的虚拟机的运行速度。
本申请实施例提供的解释例程的执行方法,能够将C++解释执行的译码分派方式优化为线索解释方法,在建立字节码对应的地址数组和字节码对应的解释例程的地址映射表的基础上。在当前字节码的原始解释例程末尾处,进行与当前字节码在地址数组相邻的下一个字节码的译码,以及获取下一个字节码指令码,并根据字节码在地址映射表中查找对应解释例程地址,使其直接跳转到对应的解释例程地址。如此,能够优化在解释执行过程中,通过switch-case译码分派引入的分支指令,提升ART的运行速度。
基于前述的实施例,本申请实施例还提供一种解释例程的执行装置,如图5所示,为本申请实施例提供的一种解释例程的执行装置的组成结构示意图,其中,所述解释例程的执行装置500包括:
第一获取模块501,用于获取并执行可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;
确定模块502,用于确定所述多个待处理字节码对应的地址数组;
第二获取模块503,用于获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;
执行模块504,用于基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程。
在一些实施例中,所述确定模块502,还用于确定所述多个待处理字节码对应的执行序列;基于所述执行序列和所述待处理字节码的字节数,创建所述地址数组。
在一些实施例中,所述第二获取模块503,还用于获取所述字节码集合中每一字节码的解释例程;根据所述字节码与所述字节码的解释例程的地址之间的对应关系,生成所述地址映射表。
在一些实施例中,所述第二获取模块503,还用于获取所述字节码的原始解释例程中的原始汇编指令;确定所述字节码关联的译码跳转指令;在所述原始汇编指令的末尾处,增加所述译码跳转指令,得到所述字节码的解释例程。
在一些实施例中,所述第二获取模块503,还用于获取所述字节码的字节数和所述字节码对应的地址信息;基于所述字节数和所述地址信息,生成所述字节码关联的译码跳转指令。
在一些实施例中,所述第二获取模块503,还用于基于所述字节数对所述地址信息进行地址偏移,得到地址指向指令;生成与所述地址指向指令关联的译码读取指令;生成与所述译码读取指令关联的跳转指令。
在一些实施例中,所述译码跳转指令包括字节码的地址信息和字节码的字节数;所述执行模块504,还用于执行所述地址数组中第i字节码的解释例程,得到指向所述地址数组中第i+1字节码的译码跳转指令;其中,所述地址数组中第i字节码表征位于所述地址数组中第i个地址信息对应的待处理字节码;i为大于或等于1的整数;基于指向所述地址数组中第i+1字节码的译码跳转指令和所述地址映射表,执行所述地址数组中第i+1字节码的解释例程;重复上述步骤,直至执行完所述地址数组中最后一个地址信息对应的待处理字节码的解释例程。
在一些实施例中,所述执行模块504,还用于基于指向所述地址数组中第i+1字节码的译码跳转指令,在所述地址映射表中,确定所述地址数组中第i+1字节码的解释例程的地址;根据指向所述地址数组中第i+1字节码的译码跳转指令和所述地址数组中第i+1字节码的解释例程的地址,执行所述地址数组中第i+1字节码的解释例程。
这里需要指出的是:以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请的装置实施例中未披露的技术细节,请参照本申请的方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述解释例程的执行方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得电子设备(可以是具有摄像头的智能手机、平板电脑等)执行本申请实施例各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ReadOnly Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件和软件结合。
基于同一技术构思,本申请实施例提供一种计算机设备,用于实施上述方法实施例记载的解释例程的执行方法。图6为本申请实施例提供的一种计算机设备的组成结构示意图,如图6所示,所述计算机设备600包括:一个处理器601、至少一个通信总线604、通信接口602、至少一个外部通信接口和存储器603。其中,通信接口602配置为实现这些组件之间的连接通信。其中,通信接口602可以包括显示屏,外部通信接口可以包括标准的有线接口和无线接口。其中所述处理器601,配置为执行存储器中的程序,以实现上述实施例提供的解释例程的执行方法。
对应地,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中任一所述的解释例程的执行方法。
相应地,本申请实施例中,还提供了一种芯片,所述芯片包括可编程逻辑电路和/或程序指令,当所述芯片运行时,用于实现上述实施例中任一所述的解释例程的执行方法。
相应地,本申请实施例中,还提供了一种计算机程序产品,当该计算机程序产品被电子设备的处理器执行时,其用于实现上述实施例中任一所述的解释例程的执行方法。
以上解释例程的执行装置、计算机设备和存储介质实施例的描述,与上述方法实施例的描述是类似的,具有同相应方法实施例相似的技术描述和有益效果,限于篇幅,可按照上述方法实施例的记载,故在此不再赘述。对于本申请实施例中的解释例程的执行装置、计算机设备和存储介质实施例中未披露的技术细节,请参照本申请的方法实施例的描述而理解。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请实施例的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请实施例的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请实施例各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请实施例上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请实施例各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以所述权利要求的保护范围为准。

Claims (11)

1.一种解释例程的执行方法,其特征在于,所述方法包括:
获取并执行可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;
确定所述多个待处理字节码对应的地址数组;
获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;
基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程。
2.根据权利要求1所述的方法,其特征在于,所述确定所述多个待处理字节码对应的地址数组,包括:
确定所述多个待处理字节码对应的执行序列;
基于所述执行序列和所述待处理字节码的字节数,创建所述地址数组。
3.根据权利要求1所述的方法,其特征在于,所述获取字节码集合对应的解释例程的地址映射表,包括:
获取所述字节码集合中每一字节码的解释例程;
根据所述字节码与所述字节码的解释例程的地址之间的对应关系,生成所述地址映射表。
4.根据权利要求3所述的方法,其特征在于,所述获取所述字节码集合中每一字节码的解释例程的地址,包括:
获取所述字节码的原始解释例程中的原始汇编指令;
确定所述字节码关联的译码跳转指令;
在所述原始汇编指令的末尾处,增加所述译码跳转指令,得到所述字节码的解释例程。
5.根据权利要求4所述的方法,其特征在于,所述确定所述字节码关联的译码跳转指令,包括:
获取所述字节码的字节数和所述字节码对应的地址信息;
基于所述字节数和所述地址信息,生成所述字节码关联的译码跳转指令。
6.根据权利要求5所述的方法,其特征在于,所述基于所述字节数和所述地址信息,生成所述字节码关联的译码跳转指令,包括:
基于所述字节数对所述地址信息进行地址偏移,得到地址指向指令;
生成与所述地址指向指令关联的译码读取指令;
生成与所述译码读取指令关联的跳转指令。
7.根据权利要求1至6任一所述的方法,其特征在于,所述译码跳转指令包括字节码的地址信息和字节码的字节数;所述基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程,包括:
执行所述地址数组中第i字节码的解释例程,得到指向所述地址数组中第i+1字节码的译码跳转指令;其中,所述地址数组中第i字节码表征位于所述地址数组中第i个地址信息对应的待处理字节码;i为大于或等于1的整数;
基于指向所述地址数组中第i+1字节码的译码跳转指令和所述地址映射表,执行所述地址数组中第i+1字节码的解释例程;
重复上述步骤,直至执行完所述地址数组中最后一个地址信息对应的待处理字节码的解释例程。
8.根据权利要求7所述的方法,其特征在于,所述基于指向所述地址数组中第i+1字节码的译码跳转指令和所述地址映射表,执行所述地址数组中第i+1字节码的解释例程,包括:
基于指向所述地址数组中第i+1字节码的译码跳转指令,在所述地址映射表中,确定所述地址数组中第i+1字节码的解释例程的地址;
根据指向所述地址数组中第i+1字节码的译码跳转指令和所述地址数组中第i+1字节码的解释例程的地址,执行所述地址数组中第i+1字节码的解释例程。
9.一种解释例程的执行装置,其特征在于,所述装置包括:
第一获取模块,用于获取并执行可执行代码文件,得到多个待处理字节码;其中,所述可执行代码文件包括级别高于汇编语言的计算机编程语言编译得到的代码文件;
确定模块,用于确定所述多个待处理字节码对应的地址数组;
第二获取模块,用于获取字节码集合对应的解释例程的地址映射表;其中,所述字节码集合包括所述多个待处理字节码;所述解释例程的末尾处携带有译码跳转指令;
执行模块,用于基于所述地址数组和所述地址映射表,遍历执行所述多个待处理字节码的解释例程。
10.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器上存储有计算机可执行指令,所述处理器运行所述存储器上的计算机可执行指令时能够实现权利要求1至8任一项所述的解释例程的执行方法。
11.一种计算机存储介质,其特征在于,所述计算机存储介质上存储有计算机可执行指令,该计算机可执行指令被执行后,能够实现权利要求1至8任一项所述的解释例程的执行方法。
CN202211503578.XA 2022-11-28 2022-11-28 一种解释例程的执行方法、装置、设备及存储介质 Pending CN115729652A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211503578.XA CN115729652A (zh) 2022-11-28 2022-11-28 一种解释例程的执行方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211503578.XA CN115729652A (zh) 2022-11-28 2022-11-28 一种解释例程的执行方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN115729652A true CN115729652A (zh) 2023-03-03

Family

ID=85298728

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211503578.XA Pending CN115729652A (zh) 2022-11-28 2022-11-28 一种解释例程的执行方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN115729652A (zh)

Similar Documents

Publication Publication Date Title
CN110675256B (zh) 部署和执行智能合约的方法及装置
US8832669B2 (en) Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9274769B1 (en) Table of contents pointer value save and restore placeholder positioning
US9146715B1 (en) Suppression of table of contents save actions
US8607211B2 (en) Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
CN101697131B (zh) 一种可重定位文件动态加载的方法及装置
US8893104B2 (en) Method and apparatus for register spill minimization
RU2643484C2 (ru) Генерация собственного кода из кода на промежуточном языке для приложения
CN106933610B (zh) 一种应用程序安装包生成方法、装置及电子设备
US20110154299A1 (en) Apparatus and method for executing instrumentation code
CN103412754A (zh) 动态语言代码执行方法和装置
CN112558984A (zh) 代码编译的方法、装置、电子设备以及服务器
CN102109980A (zh) 在托管运行时环境中执行自适应预取操作的方法和装置
CN110673851B (zh) 一种智能合约运行方法、装置及电子设备
CN107423093B (zh) 控制方法及装置、计算机装置和计算机可读存储介质
US20130152049A1 (en) Warning of register and storage area assignment errors
US8806460B2 (en) Method and apparatus for avoiding register interference
CN115729652A (zh) 一种解释例程的执行方法、装置、设备及存储介质
CN107480479B (zh) 应用程序的加固方法及装置、计算设备、计算机存储介质
CN113094664B (zh) 一种防止安卓应用程序被反编译的系统
US8645758B2 (en) Determining page faulting behavior of a memory operation
CN108846265B (zh) 一种程序加固方法及装置
CN113050948A (zh) 动态库优化方法、装置、设备及存储介质
CN112667245B (zh) 一种代码处理方法、装置、电子设备及存储介质
CN113439271B (zh) 受保护操作处理

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination