最近碰到了没有代码需要了解客户的业务流程的项目,没办法,看来看去,只能求助于我们的逆向工程技术了;

依照基于芯片的汇编逆向工程技术的经验,不难看出我们也需要从如下几方面来对JAVA技术进行详尽的研究:

1. 基于字节码的反编译工具;

2. 字节码调试工具;

3. 字节码编辑工具;

本篇幅中后续将介绍一下ClassFile的文件结构,后续日志中将继续介绍所有的工具系列。

ClassFile: A class or an interface (or more) (big-endian order, means high bytes come first)

ClassFile {

u4   magic;

u2   minor_version;

u2   major_version;

u2   constant_pool_count;

cp_info   constant_pool[constant_pool_count-1];

u2   access_flags;

u2   this_class;

u2   super_class;

u2   interfaces_count;

u2   interfaces[interfaces_count];

u2   fields_count;

field_info   fields[fields_count];

u2   methods_count;

method_info   methods[methods_count];

u2   attributes_count;

attribute_info   attributes[attributes_count];

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

magic  
     The magic item supplies the magic number identifying the class file format; it has the value 0xCAFEBABE.

minor_version, major_version 
     The values of the minor_version and major_version items are the minor and major version numbers of this class file.Together, a major and a minor version number determine the version of the class file format. If a class file has major version number M and minor version number m, we denote the version of its class file format as M.m. Thus, class file format versions may be ordered lexicographically, for example, 1.5 < 2.0 < 2.1.
 A Java virtual machine implementation can support a class file format of version v if and only if v lies in some contiguous range Mi.0  v  Mj.m. Only Sun can specify what range of versions a Java virtual machine implementation conforming to a certain release level of the Java platform may support.1

constant_pool_count 
    The value of the constant_pool_count item is equal to the number of entries in the constant_pool table plus one. A constant_pool index is considered valid if it is greater than zero and less than constant_pool_count, with the exception for constants of type long and double noted in §4.4.5.

constant_pool[] 
     The constant_pool is a table of structures (§4.4) representing various string constants, class and interface names, field names, and other constants that are referred to within the ClassFile structure and its substructures. The format of each constant_pool table entry is indicated by its first "tag" byte.
 The constant_pool table is indexed from 1 to constant_pool_count-1.

access_flags  
      The value of the access_flags item is a mask of flags used to denote access permissions to and properties of this class or interface. The interpretation of each flag, when set, is as shown in Table 4.1.

Flag Name       Value     Interpretation                                            
ACC_PUBLIC   0x0001   Declared public; may be accessed from outside its package.                                 
ACC_FINAL   0x0010   Declared final; no subclasses allowed.                                                           
ACC_SUPER   0x0020   Treat superclass methods specially when invoked by the invokespecial instruction.    
ACC_INTERFACE  0x0200   Is an interface, not a class.                                                                        
ACC_ABSTRACT   0x0400   Declared abstract; may not be instantiated.                                                    

super_class 
    For a class, the value of the super_class item either must be zero or must be a valid index into the constant_pool table. If the value of the super_class item is nonzero, the constant_pool entry at that index must be a CONSTANT_Class_info (§4.4.1) structure representing the direct superclass of the class defined by this class file. Neither the direct superclass nor any of its superclasses may be a final class.
 If the value of the super_class item is zero, then this class file must represent the class Object, the only class or interface without a direct superclass.
 For an interface, the value of the super_class item must always be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Class_info structure representing the class Object.

interfaces_count 
   The value of the interfaces_count item gives the number of direct superinterfaces of this class or interface type.

interfaces[] 
    Each value in the interfaces array must be a valid index into the constant_pool table. The constant_pool entry at each value of interfaces[i], where 0  i < interfaces_count, must be a CONSTANT_Class_info (§4.4.1) structure representing an interface that is a direct superinterface of this class or interface type, in the left-to-right order given in the source for the type.

fields_count 
    The value of the fields_count item gives the number of field_info structures in the fields table. The field_info (§4.5) structures represent all fields, both class variables and instance variables, declared by this class or interface type.

fields[] 
    Each value in the fields table must be a field_info (§4.5) structure giving a complete description of a field in this class or interface. The fields table includes only those fields that are declared by this class or interface. It does not include items representing fields that are inherited from superclasses or superinterfaces.

methods_count 
 The value of the methods_count item gives the number of method_info structures in the methods table.

methods[] 
   Each value in the methods table must be a method_info (§4.6) structure giving a complete description of a method in this class or interface. If the method is not native or abstract, the Java virtual machine instructions implementing the method are also supplied.
 The method_info structures represent all methods declared by this class or interface type, including instance methods, class (static) methods, instance initialization methods (§3.9), and any class or interface initialization method (§3.9). The methods table does not include items representing methods that are inherited from superclasses or superinterfaces.

attributes_count 
   The value of the attributes_count item gives the number of attributes (§4.7) in the attributes table of this class.

attributes[] 
   Each value of the attributes table must be an attribute structure (§4.7).
   The only attributes defined by this specification as appearing in the attributes table of a ClassFile structure are the SourceFile attribute (§4.7.7) and the Deprecated (§4.7.10) attribute.

JAVA 逆向工程技术研究日志相关推荐

  1. java开发爱恩斯坦棋,爱恩斯坦棋计算机博弈关键技术研究

    爱恩斯坦棋计算机博弈关键技术研究 [摘要]:计算机博弈是人工智能领域的重要研究方向之一,被誉为人工智能学科的"果蝇".爱恩斯坦棋属于完备信息博弈棋种,是一种棋局信息完全透明的博弈类 ...

  2. Java支持latex,基于Java和LaTeX的文档自动生成技术研究

    基于Java和 LaTeX 的文档 自动生成技术研究 ◆尚宝欣 徐 屹 (东北电力大学理学院,吉林 长春 132012) [摘 要]讨论了结合Java与LaTex 自动生成 PDF文档的方法.针 展名 ...

  3. 逆向工程技术的研究现状及发展趋势

    逆向工程技术的研究现状及发展趋势   引言 逆向工程也称反求工程或反向工程,是根据已存在的产品或零件原型构造产品或零件的工程设计模型,并在此基础上对已有的产品进行剖析.理解和改进,是对已有设计的再设计 ...

  4. java 可视化系统操作日志_技术文 | 日志框架使用技巧分享

    原标题:技术文 | 日志框架使用技巧分享 日志的意义 对于一个应用程序来说日志记录是具有重要意义的. 日志通常用于线上问题追踪,协助定位业务问题或程序问题,以及基于日志的业务逻辑统计分析等. java ...

  5. JAVA刷网站流量的技术研究总结

    原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 .作者信息和本声明.否则将追究法律责任. http://soarwell.blog.51cto.com/689880/1318324 ...

  6. ssm毕设项目民族地区文化调研与数字化保护技术研究---青海平弦乐库的建设及播放平台开发l3479(java+VUE+Mybatis+Maven+Mysql+sprnig)

    ssm毕设项目民族地区文化调研与数字化保护技术研究---青海平弦乐库的建设及播放平台开发l3479(java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jd ...

  7. ssm毕设项目民族地区文化调研与数字化保护技术研究—青海特色美食制作工艺数字化保护平台90b5b(java+VUE+Mybatis+Maven+Mysql+sprnig)

    ssm毕设项目民族地区文化调研与数字化保护技术研究-青海特色美食制作工艺数字化保护平台90b5b(java+VUE+Mybatis+Maven+Mysql+sprnig) 项目运行 环境配置: Jdk ...

  8. java web国外 研究现状_国外javaWeb开发技术.doc

    国外javaWeb开发技术.doc 外java Web开发技术 MVC结构模式是XeroxPARC在20世纪80年代为编程语言Smalltalk-80 发明的一种软件设计模式. 缑艳阳认为MVC将应用 ...

  9. 深入分析Java Web技术内幕pdf

    下载地址:网盘下载 内容简介  · · · · · · <深入分析Java Web技术内幕(修订版)>新增了淘宝在无线端的应用实践,包括:CDN 动态加速.多终端化改造. 多终端Sessi ...

  10. AOP技术研究 再续

    第四部分  .Net平台AOP技术研究 4.1.Net平台AOP技术概览 .Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企 ...

最新文章

  1. 全国首个窄带物联网实验局落户福州 助力智慧城市建设
  2. Web服务器指纹识别工具httprint
  3. java中string类_Java中String类浅谈
  4. for遍历list scala_面试官问:List 如何一边遍历,一边删除?
  5. js中时间戳与日期格式的相互转换
  6. 批量标准化BN方法简介【避免了梯度消失和梯度爆炸、加速网络的收敛、优化网络结构】
  7. Week 1:那些值得一阅的好文章
  8. 小白也能看懂的 Java 异常处理
  9. php 实现二叉树的最大深度_LintCode 题解丨Apple面试题:二叉树的最大深度
  10. 如何写一手好 SQL!!!
  11. fc安卓模拟器_跨平台游戏模拟器RetroArch,一个软件畅玩FC 、MD、SFC、GBA游戏
  12. UE5——材质学习笔记(4):溶解材质
  13. 计算机应用技术在医院的应用,计算机应用技术对医院信息化的影响探讨
  14. php 判断中文和英文,PHP如何判断中文还是英文?
  15. sprintf函数与strcpy和strcat 用sprintf函数进行字符串某些操作 ————— 开开开山怪
  16. 输入单号查快递:如何用快递单号查询快递信息
  17. Qt5 源代码自动跳转
  18. 安装SQL Server和SQL Server Management Studio(SSMS)
  19. 怎么解除该游戏的地域限制问题
  20. 什么是局域网域名?如何解析?

热门文章

  1. 基于路径跟随的纯跟踪算法--差速模型
  2. 百度+京东+美团Java面经合集
  3. 你距离哈佛学霸到底有多远?实力证明,真正的学霸精神不是智商,而是。。。
  4. Scrapy实战之阳光热线问政平台
  5. 计算机无法链接打印机共享,在打印机共享中无法链接打印机错误
  6. zip解压缩jar包,像jar包中add文件
  7. 操作系统介绍,为什么使用虚拟机,虚拟机使用原理透彻解释
  8. 【22】像素分辨率像元的计算及含义
  9. android checkbox分页问题分析
  10. iphone7 无法连接计算机看照片,iphone7连接电脑没反应怎么解决