本申请涉及字节码转换,具体涉及一种寄存器虚拟机字节码转换方法及装置。
背景技术:
1、为了实现应用的跨硬件平台运行,虚拟机技术被广泛使用。很多虚拟机是基于寄存器实现,即为虚拟机定义一些虚拟的寄存器,其功能类似于实际cpu的寄存器。一个虚拟机上,每个寄存器的字节长度是确定的,比如dalvik虚拟机上一个寄存器是4字节,小于和等于4字节长度的数据类型,都用一个寄存器进行存储,byte型数据一个字节、short型数据两个字节、int型数据4个字节,都需要用一个寄存器存储,大于4个字节的数据类型需要用多个寄存器存储,比如long型数据8字节,需要用两个连续编号的寄存器存储,但是在对应的操作long型数据的指令中,为了减小指令长度,只使用连续寄存器编号的第一个编号来表示long型数据的寄存器编号,虚拟机处理该指令时,会自动从这个编号的寄存器和它后面一个编号的寄存器取值。
2、很多时候,一个应用程序中大部分使用byte和short型数据就足够了,如果使用4字节的寄存器长度,就会有很多浪费。为了在存储器资源受限的设备上实现虚拟机,可以对虚拟机进行改造,将虚拟机的寄存器改造为2字节长度,同时要对之前在4字节虚拟机上运行的应用程序的字节码进行转换,使其可以在2字节寄存器长度的虚拟机上运行。
3、因此,为满足实际需求,现提供一种寄存器虚拟机字节码转换技术。
技术实现思路
1、本申请提供一种寄存器虚拟机字节码转换方法及装置,对目标函数的字节码进行识别,通过定位寄存器,对需要处理的强制类型转换指令进行对应处理,从而实现寄存器虚拟机字节码转换,以满足实际的寄存器使用需求。
2、为实现上述目的,本申请提供以下方案。
3、第一方面,本申请提供了一种寄存器虚拟机字节码转换方法,所述方法包括以下步骤:
4、识别目标函数的字节码,获取存储过int型数据的寄存器,创建对应的寄存器映射表;
5、基于所述寄存器映射表,遍历所述目标函数中强制类型转换指令,并基于预设流程对所述强制类型转换指令进行处理。
6、进一步的,基于所述寄存器映射表,遍历所述目标函数中强制类型转换指令,并基于预设流程对所述强制类型转换指令进行处理,包括以下步骤:
7、当所述强制类型转换指令为int转byte指令时,识别对应的源寄存器的对应存储数据的实际类型;
8、若所述对应存储数据的实际类型为short,则将所述强制类型转换指令转换为short转byte指令。
9、进一步的,当所述强制类型转换指令为int转short指令时,识别对应的源寄存器的对应存储数据的实际类型;
10、若所述对应存储数据的实际类型为byte,则不对所述强制类型转换指令进行。
11、进一步的,若所述强制类型转换指令对应的源寄存器和目标寄存器不同,则利用预设的寄存器赋值指令对所述源寄存器和所述目标寄存器进行替换。
12、进一步的,若所述强制类型转换指令对应的源寄存器和目标寄存器相同,则删除所述强制类型转换指令。
13、进一步的,基于所述寄存器映射表,遍历所述目标函数中强制类型转换指令,并基于预设流程对所述强制类型转换指令进行处理,包括以下步骤:
14、若所述强制类型转换指令对应的源寄存器用于存储int类型数据,则基于所述源寄存器的对应存储数据的实际类型,插入对应的类型转换指令。
15、进一步的,基于所述源寄存器的对应存储数据的实际类型插入对应的类型转换指令,包括以下步骤:
16、若基于所述源寄存器的对应存储数据的实际类型为byte,则向所述强制类型转换指令插入byte转int指令;
17、若基于所述源寄存器的对应存储数据的实际类型为short,则向所述强制类型转换指令插入short转int指令。
18、第二方面,本申请提供了一种寄存器虚拟机字节码转换装置,所述装置包括:
19、寄存器遍历识别模块,其用于识别目标函数的字节码,获取存储过int型数据的寄存器,创建对应的寄存器映射表;
20、指令遍历处理模块,其用于基于所述寄存器映射表,遍历所述目标函数中强制类型转换指令,并基于预设流程对所述强制类型转换指令进行处理。
21、进一步的,所述指令遍历处理模块还用于当所述强制类型转换指令为int转byte指令时,识别对应的源寄存器的对应存储数据的实际类型;
22、所述指令遍历处理模块还用于若所述对应存储数据的实际类型为short,则将所述强制类型转换指令转换为short转byte指令。
23、进一步的,所述指令遍历处理模块还用于当所述强制类型转换指令为int转short指令时,识别对应的源寄存器的对应存储数据的实际类型;
24、所述指令遍历处理模块还用于若所述对应存储数据的实际类型为byte,则不对所述强制类型转换指令进行。
25、进一步的,所述指令遍历处理模块还用于若所述强制类型转换指令对应的源寄存器和目标寄存器不同,则利用预设的寄存器赋值指令对所述源寄存器和所述目标寄存器进行替换。
26、进一步的,所述指令遍历处理模块还用于若所述强制类型转换指令对应的源寄存器和目标寄存器相同,则删除所述强制类型转换指令。
27、进一步的,所述指令遍历处理模块还用于若所述强制类型转换指令对应的源寄存器用于存储int类型数据,则基于所述源寄存器的对应存储数据的实际类型,插入对应的类型转换指令。
28、进一步的,所述指令遍历处理模块还用于若基于所述源寄存器的对应存储数据的实际类型为byte,则向所述强制类型转换指令插入byte转int指令;
29、所述指令遍历处理模块还用于若基于所述源寄存器的对应存储数据的实际类型为short,则向所述强制类型转换指令插入short转int指令。
30、本申请提供的技术方案带来的有益效果包括:
31、本申请对目标函数的字节码进行识别,通过定位寄存器,对需要处理的强制类型转换指令进行对应处理,从而实现寄存器虚拟机字节码转换,以满足实际的寄存器使用需求。
1.一种寄存器虚拟机字节码转换方法,其特征在于,所述方法包括以下步骤:
2.如权利要求1所述的寄存器虚拟机字节码转换方法,其特征在于,基于所述寄存器映射表,遍历所述目标函数中强制类型转换指令,并基于预设流程对所述强制类型转换指令进行处理,包括以下步骤:
3.如权利要求1所述的寄存器虚拟机字节码转换方法,其特征在于:
4.如权利要求3所述的寄存器虚拟机字节码转换方法,其特征在于,所述方法还包括以下步骤:
5.如权利要求3所述的寄存器虚拟机字节码转换方法,其特征在于,所述方法还包括以下步骤:
6.如权利要求1所述的寄存器虚拟机字节码转换方法,其特征在于,基于所述寄存器映射表,遍历所述目标函数中强制类型转换指令,并基于预设流程对所述强制类型转换指令进行处理,包括以下步骤:
7.如权利要求6所述的寄存器虚拟机字节码转换方法,其特征在于,基于所述源寄存器的对应存储数据的实际类型插入对应的类型转换指令,包括以下步骤:
8.一种寄存器虚拟机字节码转换装置,其特征在于,所述装置包括:
9.如权利要求8所述的寄存器虚拟机字节码转换装置,其特征在于:
10.如权利要求8所述的寄存器虚拟机字节码转换装置,其特征在于: