java 解析 jar_一种将JAR文件解析成java的方法及系统的制作方法

一种将JAR文件解析成java的方法及系统的制作方法【

技术领域:

】[0001]本发明涉及网络安全

技术领域:

,尤其涉及一种将JAR文件解析成java的方法及系统。【

背景技术:

】[0002]就像MP3格式的文件记录着声音信息,avi格式的文件记录着视频信息,与此相同,Jar文件是class的集合,按照class文件规范,保存着一系列二进制的数据,纪录着信息。Jar文件中二进制数据的可读性不高,用java语言复述出这段二进制数据的含义可以方便分析者读懂Jar文件的内容。这里用Java语言复述Jar文件的过程叫做Jar转Java。[0003]class文件是JVM(java虚拟机)可执行文件,其中二进制代码中包含内容信息有顺序结构,选择结构和循环结构。JVM按照JVM规范可以从上到下执行class的二进制文件。由于计算机不懂JVM规范,class文件想表达的顺序结构,选择结构和循环结构在计算机看来则是杂乱无章的。[0004]传统方式解析出的java文件含有goto标签,这样比较繁琐并且导致java可读性不闻。【

发明内容】[0005]针对上述技术问题,本发明提供了一种将JAR文件解析成java的方法及系统,该方法将计算机无法识别而JVM可以识别的跳转、选择和判断等指令转化为计算机可以识别的顺序执行的指令,并且利用本发明所述的技术方案最终得到的java文件是不带goto标签的,从而达到简易解析JAR文件,并提高了可读性。[0006]本发明采用如下方法来实现:一种将JAR文件解析成java的方法,包括:基于class文件的结构规范,解析获得二进制字节码并存入数组A;基于class文件的结构规范,获取except1n_table异常表;所述except1n_table异常表内包含一些数值,是try_catch的索引;提取except1n_table异常表中的每条内容并保存在预定义结构中,所述结构为:struct{intstart—pc;intend—pc;inthandler;};所述start_pc为起始指令与起始位置的偏移值,所述end_pc为结束指令与起始位置的偏移值,所述handler为预设的异常处理方式;将得到的各结构存入数组B;将数组B中的各结构中具备相同start_pc和end_pc的handler进行合并后形成新结构,并将各新结构存入数组C;遍历数组A,基于JVM指令规范识别与跳转或者被跳转相关的指令并进行分割标记,基于分割标记形成分割模块,并将所述分割模块添加至数组D;基于JVM指令的逻辑关系,将所述分割模块按照执行顺序进行重新排列,并存入数组E;其目的在于消除计算机不能够识别的需要跳转的指令,例如条件判断指令、跳转指令和选择分支指令等,重新排序成不懂JVM规范的计算机能识别的顺序;将数组C中的各结构的start_pc和end_pc,与E中的各分割模块的offset进行比较,如果start_pc和end_pc在E的相邻两个分割模块的offset之间,则将C中的该结构的handler内容保存在E的trycatchbranch中;所述offset为指令与起始位置的偏移值;递归输出每个分割模块自身的内容,然后读取branch信息和trycatchbranch信息,并判断所述branch信息和trycatchbranch信息所指向的模块是否输出过,若输出过,贝丨』不输出该模块内容,否则输出该模块内容。[0007]进一步地,所述基于JVM指令规范识别与跳转或者被跳转相关的指令前,还包括:基于JVM指令规范将指令按照功能分为16类,包括但不限于:条件判断类、跳转类和选择分支类。[0008]进一步地,所述将数组B中的各结构中具备相同start_pc和end_pc的handler进行合并后形成的新结构为:struct{intstart_pc;intend_pc;int[]handler;};所述start_pc和end_pc为指令与起始位置的偏移值,所述handler为预设的异常处理方式。[0009]进一步地,所述branch信息中保存的是逻辑索引信息;所述trycatchbranch信息中保存的是except1n_table的索引信息。所述branch是类似链表的指针。[0010]本发明采用如下系统来实现:一种将JAR文件解析成java的系统,包括:数组A生成模块,基于class文件的结构规范,解析获得二进制字节码并存入数组A;异常表获取模块,基于class文件的结构规范,获取except1n_table异常表;所述except1n_table异常表内包含一些数值,是try_catch的索引;数组B生成模块,用于提取exc印t1n_table异常表中的每条内容并保存在预定义结构中,所述结构为:struct{intstart—pc;intend—pc;inthandler;};所述start_pc为起始指令与起始位置的偏移值,所述end_pc为结束指令与起始位置的偏移值,所述handler为预设的异常处理方式;将得到的各结构存入数组B;数组C生成模块,用于将数组B中的各结构中具备相同start_pc和end_pc的handler进行合并后形成新结构,并将各新结构存入数组C中;数组D生成模块,用于遍历数组A,基于JVM指令规范识别与跳转或者被跳转相关的指令并进行分割标记,基于分割标记形成分割模块,并将所述分割模块添加至数组D中;数组E生成模块,基于JVM指令的逻辑关系,将所述分割模块按照执行顺序进行重新排列,并存入数组E;其目的在于消除计算机不能够识别的需要跳转的指令,例如条件判断指令、跳转指令和选择分支指令等,重新排序成不懂JVM规范的计算机能识别的顺序;数组E完善模块,用于将数组C中的各结构的start_pc和end_pc,与E中的各分割模块的offset进行比较,如果start_pc和end_pc在E的相邻两个分割模块的offset之间,则将C中的该结构的handler内容保存在E的trycatchbranch中;所述offset为指令与起始位置的偏移值;递归输出模块,用于递归输出每个分割模块自身的内容,然后读取branch信息和trycatchbranch信息,并判断所述branch信息和trycatchbranch信息所指向的模块是否输出过,若输出过,则不输入该模块内容,否则输出该模块内容。[0011]进一步地,还包括指令分类模块:基于JVM指令规范将指令按照功能分为16类,包括但不限于:条件判断类、跳转类和选择分支类。[0012]进一步地,数组C生成模块中所述的新结构为:struct{intstart—pc;intend—pc;int口handler;};所述start_pc为起始指令与起始位置的偏移值,所述end_pc为结束指令与起始位置的偏移值,所述handler为预设的异常处理方式。[0013]进一步地,所述branch信息中保存的是逻辑索弓I信息;所述trycatchbranch信息中保存的是except1n_table的索引信息。[0014]综上所述,本发明提供了一种将JAR文件解析成java的方法及系统,本发明所提供的技术方案基于class文件本身的结构规范,首先获取字节码和except1n_table异常表;并基于异常表中的每条内容生成新的结构形式,该结构中包括起始指令或结束指令与起始位置的偏移值,还有预设的异常处理方式。同时,从头到尾遍历字节码,在遇到涉及到跳转或者被跳转的指令处进行分割,形成所述字节码的最小分割模块,并基于JVM指令的逻辑关系,将上述分割模块按照执行顺序进行重新排列,并经过一定的完善后递归输出,从而消除了传统解析结果中包含的goto-label,并形成了可读性较高的java文件。【附图说明】[0015]为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0016]图1为本发明提供的一种将JAR文件解析成ja当前第1页1&nbsp2&nbsp3&nbsp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值