掌桥专利:专业的专利平台
掌桥专利
首页

字节码指令序列分析方法、装置、电子设备、存储介质

文献发布时间:2024-04-18 19:59:31


字节码指令序列分析方法、装置、电子设备、存储介质

技术领域

本发明涉及字节码分析领域,特别涉及一种字节码指令序列分析方法、装置、电子设备、存储介质。

背景技术

在现有技术中,在对字节码进行更新、维护或者拓展时,都采用的较大的分析粒度,通常为指令或者指令的操作数,如果以指令作为分析粒度,则每拓展一个新指令都将增加一个新的指令单元。如果以指令的操作数作为分析粒度,则在在拓展新指令的时候,会因为重新排列了操作数与操作数类型,而不得不增加一个新的指令单元。因此现有技术中的分析粒度较大,实现较为繁琐,并且不易于维护扩展。

发明内容

以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。

本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种字节码指令序列分析方法、装置、电子设备、存储介质,能够以单个操作数为分析粒度对字节码指令序列进行分析,实现起来较为简单,且易于维护拓展。

第一方面,本发明实施例提供了一种字节码指令序列分析方法,包括:

从字节码指令序列中获取待分析的字节码;其中,所述字节码指令序列包括至少一个待分析的所述字节码;

从所述字节码中提取操作码;

根据所述操作码确定至少一个操作数和所述操作数的操作数类型;

根据所述操作数类型确定所述操作数类型所对应的分析单元,逐一地通过所述分析单元对应地对所述操作数进行分析,得到所述字节码的字节码分析结果;

在所述字节码指令序列中的所述字节码均被获取、分析的情况下,输出指令序列分析结果;其中所述指令序列分析结果包括至少一个所述字节码分析结果。

在本发明的一些实施例中,所述从字节码指令序列中获取待分析的字节码,包括:

确定所述字节码指令序列中预先设置的全局指针的指向;

在所述全局指针未指向所述字节码指令序列的最后一个字节的情况下,根据所述全局指针的指向确定所述待分析的所述字节码。

在本发明的一些实施例中,所述在字节码指令序列中的所述字节码均被获取、分析的情况下,输出指令序列分析结果,包括:

在所述全局指针指向所述字节码指令序列的最后一个字节的情况下,确认对所述字节码指令序列的所述字节码的分析完成;

输出所述指令序列分析结果。

在本发明的一些实施例中,所述根据所述操作码确定至少一个操作数和所述操作数的操作数类型,包括:

根据所述操作码从指令集中获取对应的指令信息;

从所述指令信息中确定所述操作数的数量和各个所述操作数对应的所述操作数类型。

在本发明的一些实施例中,所述根据所述操作数类型确定所述操作数类型所对应的分析单元,所述逐一地通过所述分析单元对应地对所述操作数进行分析,得到所述字节码的字节码分析结果,包括:

在所述操作数的数量为多个的情况下,依次处理所述操作数,每处理一个所述操作数,根据所述操作数的所述操作数类型确定对应的一个所述分析单元;

通过确定的所述分析单元对应地对所述操作数进行分析,在多个所述操作数均被分析完成的情况下,得到当前分析的所述字节码的字节码分析结果。

在本发明的一些实施例中,所述字节码分析结果包括操作数描述,所述通过确定的所述分析单元对应地对所述操作数进行分析,包括:

在通过所述分析单元对单个所述操作数分析的过程中,根据预设字节数量读取所述操作数,生成所述操作数描述;

将所述操作数描述添加至所述字节码分析结果中。

在本发明的一些实施例中,所述字节码分析结果还包括操作名称;所述方法还包括:

从所述指令信息中获取所述操作名称;

将所述操作名称添加至所述字节码分析结果中。

第二方面,本发明实施例提供了一种字节码指令序列分析装置,包括:至少一个控制处理器和用于与所述至少一个控制处理器通信连接的存储器;所述存储器存储有可被所述至少一个控制处理器执行的指令,所述指令被所述至少一个控制处理器执行,以使所述至少一个控制处理器能够执行如第一方面实施例所述的字节码指令序列分析方法。

第三方面,本发明实施例提供了一种电子设备,包括有如上述第二方面所述的字节码指令序列分析装置。

第四方面,本发明实施例提供了一种计算机可读存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行如上述第一方面所述的字节码指令序列分析方法。

本发明实施例包括:通过利用字节码指令序列分析装置,从字节码指令序列中获取待分析的字节码;其中,字节码指令序列包括至少一个待分析的字节码;从字节码中提取操作码;根据操作码确定至少一个操作数和操作数的操作数类型;根据操作数类型确定操作数类型所对应的分析单元,逐一地通过分析单元对应地对操作数进行分析,得到字节码的字节码分析结果;在字节码指令序列中的字节码均被获取、分析的情况下,输出指令序列分析结果;其中指令序列分析结果包括至少一个字节码分析结果。本发明通过字节码的操作码找到对应的操作数,在分析时,通过操作数类型对应地确定分析单元,出现重复类型的操作数时,重复使用同一个分析单元分析多个操作数,而不需要使用另外的分析单元。即是说,本发明实施例能够以单个操作数为分析粒度对字节码指令序列进行分析,实现起来较为简单,且易于维护拓展。

附图说明

图1是本发明一个实施例提供的字节码指令序列分析方法的流程图;

图2为本发明一个实施例提供的字节码指令序列分析方法的具体流程图;

图3是本发明一个实施例提供的字节码指令序列分析装置的结构图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。

在本发明的描述中,需要理解的是,涉及到方位描述,例如上、下、前、后、左、右等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。

在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。

本发明的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。

本发明提供了一种字节码指令序列分析方法、字节码指令序列分析装置、电子设备、计算机可读存储介质;通过利用字节码指令序列分析装置,从字节码指令序列中获取待分析的字节码;其中,字节码指令序列包括至少一个待分析的字节码;从字节码中提取操作码;根据操作码确定至少一个操作数和操作数的操作数类型;根据操作数类型确定操作数类型所对应的分析单元;逐一地通过分析单元对应地对操作数进行分析,得到字节码的字节码分析结果;在字节码指令序列中的字节码均被获取、分析的情况下,输出指令序列分析结果;其中指令序列分析结果包括至少一个字节码分析结果。本发明实施例能够以单个操作数为分析粒度对字节码指令序列进行分析,实现起来较为简单,且易于维护拓展。

下面基于附图,对本发明实施例的控制方法作进一步阐述。

参照图1,图1为本发明实施例提供的一种字节码指令序列分析方法的流程图,该字节码指令序列分析方法包括但不限于有以下步骤:

步骤S100,从字节码指令序列中获取待分析的字节码;其中字节码指令序列包括至少一个待分析的字节码。

在本发明的一些实施例中,从字节码指令序列中获取待分析的字节码,包括:确定字节码指令序列中预先设置的全局指针的指向;在全局指针未指向字节码指令序列的最后一个字节的情况下,根据全局指针的指向确定待分析的字节码。

需要说明的是,如果此时全局指针已经指向字节码指令序列的最后一个字节,说明本字节码已经分析完成或者为无需分析的字节码指令。字节码通常由操作码与操作数组成,因此获得字节码的同时可以获得其中的操作码。获取待分析的字节码之后,将全局指针设定在字节码的第一字节上,由于字节码的格式为操作码、操作数1、操作数2...等等,因此此时全局指针已经指向了操作码的第一字节,方便对操作码进行提取。

步骤S200,从字节码中提取操作码。

具体地,通过预先设计的分析主程序从字节码中提取操作码。

步骤S300,根据操作码确定至少一个操作数和操作数的操作数类型。

本步骤中,能够通过操作码确定操作数的个数与操作数类型。

在本发明的一些实施例中,根据操作码确定至少一个操作数和操作数的操作数类型,包括:根据操作码从指令集中获取对应的指令信息;从指令信息中确定操作数的数量和各个操作数对应的操作数类型。

需要说明的是,通过操作码确定操作数的方式通常为,将操作码放入指令集中,从指令集中获得指令信息,指令信息中包括了操作码、操作数的个数与操作数类型以及操作名称。由于操作码作为指令的唯一标识,每一个指令都只会拥有一个操作码,因此将操作码输入至指令集,必然可以找到对应的指令与指令信息。

步骤S400,根据操作数类型确定操作数类型所对应的分析单元,逐一地通过分析单元对应地对操作数进行分析,得到字节码的字节码分析结果。

在本发明的一些实施例中,本步骤包括:在操作数的数量为多个的情况下,依次处理操作数,每处理一个操作数,根据操作数的操作数类型确定对应的一个分析单元;通过确定的分析单元对应地对操作数进行分析,在多个操作数均被分析完成的情况下,得到当前分析的字节码的字节码分析结果。

