一种基于短名称的链接方法和系统与流程

文档序号:31468086发布日期:2022-09-09 22:14阅读:101来源:国知局
一种基于短名称的链接方法和系统与流程

1.本发明属于程序链接及映射的技术领域,具体涉及一种基于短名称的链接方法和系统。


背景技术:

2.在安全芯片(包括智能se、安全mcu等)领域中,支持动态下载应用的多应用芯片操作系统已经在金融、电信、交通等领域进行了广泛部署和使用。多应用芯片操作系统一般使用高级语言编写应用程序,通过编译器和相关转换工具编译转换成芯片操作系统支持的可执行二进制文件格式,可下载并安装到芯片操作系统的虚拟机中执行。
3.虚拟机是由一种被处理器执行的软件应用程序或指令序列产生的抽象计算机,平台无关指用python、java、kotlin等面向对象的高级编程语言编写的应用程序,可以在各种不同计算机平台上通过虚拟机来执行,虚拟机的指令序列是独立平台编码的一个或多个字节码代码流。高级语言虚拟机执行高级编程语言并用于32位或者64位结构,智能se、安全mcu等资源受限装置难以承载实现基于32位操作指令的虚拟机。高级语言虚拟机,指令通过常量池中符号名标识类、方法和域等程序元素,在解析这些程序元素的标识操作时需求较大的储存资源,在智能se、安全mcu等资源受限装置中不具备实用性。因此,现有技术方法中对程序指令元素的标识进行操作需要消耗大量存储资源而无法适用于资源受限装置中的问题。


技术实现要素:

4.针对现有技术中存在的缺陷,本发明的目的是提供一种基于短名称的链接方法和系统。该方法和系统通过对高级语言的元素名称进行重新名,既减少常量池的大小,也可对同类元素进行排序,便于应用安装到装置时进行类链接时定位引用元素位置,同时专门设计访问元素的指令,将访问内部元素的指令以及方法的异常处理程序的异常类直接使用内部部件的偏移位置,有效减少常量池的大小,进而减少指令的常量池索引解析操作,可以显著提高应用的下载和安装性能。
5.为达到以上目的,本发明采用的技术方案是:一种基于短名称的链接方法,包括以下步骤:
6.若接收到所输入的待转换应用文件,设定需要进行名称转换的成员的转换规则,所述成员包括公开类和接口、类的所有实例域、公开和受保护的静态域、公开和受保护的静态方法、虚方法、接口方法;设定内部成员访问指令使用内部成员的表示方法,所述内部成员访问指令包括静态域访问指令、静态方法调用指令及对象访问指令;设定所述成员进行名称转换的转换实现流程;根据所述成员进行名称转换的转换规则及所述内部成员访问指令使用内部成员的表示方法生成与所述待转换应用文件对应的可执行文件及名称映射文件;所述可执行文件包括应用信息段、链接数据段、动态绑定数据段、静态绑定段及代码段;对所述可执行文件进行解析安装。
7.进一步,所述设定需要进行名称转换的成员的转换规则,包括:设定公开类和接口的名称转换为有序的字符数量较少的短名称;设定类的所有实例域的名称转换为有序的字符数量较少的短名称;设定虚方法的名称转换为有序的字符数量较少的短名称;设定静态域、静态方法、接口方法的名称均转换为有序的字符数量较少的短名称。
8.进一步,所述设定所述成员进行名称转换的转换实现流程,包括:获取所述待转换应用文件中公开类和接口的名称并依次转换为由大写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;对所述待转换应用文件中的实例域按顺序进行排序分组,以将所述实例域分组为公开/受保护的基本类型、公开/受保护的引用类型、包或者私有的应用类型、包或者私有的基本类型,将实例域的名称依次转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

,记录其中首个引用类型的名称以及所有引用类型的个数;获取所述待转换应用文件中的虚方法的名称并依次转换为由小写字母组成的2字符短名称,虚方法中的公开/受保护的虚方法从根超类的虚方法开始依次转换为aa、ab、ac

az、ba、bb

mz;子类定义的虚方法接着超类的虚方法连续命名,且子类覆盖超类定义的虚方法则和超类转换的名称保持一致;虚方法中包可见的虚方法从无同包超类的类的虚方法开始依次转换为na、nb、nc

zz;子类定义的虚方法接着同包中的超类的虚方法连续命名,覆盖同包超类声明的虚方法则和超类转换的名称保持一致;获取所述待转换应用文件中接口方法的名称并依次转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;获取所述待转换应用文件中公开和受保护的静态域的名称并判断静态域是否为fianl基本数据类型的静态域;若是则将静态域的名称转换为2字符短名称zz并获取对应的常数值;若不是则将静态域的名称依次转换为其它由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;获取所述待转换应用文件中公开和受保护的静态方法并依次将静态方法的名称转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb


9.进一步,所述根据所述成员进行名称转换的转换规则及所述内部成员访问指令使用内部成员的表示方法生成与所述待转换应用文件对应的可执行文件及名称映射文件,包括:获取待转换应用文件中各成员的元素名称与转换后名称的映射关系,以生成对应的名称映射文件;获取所述待转换应用文件中应用的标识信息和安装方法在代码段的偏移,以及所输入的应用的实现类的配置参数组合以生成对应的应用信息段,其中应用的安装方法由应用类的静态方法实现;获取所述待转换应用文件中声明的所有类的信息及接口的信息,以生成对应的动态绑定数据段;所述类的信息包括新建实例指令需要的所有信息;获取所述待转换应用文件中声明的所有静态域的信息,以生成对应的静态绑定数据段;根据名称映射文件生成与所述待转换应用文件对应的链接数据段,所述链接数据段包括导入包子段、常量池子段、代码常量池索引位置子段、本包输出项子段;获取所述待转换应用文件中所有类定义的方法的字节码以及异常处理程序信息,以生成对应的代码段。
10.进一步,所述根据名称映射文件生成与所述待转换应用文件对应的链接数据段,包括:从所述名称映射文件获取每个导入包的表述信息,以生成对应的导入包子段;从所述待转换应用文件的代码段中获取指令引用的类、方法和域,以生成对应的常量池子段;获取所述待转换应用文件中所有常量池索引的位置,以生成对应的代码常量池索引位置子段;获取所述待转换应用文件中每个类在动态绑定数据段中的偏移,以及类中每个静态域在静态域镜像中的偏移、类中每个静态方法在代码段中的偏移,以生成对应的本包输出项子段。
11.一种基于短名称的链接系统,包括以下装置:转换规则设定装置,用于若接收到所输入的待转换应用文件,设定需要进行名称转换的成员的转换规则,所述成员包括公开类和接口、类的所有实例域、公开和受保护的静态域、公开和受保护的静态方法、虚方法、接口方法;表示方法设定装置,用于设定内部成员访问指令使用内部成员的表示方法,所述内部成员访问指令包括静态域访问指令、静态方法调用指令及对象访问指令;转换实现流程设定装置,用于设定所述成员进行名称转换的转换实现流程;文件生成装置,用于根据所述成员进行名称转换的转换规则及所述内部成员访问指令使用内部成员的表示方法生成与所述待转换应用文件对应的可执行文件及名称映射文件;所述可执行文件包括应用信息段、链接数据段、动态绑定数据段、静态绑定段及代码段;文件解析安装装置,用于对所述可执行文件进行解析安装。
12.进一步,所述转换规则设定装置包括单元:第一设定单元,用于设定公开类和接口的名称转换为有序的字符数量较少的短名称;第二设定单元,用于设定类的所有实例域的名称转换为有序的字符数量较少的短名称;第三设定单元,用于设定虚方法的名称转换为有序的字符数量较少的短名称;第四设定单元,用于设定静态域、静态方法、接口方法的名称均转换为有序的字符数量较少的短名称。
13.进一步,所述转换实现流程设定装置包括单元:第一转换实现单元,用于获取所述待转换应用文件中公开类和接口的名称并依次转换为由大写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;第二转换实现单元,用于对所述待转换应用文件中的实例域按顺序进行排序分组,以将所述实例域分组为公开/受保护的基本类型、公开/受保护的引用类型、包或者私有的应用类型、包或者私有的基本类型,将实例域的名称依次转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

,记录其中首个引用类型的名称以及所有引用类型的个数;第三转换实现单元,用于获取所述待转换应用文件中的虚方法的名称并依次转换为由小写字母组成的2字符短名称,虚方法中的公开/受保护的虚方法从根超类的虚方法开始依次转换为aa、ab、ac

az、ba、bb

mz;子类定义的虚方法接着超类的虚方法连续命名,且子类覆盖超类定义的虚方法则和超类转换的名称保持一致;虚方法中包可见的虚方法从无同包超类的类的虚方法开始依次转换为na、nb、nc

zz;子类定义的虚方法接着同包中的超类的虚方法连续命名,覆盖同包超类声明的虚方法则和超类转换的名称保持一致;第四转换实现单元,用于获取所述待转换应用文件中接口方法的名称并依次转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;第五转换实现单元,用于获取所述待转换应用文件中公开和受保护的静态域的名称并判断静态域是否为fianl基本数据类型的静态域;若是则将静态域的名称转换为2字符短名称zz并获取对应的常数值;若不是则将静态域的名称依次转换为其它由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;第六转换实现单元,用于获取所述待转换应用文件中公开和受保护的静态方法并依次将静态方法的名称转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb


14.进一步,所述文件生成装置包括单元:名称映射文件生成单元,用于获取待转换应用文件中各成员的元素名称与转换后名称的映射关系,以生成对应的名称映射文件;应用信息段生成单元,用于获取所述待转换应用文件中应用的标识信息和安装方法在代码段的偏移,以及所输入的应用的实现类的配置参数组合以生成对应的应用信息段,其中应用的安装方法由应用类的静态方法实现;动态绑定数据段生成单元,用于获取所述待转换应用
文件中声明的所有类的信息及接口的信息,以生成对应的动态绑定数据段;所述类的信息包括新建实例指令需要的所有信息;静态绑定数据段生成单元,用于获取所述待转换应用文件中声明的所有静态域的信息,以生成对应的静态绑定数据段;链接数据段生成单元,用于根据名称映射文件生成与所述待转换应用文件对应的链接数据段,所述链接数据段包括导入包子段、常量池子段、代码常量池索引位置子段、本包输出项子段;代码段生成单元,用于获取所述待转换应用文件中所有类定义的方法的字节码以及异常处理程序信息,以生成对应的代码段。
15.进一步,所述链接数据段生成单元包括单元:导入包子段生成单元,用于从所述名称映射文件获取每个导入包的表述信息,以生成对应的导入包子段;常量池子段生成单元,用于从所述待转换应用文件的代码段中获取指令引用的类、方法和域,以生成对应的常量池子段;常量池索引位置子段生成单元,用于获取所述待转换应用文件中所有常量池索引的位置,以生成对应的代码常量池索引位置子段;本包输出项子段生成单元,用于获取所述待转换应用文件中每个类在动态绑定数据段中的偏移,以及类中每个静态域在静态域镜像中的偏移、类中每个静态方法在代码段中的偏移,以生成对应的本包输出项子段。
16.本发明的效果在于:采用本发明所述的方法,通过对高级语言的元素名称进行重新名,既减少常量池的大小,也可对同类元素进行排序,便于应用安装到装置时进行类链接时定位引用元素位置,同时专门设计访问元素的指令,将访问内部元素的指令直接使用内部部件的偏移位置,有效减少常量池的大小,进而减少指令的常量池索引解析操作,可以显著提高应用的下载和安装性能。
附图说明
17.图1是本发明所述方法的流程图;
18.图2为本发明所述方法的子流程示意图;
19.图3为本发明所述方法的另一子流程示意图;
20.图4为本发明所述方法的又一子流程示意图;
21.图5为本发明所述方法的再一子流程示意图;
22.图6是本发明所述系统的结构图;
具体实施方式
23.下面结合附图和具体实施方式对本发明作进一步描述。
24.如图1所示,一种基于短名称的链接方法,该基于短名称的链接方法应用于用户终端中,该基于短名称的链接方法通过安装于用户终端中的应用软件进行执行,用户终端即是用于执行基于短名称的链接方法以对程序文件中定义的类和接口进行转换得到可执行文件及名称映射文件并输入其它装置进行安装的终端设备,如台式电脑、笔记本电脑、平板电脑或手机等,通过名称映射文件对可执行文件进行快速解析安装并安装于智能se、安全mcu等资源受限装置中。
25.本发明描述了一种采用紧凑、安全文件格式以及专有指令格式表示面向对象程序的链接信息的方法。利用这种方法能够在资源受限装置上下载、链接和执行所述程序。下面参照智能se描述了特定的实现,本发明也可以用于其他类似的资源受限装置。用户编写包
括一个或者多个类的程序包,采用采用高级语言编译器编译源码产生一个或者多个类文件,采用运行在工作站上的转换程序将一个包中所有类文件转换为一个紧凑的可加载运行的程序文件,除被转换的类文件外,转换程序接受一个或者多个名称映射文件作为其输入,名称映射文件包含导入包的包信息、类以及类成员的字符名映射信息,该程序文件通过运行在工作站的安装程序下载安装到资源受限的设备。
26.名称映射文件包括程序包的标识信息,名称映射文件还包括源程序声明或者定义的外部可见的程序元素的符号名称以及对应的转换后的短符号名称。名称映射文件包括程序包定义的所有公开类和接口的名称映射,以及在这些类和接口中定义的所有公开和受保护的域和方法的名称映射,名称映射文件用于程序包的转换,转换时需要提供待转换包导入的所有包的名称映射文件。
27.通常该程序文件包括单个程序包中定义的所有类和接口,由8位字节流表示,16位整数用两个连续的8位字节表示,32位整数用四个连续的8位字节表示。该程序文件包括应用信息段、动态绑定数据段、静态绑定数据段、代码段、链接数据段。
28.应用信息段包括应用安装信息;动态绑定数据段包括包中所有类信息;静态绑定数据段包括所有类声明的静态域信息;代码段包括所有类定义方法的字节码、异常处理等内容;链接数据段进一步包括常量池子段、导入包子段、代码常量池索引位置子段以及本包导出项子段,常量池子段、导入包子段、代码常量池索引位置子段包括安装本包链接操作时需要的数据,本包导出项子段安装后保存到se的持久化存储区,用于安装其他导入此包的包链接时使用。
29.常量池子段通常包括一个或者多个外部可见的类、域和方法的名称转换后的短符号名称,方法短符号名称可用于定位导入包的代码子段中方法位置;类短符号名称可用于定位导入包的动态绑定数据段段中类位置,域短符号名称可用于定位导入包的静态绑定数据段中域的位置信息。
30.包含应用的包称为应用包,不包含应用的包称为库包,转换程序转换库包时输出符号名称映射文件,每个库包对应一个输出符号名称映射文件,符号名称映射文件只包含公开的信息,如包的aid和版本信息或者其他标识包的信息,程序元素的原符号名称、转换后短符号名称等,不涉及库包实现的细节;转换应用包通常不输出符号名称映射文件,只有应用包使用共享接口时才需要输出符号名称映射文件,符号名称映射文件提供共享接口方法名称转换信息,不涉及应用的敏感内容。
31.本包定义的成员下文称为内部成员,导入包定义的成员称为外部成员,使用外部成员的指令通过常量池索引实现,访问内部成员的指令通过成员的内部表示实现。
32.为减少常量池的大小,方便标识成员的位置,转换程序需要对包的外部可见成员进行名称转换,将任意长度的原符号名称统一转换为指定字符的字符名称,本发明选择2字符名称示例说明,方法同样适用其他长度的字符名称。之所以选择2字符的长度是考虑满足映射成员个数要求的前提选择尽可能短的名称,只包含英文字母的2字符名称可以命名26*26个成员,可以满足资源受限的设备上使用。如图1所示,本发明的方法包括以下步骤:
33.s110、若接收到所输入的待转换应用文件,设定需要进行名称转换的成员的转换规则,所述成员包括公开类和接口、类的所有实例域、公开和受保护的静态域、公开和受保护的静态方法、虚方法、接口方法。
34.在一实施例中,如图2所示,步骤s110包括子步骤s111、s112、s113和s114。
35.s111、设定公开类和接口的名称转换为有序的字符数量较少的短名称。
36.具体的,需要进行名称转换的成员包括public类和接口、类的所有实例域、公开和受保护的静态域、公开和受保护的静态方法和构造方法。
37.名称转换的转换规则中,类、接口、域都采用较少字符的短名称来表示,也即短名称的字符数量少于类、接口的名称中所包含的字符数量。例如,可将类、方法以及域都采用2字符短名称标识。例如,类(接口)的短名称格式,按照高级语言通常约定首字符采用大写的英文字母,第二个字符采用大写的英文字母,类(接口)从aa开始连续编号,名称按照字母顺序依次分配类、接口的短名称为aa、ab、ac

az、ba、bb、bc

bz、ca、cb、cc


38.上述示例仅仅是短名称的一种转换形式,实际中可以不限定字符类型、字符数量,也不限定按顺序排列或倒序排列,或其它排列方式。例如,字符类型可以是字母、标点符号或其它符号等,字符数量可以是2个,3个或4个等。例如,采用aa、ab、ac也是可以的,或者其他开始的字符组合;或者不由aa开始,由ccc开始排序都可以,字母和数字组合也可以,比如a1、a2,
……
或者a1、a2、
……
等等。
39.s112、设定类的所有实例域的名称转换为有序的字符数量较少的短名称。
40.方法和域名的名称均可转换为字符数量较少的短名称,也即短名称的字符数量少于方法和域名的名称中所包含的字符数量。例如,按照高级语言通常约定首字符采用小写的英文字母,第二个字符采用小写的英文字母,名称按照字母顺序依次分配方法和域名的的短名称为aa、ab、ac

az、ba、bb、bc

bz、ca、cb、cc

。其中,每个类的所有实例域从aa开始连续命名,int类型实例域后面的实例域需要跳过一个名称。
41.s113、设定虚方法的名称转换为有序的字符数量较少的短名称。
42.名称转换的转换规则中,虚方法具体分为两种,公开/受保护的和包可见两类虚方法分别命名编号。例如,将虚方法的名称转换为小写字母组成的2字符的短名称,公开/受保护的虚方法从根超类的虚方法开始,从aa开始连续命名,包可见的虚方法从无本包超类的类的虚方法开始命名,从na开始连续命名。
43.s114、设定静态域、静态方法、接口方法的名称均转换为有序的字符数量较少的短名称。
44.名称转换的转换规则中,静态域、静态方法、接口方法的名称均可转换为字符数量较少的短名称,也即短名称的字符数量少于静态域、静态方法、接口方法的名称中所包含的字符数量。例如,每个类的公开/受保护的静态域从aa开始连续命名,每个类的公开/受保护的静态方法(包括构造方法)从aa开始连续命名,每个接口的方法从aa开始连续命名。
45.s120、设定内部成员访问指令使用内部成员的表示方法,所述内部成员访问指令包括静态域访问指令、静态方法调用指令及对象访问指令;设定方法的异常处理程序的内部类使用内部成员的表示方法。
46.对下述三类指令进行特殊设计,内部成员访问指令使用内部成员的表示方法,不使用常量池索引的方式,从而可以减少常量池子段的大小,并减少常量池索引解析的操作,可明显提升程序包的下载性能。内部成员访问指令包括静态域访问指令、静态方法调用指令及对象访问指令。
47.对于静态域访问指令,通常包括两类功能的指令,读静态域和写静态域,每类指令
可实现为一条或者多条指令;指令包括常量池索引和静态域镜像的偏移,通过最高位区分是常量池索引还是静态域镜像的偏移;也可以设计单独的访问外包静态域指令和内包静态指令,外包静态域指令使用常量池索引参数,内包静态指令使用静态域镜像的偏移。
48.对于静态方法调用指令,指令包括常量池索引和代码段的偏移,通过最高位区分是常量池索引还是代码段的偏移;也可以设计单独的调用外包静态方法的指令和内包静态方法的指令,外包静态方法指令使用常量池索引参数,内包静态方法指令使用代码段的偏移。
49.对于对象访问指令,通常包括三条指令,新建实例指令、checkcast指令以及instanceof指令;指令包括常量池索引和动态绑定数据段的偏移,通过最高位区分是常量池索引还是动态绑定数据段的偏移;也可以设计单独的调用外包和内包的指令,外包指令使用常量池索引参数,内包指令使用动态绑定数据段的偏移。
50.此外,对于下述指令通常不包括内部成员表示方法的参数:实例域访问指令包含指向实例域引用类型的常量池索引参数、虚方法调用指令包含指向虚方法引用类型的常量池索引参数、super方法调用指令包含指向super方法引用类型的常量池索引参数。接口方法调用指令不使用常量池索引,使用类的实现接口表的接口方法索引。
51.s130、设定所述成员进行名称转换的转换实现流程。
52.在一实施例中,如图3所示,步骤s130包括子步骤s131、s132、s133、s134、s135和s136。
53.s131、获取所述待转换应用文件中公开类和接口的名称并依次转换为由大写字母组成的2字符短名称:aa、ab、ac

az、ba、bb


54.获取程序包中公开类和接口,依次转换类或者接口的名称为2字符短名称,aa、ab、ac

az、ba、bb


55.s132、对所述待转换应用文件中的实例域按顺序进行排序分组,以将所述实例域分组为公开/受保护的基本类型、公开/受保护的引用类型、包或者私有的应用类型、包或者私有的基本类型,将实例域的名称依次转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

,记录其中首个引用类型的名称以及所有引用类型的个数。
56.具体的,获取类的所有实例域,按照下述4种分类方式对实例域进行分组,并按照下述顺序排序分组:公开/受保护的基本类型、公开/受保护的引用类型、包或者私有的应用类型、包或者私有的基本类型。依次转换实例域的名称为2字符短名称,aa、ab、ac

az、ba、bb、bc

,记录首个引用类型的名称以及所有引用类型的个数。
57.s133、获取所述待转换应用文件中的虚方法的名称并依次转换为由小写字母组成的2字符短名称,虚方法中的公开/受保护的虚方法从根超类的虚方法开始依次转换为aa、ab、ac

az、ba、bb

mz;子类定义的虚方法接着超类的虚方法连续命名,且子类覆盖超类定义的虚方法则和超类转换的名称保持一致;虚方法中包可见的虚方法从无同包超类的类的虚方法开始依次转换为na、nb、nc

zz;子类定义的虚方法接着同包中的超类的虚方法连续命名,覆盖同包超类声明的虚方法则和超类转换的名称保持一致。
58.对下述两类虚方法分别进行名称转换:公开类的公开和受保护的虚方法、包可见虚方法。公开类的公开和受保护的虚方法的名称转换规则为:根超类虚方法名称转换,从根超类的虚方法开始转换,第一个虚方法转换为aa,第二个转换为ab,依次类推。
59.对于子类虚方法名称转换,子类定义的虚方法接着超类的虚方法连续命名,子类覆盖超类定义的虚方法则和超类转换的名称保持一致;若超类非本包定义,需要通过超类包的名称影射表获取超类最大编号的虚方法名称。
60.包可见虚方法的名称转换规则包括:无同包超类的类,从根超类的虚方法开始转换,第一个虚方法转换为na,第二个转换为nb,依次类推;有同包超类的类,子类定义的虚方法接着同包中的超类的虚方法连续命名,覆盖同包超类声明的虚方法则和超类转换的名称保持一致。
61.s134、获取所述待转换应用文件中接口方法的名称并依次转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb


62.对于每个接口,获取方法列表,依次转换接口方法的名称为2字符短名称,aa、ab、ac

az、ba、bb、bc


63.s135、获取所述待转换应用文件中公开和受保护的静态域的名称并判断静态域是否为fianl基本数据类型的静态域;若是则将静态域的名称转换为2字符短名称zz并获取对应的常数值;若不是则将静态域的名称依次转换为其它由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb


64.对于每个公开类或者接口,获取公开和受保护的类型的静态域如果是final基本数据类型的静态域(即编译时常数),将域名转换为zz,并在名称映射文件记录对应的常数值。否则依次转换静态域的名称为2字符短名称,aa、ab、ac

az、ba、bb、bc


65.s136、获取所述待转换应用文件中公开和受保护的静态方法并依次将静态方法的名称转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb


66.对于每个公开类,获取公开和受保护的类型的静态方法和构造方法,依次转换静态方法的名称为2字符短名称,aa、ab、ac

az、ba、bb、bc


67.s140、根据所述成员进行名称转换的转换规则及所述内部成员访问指令使用内部成员的表示方法生成与所述待转换应用文件对应的可执行文件及名称映射文件;所述可执行文件包括应用信息段、链接数据段、动态绑定数据段、静态绑定段及代码段。
68.在一实施例中,如图4所示,步骤s140包括子步骤s141、s142、s143、s144、s145和s146。
69.s141、获取待转换应用文件中各成员的元素名称与转换后名称的映射关系,以生成对应的名称映射文件。安装可执行文件时不需要名称映射文件,名称映射文件只用于转换文件时使用。
70.获取待转换应用文件中的公开类和接口、类的所有实例域、公开和受保护的静态域、公开和受保护的静态方法、虚方法、接口方法元素名称与转换后名称的映射关系,即可生成对应的名称映射文件。
71.s142、获取所述待转换应用文件中应用的标识信息和安装方法在代码段的偏移,以及所输入的应用的实现类的配置参数组合以生成对应的应用信息段,其中应用的安装方法由应用类的静态方法实现。
72.应用信息段包括每个应用的标识信息和安装方法在代码段的偏移,应用的实现类由转换程序的输入配置参数(或者输入配置文件)方式提供,应用的安装方法由应用类的静态方法实现,例如:application类的子类,需要实现install方法。
73.s143、获取所述待转换应用文件中声明的所有类的信息及接口的信息,以生成对应的动态绑定数据段;所述类的信息包括新建实例指令需要的所有信息。
74.动态绑定数据段包括包中声明的所有类和接口,类信息包括新建实例指令需要的所有信息,每个类包含如下信息:类的标记、实现接口个数、类的超类引用、声明的实例域个数、第一个引用类型的短符号名称、引用类型的个数、定义的最小顺序公开/受保护的虚方法短符号名称、定义的最小顺序包可见虚方法短符号名称、公开/受保护的虚方法表、包可见的虚方法表、实现的接口信息表。每个接口包含如下信息:接口的标记、实现超接口个数、超接口引用类别。
75.其中,虚方法表的构建过程为:对所述待转换应用文件中的虚方法的名称进行顺序排列以构建虚方法表;虚方法表中包含公开/受保护的虚方法表及包可见虚方法表,本包定义的虚方法为该方法在代码段中偏移,外包定义的虚方法,设置一个区别于有效偏移的特殊值。接口表的构建过程为:对所述待转换应用文件中接口方法的名称进行顺序排列并获取对应虚方法的短名称以构建接口表,指定接口方法的短符号名对应的虚方法的短符号名,实现的接口表的接口方法按照短符号名称排序,接口方法列表的内容为对应虚方法的短符号名称。
76.s144、获取所述待转换应用文件中声明的所有静态域的信息,以生成对应的静态绑定数据段。
77.静态绑定数据段包括本包声明的所有静态域信息,具体包括:有初始值的数组引用类型、初始为null的引用类型、初始化缺省值的基本类型、初始化非缺省值的基本类型。需要将所有引用类型分类连续存放便于垃圾回收算法的实现。
78.s145、根据名称映射文件生成与所述待转换应用文件对应的链接数据段,所述链接数据段包括导入包子段、常量池子段、代码常量池索引位置子段、本包输出项子段。
79.在一实施例中,如图5所示,步骤s145包括子步骤s1451、s1452、s1453和s1454。
80.s1451、从所述名称映射文件获取每个导入包的表述信息,以生成对应的导入包子段。
81.导入包子段包括每个导入包的标识信息,这些信息可从每个包的名称映射文件获取。
82.s1452、从所述待转换应用文件的代码段中获取指令引用的类、方法和域,以生成对应的常量池子段。
83.常量池子段包括代码段中的指令引用的类、方法和域,具体包括:外包声明的公开类、外包公开类和内包类声明的实例域、外包公开类和内包类声明的虚方法、外包公开类定义的公开或者受保护的静态方法和实例初始化方法、外包公开类定义的公开或者受保护的静态域,这些成员都是转换名称后的短符号名称。
84.s1453、获取所述待转换应用文件中所有常量池索引的位置,以生成对应的代码常量池索引位置子段。
85.代码常量池索引位置子段可用于指出代码段中所有常量池索引的位置,安装包需要将这些常量池索引解析为se的内部表示。
86.s1454、获取所述待转换应用文件中每个类在动态绑定数据段中的偏移,以及类中每个静态域在静态域镜像中的偏移、类中每个静态方法在代码段中的偏移,以生成对应的
本包输出项子段。
87.本包输出项子段包括每个类在动态绑定数据段中的偏移,类中每个静态域在静态域镜像中的偏移,类中每个静态方法在代码段中的偏移。
88.示例存储布局方式如下:
89.类aa
90.类的静态域列表aa、ab、ac

91.类的静态方法类别aa、ab、ac

92.类ab
93.类的静态域列表aa、ab、ac

94.类的静态方法类别aa、ab、ac

95.其中,类的排列顺序必须和类短名称从小到大字母顺序一致,即aa、ab、ac

;类的静态域的排列顺序必须和域短名称从小到大字母顺序一致,即aa、ab、ac

;类的静态方法的排列顺序必须和静态方法短名称从小到大字母顺序一致,即aa、ab、ac

;短名称信息可从导入包的名称映射文件中获取。也可以采用其他存储方式,只要每类成员的顺序和符号名称的字母顺序一致即可。
96.s146、获取所述待转换应用文件中所有类定义的方法的字节码以及异常处理程序信息,以生成对应的代码段。
97.代码段包括所有类定义的方法的字节码以及异常处理程序信息,具体包括异常处理程序信息及方法信息,其中方法信息包括方法的参数个数、方法使用寄存器的个数,以及方法异常处理程序的字节码。
98.s150、对所述可执行文件进行解析安装。
99.解析安装包含一个或多个应用的应用包以及无应用的库包的安装,解析安装的具体过程包括:将可执行文件的各个段下载到资源受限装置内;保存应用信息到资源受限装置的持久化存储区;解析动态链接段的常量池引用后保存到资源受限装置的持久化存储区;解析代码段的常量池引用后保存到资源受限装置的持久化存储区;依据静态绑定数据段内容创建静态域镜像;保存本包导出项子段的内容;可以丢弃常量池子段的内容。
100.对于类的链接,可执行文件中的外部符号引用可以在设备上从符号和索引形式解析为虚拟机使用的内部表示。
101.短符号名称转索引的方式为:
102.aa ab ac

依次转换索引0、1、2

103.aa ab ac

依次转换索引0、1、2

104.na nb nc

依次转换索引0、1、2


105.对于外部类的解析,可依据导入包子段中导入包的标识信息可查询到se已安装包的位置信息,将外部类短名称转换为导入包的导出项子段类索引,使用类索引查询该类在动态绑定数据段中的偏移。
106.对于外部静态域的解析,可将外部静态域的短符号名称转换为导入包的导出项子段指定类的域索引,使用域索引查询该域在静态域镜像中的偏移。
107.对于外部静态方法的解析,可将外部静态方法的短符号名称转换为导入包的导出项子段指定类的静态方法索引,使用方法索引查询该静态方法在代码段中的偏移。对于实
例域的解析,可将实例域的短符号名称转换为实例域索引。对于虚方法的解析,外包公开/受保护的虚方法的解析过程为:将虚方法短符号名转换为公开/受保护的虚方法索引,查找超类的虚方法表获取虚方法的在代码段中的偏移位置。内包虚方法的解析过程为:将虚方法短符号名转换为包可见虚方法索引,查找虚方法表获取虚方法的在代码段中的偏移位置。
108.在资源受限装置动态下载安装面向对象语言编写的应用和库时,通过将程序包采用紧凑的格式、外部符号名转换为包含定位信息的短符号名称以及特殊设计成员访问指令格式的方法,可明显提高程序包的安装速度,减少程序包占用的se持久化存储空间,提高应用的执行性能。
109.相比现有基于单字节标记(最多256个成员)的链接方法,基于短名称的链接方法支持引用更多的外部包成员,本技术方案的示例采用的2字符长度,可支持26*26=676个成员个数。
110.本实施例中,设定需进行名称转换的成员的转换规则,设定内部成员访问指令使用内部成员的标识方法,设定成员进行名称转换的转换实现流程;根据所述成员进行名称转换的转换规则及所述内部成员访问指令使用内部成员的表示方法生成与所述待转换应用文件对应的可执行文件及名称映射文件;对所述可执行文件进行解析安装。通过上述方法,能够有效减少常量池的大小,进而减少指令的常量池索引解析操作,可以显著提高应用的下载和安装性能。
111.如图6所示,一种基于短名称的链接系统,该系统可配置于用户终端中,该系统用于执行前述的基于短名称的链接方法的任一实施例,包括以下装置:转换规则设定装置110、表示方法设定装置120、转换实现流程设定装置130、文件生成装置140和文件解析安装装置150。
112.转换规则设定装置110,用于若接收到所输入的待转换应用文件,设定需要进行名称转换的成员的转换规则,所述成员包括公开类和接口、类的所有实例域、公开和受保护的静态域、公开和受保护的静态方法、虚方法、接口方法。
113.在一具体实施例中,所述转换规则设定装置110包括单元:第一设定单元,用于设定公开类和接口的名称转换为有序的字符数量较少的短名称;第二设定单元,用于设定类的所有实例域的名称转换为有序的字符数量较少的短名称;第三设定单元,用于设定虚方法的名称转换为有序的字符数量较少的短名称;第四设定单元,用于设定静态域、静态方法、接口方法的名称均转换为有序的字符数量较少的短名称。
114.表示方法设定装置120,用于设定内部成员访问指令使用内部成员的表示方法,所述内部成员访问指令包括静态域访问指令、静态方法调用指令及对象访问指令;还用于设定方法的异常处理程序的内部类使用内部成员的表示方法。
115.转换实现流程设定装置130,用于设定所述成员进行名称转换的转换实现流程。
116.在一具体实施例中,所述转换实现流程设定装置130包括单元:第一转换实现单元,用于获取所述待转换应用文件中公开类和接口的名称并依次转换为由大写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;第二转换实现单元,用于对所述待转换应用文件中的实例域按顺序进行排序分组,以将所述实例域分组为公开/受保护的基本类型、公开/受保护的引用类型、包或者私有的应用类型、包或者私有的基本类型,将实例域的名称依次转
换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

,记录其中首个引用类型的名称以及所有引用类型的个数;第三转换实现单元,用于获取所述待转换应用文件中的虚方法的名称并依次转换为由小写字母组成的2字符短名称,虚方法中的公开/受保护的虚方法从根超类的虚方法开始依次转换为aa、ab、ac

az、ba、bb

mz;子类定义的虚方法接着超类的虚方法连续命名,且子类覆盖超类定义的虚方法则和超类转换的名称保持一致;虚方法中包可见的虚方法从无同包超类的类的虚方法开始依次转换为na、nb、nc

zz;子类定义的虚方法接着同包中的超类的虚方法连续命名,覆盖同包超类声明的虚方法则和超类转换的名称保持一致;第四转换实现单元,用于获取所述待转换应用文件中接口方法的名称并依次转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;第五转换实现单元,用于获取所述待转换应用文件中公开和受保护的静态域的名称并判断静态域是否为fianl基本数据类型的静态域;若是则将静态域的名称转换为2字符短名称zz并获取对应的常数值;若不是则将静态域的名称依次转换为其它由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb

;第六转换实现单元,用于获取所述待转换应用文件中公开和受保护的静态方法并依次将静态方法的名称转换为由小写字母组成的2字符短名称:aa、ab、ac

az、ba、bb


117.文件生成装置140,用于根据所述成员进行名称转换的转换规则及所述内部成员访问指令使用内部成员的表示方法生成与所述待转换应用文件对应的可执行文件及名称映射文件;所述可执行文件包括应用信息段、链接数据段、动态绑定数据段、静态绑定段及代码段。
118.在一具体实施例中,所述文件生成装置140包括单元:名称映射文件生成单元,用于获取待转换应用文件中各成员的元素名称与转换后名称的映射关系,以生成对应的名称映射文件;应用信息段生成单元,用于获取所述待转换应用文件中应用的标识信息和安装方法在代码段的偏移,以及所输入的应用的实现类的配置参数组合以生成对应的应用信息段,其中应用的安装方法由应用类的静态方法实现;动态绑定数据段生成单元,用于获取所述待转换应用文件中声明的所有类的信息及接口的信息,以生成对应的动态绑定数据段;所述类的信息包括新建实例指令需要的所有信息;静态绑定数据段生成单元,用于获取所述待转换应用文件中声明的所有静态域的信息,以生成对应的静态绑定数据段;链接数据段生成单元,用于根据名称映射文件生成与所述待转换应用文件对应的链接数据段,所述链接数据段包括导入包子段、常量池子段、代码常量池索引位置子段、本包输出项子段;代码段生成单元,用于获取所述待转换应用文件中所有类定义的方法的字节码以及异常处理程序信息,以生成对应的代码段。
119.在一具体实施例中,所述链接数据段生成单元包括单元:导入包子段生成单元,用于从所述名称映射文件获取每个导入包的表述信息,以生成对应的导入包子段;常量池子段生成单元,用于从所述待转换应用文件的代码段中获取指令引用的类、方法和域,以生成对应的常量池子段;常量池索引位置子段生成单元,用于获取所述待转换应用文件中所有常量池索引的位置,以生成对应的代码常量池索引位置子段;本包输出项子段生成单元,用于获取所述待转换应用文件中每个类在动态绑定数据段中的偏移,以及类中每个静态域在静态域镜像中的偏移、类中每个静态方法在代码段中的偏移,以生成对应的本包输出项子段。
120.文件解析安装装置150,用于对所述可执行文件进行解析安装。
121.本实施例中,设定需进行名称转换的成员的转换规则,设定内部成员访问指令使用内部成员的标识方法,设定成员进行名称转换的转换实现流程;根据所述成员进行名称转换的转换规则及所述内部成员访问指令使用内部成员的表示方法生成与所述待转换应用文件对应的可执行文件及名称映射文件;对所述可执行文件进行解析安装。通过上述方法,能够有效减少常量池的大小,进而减少指令的常量池索引解析操作,可以显著提高应用的下载和安装性能。
122.本领域技术人员应该明白,本发明所述的方法和系统并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1