一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于文件结构设计的链接方法及可读存储介质与流程

2021-11-22 17:28:00 来源:中国专利 TAG:


1.本发明涉及资源有限设备的存储设计领域,尤其涉及一种基于文件结构设计的链接方法及可读存储介质。


背景技术:

2.在资源有限但是对安全性能要求较高的设备上,如智能卡,物联网安全设备,安全模块,现有技术中都是在嵌入式系统上集成java语言的虚拟机,从而实现本地native方法,对外提供java语言的api接口,以java语言对外提供二次开发。传统的java语言的虚拟机对外以java语言对外提供二次开发时,同样的功能,按java语言的虚拟机的文件结构设计生成的目标二进制文件比用c语言编程所占的内存空间上要多很多。并且在功能运行上,由于传统的java语言的虚拟机按生成的二进制文件结构进行方法调用时需要动态查找等步骤,所以运行效率比在表达式和逻辑运算上利用编译器事先做了部分字节码优化的c语言虚拟机要慢,并且传统的java语言的虚拟机的使用成本较高。而c语言虚拟机相对于传统的java语言的虚拟机,不同的功能也可以采用不同的模块进行并行开发,用户在使用设计上,也可以根据自己产品的安全特性设置不同模块之间的防火墙机制,使模块之间的访问遵循一定的安全访问策略,实现与传统的java语言的虚拟机的安全模块同等的安全特性。


技术实现要素:

3.本发明的主要目的在于提供一种基于文件结构设计的链接方法及可读存储介质,旨在解决现有技术中同等安全特性下java虚拟机运行效率与内存空间优化的技术问题。
4.第一方面,本发明提供一种基于文件结构设计的链接方法,所述基于文件结构设计的链接方法包括以下步骤:将编译器中生成的字节码按文件结构,生成不同模块的目标文件,其中,所述文件结构包括:模块头组件、模块应用组件、模块常量组件、模块文件组件、模块方法组件和模块索引组件;将所述目标文件通过转换工具,生成安全模块可识别的下载脚本;当收到下载指令时,将所述下载脚本下载安装到所述安全模块中,其中,在所述下载安装过程中,根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接;当存在方法调用请求时,根据请求调用的方法的链接跳转到所述请求调用的方法的物理地址处执行该方法。
5.可选的,所述模块头组件的结构包括本模块的标识号、版本号信息与本模块文件结构中其他组件的长度描述。
6.可选的,若所述模块为非应用模块,则所述非应用模块的模块应用组件的长度为0;若所述模块为应用模块,则所述应用模块的模块应用组件的长度不为0,其中,所述应用模块的模块应用组件的结构包括应用的标识号以及应用的入口函数的物理地址索引。
7.可选的,所述模块常量组件的结构包括外部被引模块的个数,外部被引模块标识
号与版本号信息,以及外部被引模块的常量结构体,其中所述外部被引模块的常量结构体包括系统方法与非系统方法的区分标识,所有被调用的方法所在被引模块在所述外部被引模块结构体中的索引号,以及所有被调用的方法的地址偏移。
8.可选的,若所述模块为非系统模块,则所述非系统模块的模块文件组件的长度为0;若所述模块为系统模块,则所述系统模块的模块应用组件的长度不为0,其中,所述系统模块的模块文件组件结构包括系统模块中文件的总个数、系统文件中每个文件的方法总个数的数组形式以及系统文件中每个文件的方法地址索引号。
9.可选的,所述模块方法组件包括本模块中所有方法的内部功能的字节码实现,其中,所述字节码实现包括所述所有方法的参数个数、局部变量的总字节数及所述所有方法的可执行代码的字节码集合。
10.可选的,所述模块索引组件的结构包括本模块的所有要链接方法在方法组件中的地址偏移,以及被链接的方法所在的外部被引模块在模块常量组件中常量结构体的地址索引。
11.可选的,在所述下载安装过程中,根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接的步骤包括:通过引用模块的索引组件找到调用方法相对于引用模块的方法组件基地址的第一地址偏移量,根据第一偏移量得到所述调用方法与被引模块的被调用方法的调用关系;通过引用模块的索引组件找到被引模块在引用模块的常量组件中的索引号后,跳转到引用模块的常量组件对应的被引模块的常量结构体中;通过所述常量结构体,找到被引模块的标识号和版本号;通过引用模块的常量组件中的区分标识判断被调用方法是否为系统方法;若被调用方法为非系统方法,则在被引模块的常量结构体中找到被调用方法相对于被引模块的方法组件基地址的第二地址偏移量;根据被引模块的标识号和版本号找到被引模块的地址,根据被引模块的地址找到被引模块的方法组件基地址;根据被引模块的方法组件基地址以及所述第二地址偏移量,找到被调用方法的物理地址;基于被调用方法的物理地址,完成调用方法与被调用方法的链接;若被调用方法为系统方法,则根据被引模块的标识号和版本号找到被引模块的地址,根据被引模块的地址找到被引模块的方法组件基地址;以被引模块的常量结构体中的地址偏移的高字节为文件索引号,从被引模块的文件组件中包含的多个文件中找到被调用方法所在的文件;以被引模块的常量结构体中所述地址偏移的低字节为方法索引号,从所述被调用方法所在的文件中找到被调用方法的物理地址;以所述物理地址替换被引模块的常量结构体中的所述地址偏移,完成调用方法与被调用方法的链接。
12.第二方面,本发明还提供一种可读存储介质,所述可读存储介质上存储有基于文件结构设计的链接程序,其中所述基于文件结构设计的链接程序被处理器执行时,实现如上所述的基于文件结构设计的链接方法的步骤。
13.本发明中,将编译器中生成的字节码按文件结构,生成不同模块的目标文件,其中,所述文件结构包括:模块头组件、模块应用组件、模块常量组件、模块文件组件、模块方法组件和模块索引组件;将所述目标文件通过转换工具,生成安全模块可识别的下载脚本;当收到下载指令时,将所述下载脚本下载安装到所述安全模块中,其中,在所述下载安装过程中,根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接;当存在方法调用请求时,根据请求调用的方法的链接跳转到所述请求调用的方法的物理地址处执行该方法。通过本发明可以在减少文件体积、提高运行效率的同时,实现与传统的java语言虚拟机的文件结构设计的安全模块同等的安全特性。
附图说明
14.图1为本发明基于文件结构设计的链接方法一实施例的流程示意图;图2为本发明基于文件结构设计的链接方法中一实施例的模块头组件示意图;图3为本发明基于文件结构设计的链接方法中一实施例的应用模块应用组件示意图;图4为本发明基于文件结构设计的链接方法中一实施例的模块常量组件示意图;图5为本发明基于文件结构设计的链接方法中一实施例的系统模块文件组件示意图;图6为本发明基于文件结构设计的链接方法中一实施例的模块方法组件示意图;图7为本发明基于文件结构设计的链接方法中一实施例的模块索引组件示意图;图8为本发明基于文件结构设计的链接方法中一实施例的不同模块间方法的链接示意图;图9为本发明基于文件结构设计的链接方法中又一实施例的不同模块间方法的链接示意图。
15.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
16.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
17.第一方面,本发明实施例提供了一种基于文件结构设计的链接方法。
18.参照图1,图1为本发明基于文件结构设计的链接方法一实施例的流程示意图。
19.在本发明基于文件结构设计的链接方法一实施例中,基于文件结构设计的链接方法包括:步骤s10,将编译器中生成的字节码按文件结构,生成不同模块的目标文件,其中,所述文件结构包括:模块头组件、模块应用组件、模块常量组件、模块文件组件、模块方法组件和模块索引组件;本实施例中,本实施例中,当外部输入源程序即c语言代码时使用编译器进行宏展开,对输入的c语言代码进行语法分析和语义分析后生成字节码,将编译器中生成的字节码按照设计的文件结构,生成不同模块的目标文件。其中文件结构中包括模块头组件如图2、模块应用组件如图3、模块常量组件如图4、模块文件组件如图5、模块方法组件如图6、模块索引组件如图7。所述不同模块的文件结构中的组件用于不同模块间方法地址的链接。
20.进一步,一实施例中,所述模块头组件的结构包括本模块的标识号、版本号信息与本模块文件结构中其他组件的长度描述。
21.本实施例中,所述模块头组件module_header的结构如图2所示,所述模块头组件包含本模块的版本号version项,本模块的标识号aid项及标识号aid的字节数aid_length项,当虚拟机运行时,根据模块的标识号aid及模块的版本号version,找到对应的模块的目标文件的地址;所述模块头组件还包含本模块内其他组件的长度,如app_size 项表示应用组件的长度、const_size 项表示常量组件的长度、file_size项 表示文件组件的长度、method_size项表示方法组件的长度、reference_size项表示索引组件的长度,以上组件长度都不包含组件的tag项和size项本身,仅包含数据内容,所述长度描述用于将所述当前模块的下载脚本中的模块头组件下载到所述安全模块中时,根据所述长度描述预留其他组件的地址空间;所述模块头组件还包含表示从模块应用组件到模块索引组件字段的所有数据的crc32校验和sc_crc32项,防止组件被篡改;所述模块头组件还包含用于以 utf_8 的格式表示完整的组件的名字name项与以 utf_8 格式表示组件的名字的 name 项中使用的字节数name_length项,其中,所述模块头组件的结构还包含一个tag值与一个表明组件中字节数的 size值。
22.进一步,一实施例中,若所述模块为非应用模块,则所述非应用模块的模块应用组件的长度为0;若所述模块为应用模块,则所述应用模块的模块应用组件的长度不为0,其中,所述应用模块的模块应用组件的结构包括应用的标识号以及应用的入口函数的物理地址索引。
23.本实施例中,若所述模块为非应用模块,则所述非应用模块的模块应用组件的长度为0;若所述模块为应用模块,则所述应用模块的模块应用组件的长度不为0,则所述模块应用组件module_app的结构如图3所示。其中,所述应用模块的模块应用组件的结构包括应用的标识号aid项与标识号aid的字节数aid_length项,所述标识号aid项用于从应用注册表中找到应用模块文件结构中应用组件的基地址;所述应用模块的模块应用组件的结构还包括应用的入口函数的物理地址索引,如install_off项、process_off项、select_off项、deselect_off项、uninstall_off项、multiselect_off项、multideselect_off项、getscclibinterface_off项分别表示install方法、process方法、select方法、deselect方法、uninstall方法、multiselect方法、multideselect方法、getscclibinterface方法的地址索引,这8个方法为系统应用的入口函数,其中所述入口函数,用于进行模块间的方法调用时,找到应用模块的模块应用组件的地址后,根据所述入口函数的物理地址索引找到方法调用的入口;所述应用模块的模块应用组件的结构还包括用于以 utf_8 的格式表示完整的组件的名字name项与以 utf_8 格式表示组件的名字的 name 项中使用的字节数name_length项,以及每个组件中均还包含的一个tag值与一个表明组件中字节数的 size值。
24.进一步,一实施例中,所述模块常量组件的结构包括外部被引模块的个数,外部被引模块标识号与版本号信息,以及外部被引模块的常量结构体,其中所述外部被引模块的常量结构体包括系统方法与非系统方法的区分标识,所有被调用的方法所在被引模块在外部被引模块结构体中的索引号,以及所有被调用的方法的地址偏移。
25.本实施例中,所述模块常量组件module_constant的结构如图4所示,所述模块常
量组件包含了modulecount项,描述了所述当前模块可调用的外部被引模块的个数值;所述模块常量组件还包含了moduleaid项,用于从模块注册表中找到外部被引模块文件结构中模块头组件的基地址,并根据模块头组件其他组件的基地址,所述moduleaid项包括了pkgaid结构体,所述pkgaid结构体中包括version项表示被引模块的版本号,aid项表示被引模块的标识号,aid_length项表示被引模块的标识号aid的字节数;所述模块常量组件还包含了count项表示常量池moduleconst项的结构体个数;moduleconst项描述所有被调用的方法所在的外部被引模块的相关信息,所述moduleconst项包括了const结构体,所述const结构体中包括sysflag项的区分标识用以区分是否为系统方法,pkgid项表示所有被调用的方法所在被引模块在moduleaid项的pkgaid项结构体的索引,offset项表示所有被调用的方法的地址偏移,其中,所述模块常量组件中还包含一个tag值与一个表明组件中字节数的 size值。
26.进一步,一实施例中,若所述模块为非系统模块,则所述非系统模块的模块文件组件的长度为0;若所述模块为系统模块,则所述系统模块的模块应用组件的长度不为0,其中,所述系统模块的模块文件组件结构包括系统模块中文件的总个数、系统文件中每个文件的方法总个数的数组形式以及系统文件中每个文件的方法地址索引号。
27.本实施例中,若所述模块为非系统模块,则所述非系统模块的模块文件组件的长度为0;若所述模块为系统模块,则所述系统模块的模块应用组件的长度不为0,则所述模块文件组件module_file的结构如图5所示,其中,所述系统模块的模块文件组件结构包括type项,来区分识别系统模块文件;所述系统模块的模块文件组件结构包括number项,表示系统模块中文件的总个数;所述系统模块的模块文件组件结构包括numfun项,以数组的形式表示系统模块中每个文件的方法总个数;所述系统模块的模块文件组件结构包括fun项,以数组的形式表示模块中每个文件的方法地址的索引号,其中,所述系统模块的模块文件组件中还包含一个tag值与一个表明组件中字节数的 size值。
28.进一步,一实施例中,所述模块方法组件包括本模块中所有方法的内部功能的字节码实现,其中,所述字节码实现包括所述所有方法的参数个数、局部变量的总字节数及所述所有方法的可执行代码的字节码集合。
29.本实施例中,所述模块方法组件module_method的结构如图6所示,所述模块方法组件包含了code项,包含了本模块中所有方法的内部功能的字节码实现,为方法的具体的内部逻辑调用,功能实现等。其中,所述code项包括code_info结构体项,所述code_info结构体项包括paranum项,表示本模块所有方法的参数个数;所述code_info结构体项还包括localsize项,表示局部变量的总字节数;所述code_info结构体项还包括mcode项,表示本模块所有方法的可执行代码的字节码集合,其中,所述模块方法组件中还包含一个tag值与一个表明组件中字节数的 size值。
30.进一步,一实施例中,所述模块索引组件的结构包括本模块的所有要链接的方法在方法组件中的地址偏移,以及被链接的方法所在的外部被引模块在模块常量组件中常量结构体的地址索引。
31.本实施例中,所述模块索引组件module_reference的结构如图7所示,所述模块索引组件中包含module_ref项,所述module_ref项包括了ref项结构体。所述ref项结构体中包含offset项,表示本模块的所有要链接的方法在方法组件中的地址偏移;所述模块索引
组件中包含constid项,表示被链接的方法所在的外部被引模块在模块常量组件中const结构体的地址索引。
32.步骤s20,将所述目标文件通过转换工具,生成安全模块可识别的下载脚本;本实施例中,将包含模块头组件、模块应用组件、模块常量组件、模块文件组件、模块方法组件和模块索引组件的文件结构的所述目标文件通过转换工具,生成安全模块可以识别的下载脚本。所述下载脚本是用于在下载安装所述目标文件时,将所述目标文件下载安装到安全模块上。
33.步骤s30,当收到下载指令时,将所述下载脚本下载安装到所述安全模块中,其中,在所述下载安装过程中,根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接;本实施例中,当收到下载指令时,将所述下载脚本下载安装到所述安全模块中,其中,在所述下载安装过程中,根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接。所述方法链接是对不同模块间的方法的物理地址进行链接,链接完成后不同模块间方法进行调用时需要通过所述不同模块间方法地址的链接来进行。
34.进一步,一实施例中,在所述下载安装过程中,根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接的步骤包括:通过引用模块的索引组件找到调用方法相对于引用模块的方法组件基地址的第一地址偏移量,根据第一偏移量得到所述调用方法与被引模块的被调用方法的调用关系;通过引用模块的索引组件找到被引模块在引用模块的常量组件中的索引号后,跳转到引用模块的常量组件对应的被引模块的常量结构体中;通过所述常量结构体,找到被引模块的标识号和版本号;通过引用模块的常量组件中的区分标识判断被调用方法是否为系统方法;若被调用方法为非系统方法,则在被引模块的常量结构体中找到被调用方法相对于被引模块的方法组件基地址的第二地址偏移量;根据被引模块的标识号和版本号找到被引模块的地址,根据被引模块的地址找到被引模块的方法组件基地址;根据被引模块的方法组件基地址以及所述第二地址偏移量,找到被调用方法的物理地址;基于被调用方法的物理地址,完成调用方法与被调用方法的链接;若被调用方法为系统方法,则根据被引模块的标识号和版本号找到被引模块的地址,根据被引模块的地址找到被引模块的方法组件基地址;以被引模块的常量结构体中的地址偏移的高字节为文件索引号,从被引模块的文件组件中包含的多个文件中找到被调用方法所在的文件;以被引模块的常量结构体中所述地址偏移的低字节为方法索引号,从所述被调用方法所在的文件中找到被调用方法的物理地址;以所述物理地址替换被引模块的常量结构体中的所述地址偏移,完成调用方法与被调用方法的链接。
35.本实施例中,在所述下载安装过程中,如图8所示,通过引用模块的索引组件的ref项结构体中offset项找到调用方法相对于引用模块的方法组件基地址的第一地址偏移量,
根据第一偏移量得到所述调用方法与被引模块的被调用方法的调用关系;通过引用模块的索引组件的ref项结构体中constid项找到被引模块在引用模块的常量组件中的地址索引后,跳转到引用模块的常量组件对应的被引模块的const结构体中;通过所述const结构体中,找到被引模块的pkgaid项结构体包括被引模块的标识号和版本号;通过引用模块的常量组件中的区分标识判断被调用方法是否为系统方法后,若通过引用模块的常量组件中的区分标识判断被调用方法为非系统方法,则所述根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接的步骤如图8所示,在被引模块的const项结构体中的offset项找到被调用方法相对于被引模块的方法组件基地址的第二地址偏移量;根据pkgid项找到被引模块的pkgaid项结构体,从被引模块的pkgaid项结构体中被引模块的标识号aid项即图中所示moduleid和版本号version项从模块注册列表中找到被引模块的地址,根据被引模块的地址找到被引模块的方法组件基地址;并根据被引模块的方法组件基地址以及所述第二地址偏移量,找到被调用方法的物理地址funaddr;基于调用方法与被调用方法的物理地址;若通过引用模块的常量组件中的区分标识判断被调用方法为系统方法,则所述根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接的步骤如图9所示,根据被引模块的pkgaid项结构体包括的被引模块的标识号和版本号找到被引模块的地址,根据被引模块的地址找到被引模块的方法组件基地址;以被引模块的const结构体中的offset项的高字节为文件索引号fileid,从被引模块的文件组件中包含的多个文件中找到被调用方法所在的文件;以被引模块的const结构体中的offset项的低字节为方法索引号filefunid,找到所述被调用方法所在的文件中的fun数组中的索引号funid ,从而根据此找到被调用方法的物理地址funaddr,以所述物理地址funaddr替换被引模块的const结构体中的offset项。
36.本实施例中,保存上述引用模块的常量组件中const结构体中的offset项与被引模块的pkgaid项结构体中的被引用模块的标识号aid项,通过引用模块的索引组件中ref结构体中保留的offset项,从引用模块的方法组件中取出方法引用关系对应的字节码,将保存的被引模块的pkgaid项结构体中的被引用模块的标识号aid项即moduleid和const结构体中的offset项即方法地址偏移写到方法引用关系对应的字节码的操作数上,如图8所示,操作数0和操作数1对应方法地址偏移,操作数2对应moduleid,完成调用方法与被调用方法的链接。其中,所述调用方法与被调用方法的链接即调用方法与被调用方法的物理地址的链接,当调用方法与被调用方法的物理地址的链接完成后,可以根据所链接的调用方法的物理地址处跳转被调用方法的物理地址处。
37.步骤s40,当存在方法调用请求时,根据请求调用的方法的链接跳转到所述请求调用的方法的物理地址处执行该方法。
38.本实施例中,不同模块间方法的链接即所述不同模块间方法的地址链接完成后,当存在方法调用请求,需要先根据防火墙访问规则,判断是否存在安全隐患,若存在安全隐患则所述方法调用请求不满足安全访问权限,直接报异常访问不进行方法的调用;若不存在安全隐患则所述方法调用请求满足安全访问权限,根据请求调用的方法的链接跳转到所述请求调用的方法的物理地址处执行该方法。
39.本实施例中将编译器中生成的字节码按文件结构,生成不同模块的目标文件,其中,所述文件结构包括:模块头组件、模块应用组件、模块常量组件、模块文件组件、模块方
法组件和模块索引组件;将所述目标文件通过转换工具,生成安全模块可识别的下载脚本;当收到下载指令时,将所述下载脚本下载安装到所述安全模块中,其中,在所述下载安装过程中,根据下载脚本中不同模块的文件结构完成不同模块间的方法的链接;当存在方法调用请求时,根据请求调用的方法的链接跳转到所述请求调用的方法的物理地址处执行该方法。通过本发明可以在减少文件体积、提高运行效率的同时,实现与传统的java语言虚拟机的文件结构设计的安全模块同等的安全特性。
40.第二方面,本发明实施例还提供一种可读存储介质。
41.本发明可读存储介质上存储有基于文件结构设计的链接程序,其中所述基于文件结构设计的链接程序被处理器执行时,实现如上述的基于文件结构设计的链接方法的步骤。
42.其中,基于文件结构设计的链接程序被执行时所实现的方法可参照本发明基于文件结构设计的链接方法的各个实施例,此处不再赘述。
43.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
44.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
45.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。
46.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献