对步骤S400中的“根据操作数类型确定操作数类型所对应的分析单元”进行进一步说明,通过预先设计的分析主程序根据操作数类型确定操作数类型所对应的分析单元。

需要说明的是,字节码指令由操作码、操作数组成,而操作数还分为操作数类型与操作数个数,且指令在生成时,还将指定操作数的类型与个数。其中,操作数的类型具体由一个长整型数组体现,长数组中数据的个数由操作数的个数来决定。例如某一个字节码指令为操作码、操作数1、操作数2,则操作数类型的长整型数组则为[操作数1的类型,操作数2的类型]。且数组内部的数据所处的位置与操作数一一对应,其中操作数的类型由整数显示。在分析主程序中,将针对上述的操作数类型数字开辟出对应的分析单元。例如,对于1字节无符号常量类型的操作数可能由数字1表示,而对于2字节常量类型的操作数,则可能由数字2表示。

需要说明的是,有些操作数只占半个字符,因此会将两个半字节的操作数结合成为一个操作数,共同使用一个分析单元。

对步骤S400中的“逐一地通过分析单元对应地对操作数进行分析,得到字节码的字节码分析结果”进行进一步说明。具体的,在操作数的数量为多个的情况下,依次处理操作数,每处理一个操作数,都将根据选取的操作数的类型确定对应类型的分析单元;并根据选择得到的分析单元对字节码进行分析。同时在字节码中所有操作数均被分析完成的情况下,得到当前分析的字节码的字节码分析结果。

需要说明的是,字节码通常由一个操作码与0个到多个操作数组成,且每个操作数的类型都可能不同,且每个字节码的操作数个数都不同,因此在操作数的数量为多个的情况下,分析单元必须逐一地对操作数进行分析,每个操作数都会有对应类型,因此每次分析都会查找对应类型的分析单元,例如有1字节常量为类型的操作数,1字节无符号常量为类型的操作数,2字节常量为类型的操作数,2字节无符号常量为类型的操作数等。对于1字节常量为类型的操作数,分出1字节常量类型的分析单元。对于1字节无符号常量为类型的操作数,则分出以1字节无符号常量类型的分析单元。对于2字节常量为类型的操作数,分出2字节常量为类型的分析单元。对于2字节无符号常量为类型的操作数,则分出以2字节无符号常量类型的分析单元。并以此类推,直到开辟出针对所有操作数类型的分析单元为止。每次分析完一个操作数,全局指针都会往后移动一位,寻找下一个操作数。

步骤S500,在字节码指令序列中的字节码均被获取、分析的情况下,输出指令序列分析结果;其中指令序列分析结果包括至少一个字节码分析结果。

在本发明的一些实施例中,在字节码指令序列中的字节码均被获取、分析的情况下,输出指令序列分析结果,包括:在全局指针指向字节码指令序列的最后一个字节的情况下,确认对字节码指令序列的字节码的分析完成;输出指令序列分析结果。

在本发明的一些实施例中,字节码分析结果包括操作数描述,通过确定的分析单元对应地对操作数进行分析,包括:在通过分析单元对单个操作数分析的过程中,根据预设字节数量读取操作数,生成操作数描述;将操作数描述添加至字节码分析结果中。

需要说明的是,分析结果具体的是由可以自由定义的字符,与分析前的字节码组成。其中可自由定义的字符具体为如图所示的,按照虚拟机规范中助记符的格式定义,同时也能使用其他更加方便阅读的字符,例如中文等代替。分析结果具体用于展示某一个字节码的具体功能。

本实施例中,通过采用包括有上述步骤S110至步骤S140的字节码指令序列分析方法,通过利用字节码指令序列分析装置,从字节码指令序列中获取待分析的字节码;其中,字节码指令序列包括至少一个待分析的字节码;从字节码中提取操作码;根据操作码确定至少一个操作数和操作数的操作数类型;根据操作数类型确定操作数类型所对应的分析单元,逐一地通过分析单元对应地对操作数进行分析,得到字节码的字节码分析结果;在字节码指令序列中的字节码均被获取、分析的情况下,输出指令序列分析结果;其中指令序列分析结果包括至少一个字节码分析结果。本发明通过字节码的操作码找到对应的操作数,在分析时,通过操作数类型对应地确定分析单元,出现重复类型的操作数时,重复使用同一个分析单元分析多个操作数,而不需要使用另外的分析单元。即是说,本发明实施例能够以单个操作数为分析粒度对字节码指令序列进行分析,实现起来较为简单,且易于维护拓展。

在本发明的一些实施例中,字节码分析结果还包括操作名称;字节码指令序列分析方法还包括:从指令信息中获取操作名称;将操作名称添加至字节码分析结果中。

另外,举一示例,结合图2,对分析主程序中执行的字节码指令序列分析方法的整体流程进行说明。具体地包括以下步骤。

步骤S510:设置全局指针,令指针指向字节码指令序列的首字节。

需要说明的是,分析字节码时,设置一个全局指针,初始指向第一个字节位置(即指向第一个指令)。

步骤S520:指针是否指向最后一个字节;若是,则跳转执行步骤S570;若否,则跳转执行步骤S530。

需要说明的是,在指针指向字节码指令序列中的最后一个字节的情况下,表示字节码指令序列中仍存在待分析或未分析完成的字节码。在指针指向字节码指令序列中的最后一个字节的情况下,则表示字节码指令序列已分析完毕,不存在待分析的字节码。

此外,需要说明的是,有些字节码指令,例如返回指令,只有一个字节,或者字节码指令序列已经读取完毕,后续已经没有字节码。因此在读取操作码之前,应检查是否位于字节码的最后一个字节,防止造成资源的浪费。

步骤S530:读取操作码。

步骤S540:向后移动指针,确定操作数。

具体地,在读取操作码之后,令指针向后移动一个操作码的长度,可以找到操作数。读取第一个指令的操作码,操作码大小通常固定n个字节,指针向后移动n个字节,这时指针指向第一个指令的操作数首字节。

或者,分析各种类型的操作数时,读取操作数的1个字节,指针后移一位;生成易于理解的操作数描述,追加到分析结果上。操作数大小可等于但不限于1个字节,如果操作数大小是m个字节(m属于正整数),则连续读取m个字节,指针相应后移m位。

需要说明的是,由于字节码的格式以操作码作为开头,因此将指针往后移动一个操作码的长度,必然能够找到操作数。

步骤S560:判断是否有操作数未分析;若是,则跳转执行步骤S560;若否,则跳转执行步骤S520。

步骤S560:读取操作数,并确定操作数类型,调用对应的分析单元对操作数进行分析。

步骤S570:输出分析结果。

至此,结束字节码指令序列分析的流程。需要说明的是,最终分析主程序输出的分析结果即为在步骤S500中提出的指令序列分析结果。

综上所述,本发明实施例提供的一种字节码指令序列分析方法,利用字节码由操作码与操作数组成的原理,通过字节码的操作码找到对应的操作数。再通过操作数的类型开辟分析单元,每一个分析单元都对应一个操作数类型,因此每个操作数都能找到分析单元。在分析时,只需根据操作数类型进行分析单元的开辟,如果没有某一类型的操作数则无需开辟。本方法节省了字节码指令序列分析时所需要的资源,使其更符合逻辑。

如图3所示,图3是本发明一个实施例提供的字节码指令序列分析装置的结构图。本发明还提供了一种字节码指令序列分析装置700,包括:

处理器701,可以采用通用的中央处理器(Central Processing Unit,CPU)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本发明实施例所提供的技术方案;

存储器702,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器702可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器702中,并由处理器701来调用执行本发明实施例的一种字节码指令序列分析方法;

输入/输出接口703,用于实现信息输入及输出;

通信接口704,用于实现本装置与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;

总线705,在设备的各个组件(例如处理器701、存储器702、输入/输出接口803和通信接口704)之间传输信息;

其中处理器701、存储器702、输入/输出接口703和通信接口704通过总线705实现彼此之间在设备内部的通信连接。

本发明实施例还提供了一种电子设备,包括如上的字节码指令序列分析装置。

本发明实施例还提供了一种存储介质,存储介质为计算机可读存储介质,该存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述字节码指令序列分析方法。

存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,实现了以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包括计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的共享条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本发明所限定的范围内。

相关技术
  • 一种直流牵引供电系统电流增量保护测试方法和系统
  • 一种基于双端不同步电气量计算过渡电阻的方法
  • 一种地铁供电系统多电气量同步测试方法
  • 一种地铁供电系统多电气量同步测试方法
技术分类

06120116516536