javap:
javap 主要用于帮助开发者深入了解 Java 编译器的机制,主要选项有:
-c:分解方法代码,即显示每个方法具体的字节码
-public | protected | package | private:用于指定显示哪种级别的类成员
-verbose:指定显示更进一步的详细信息
hexdump:
hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。
指令所在路径:/usr/bin/hexdump
命令语法:
hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file …]
hexdump -C xxx.class
类加载机制
核心方法有:
loadClass
(加载指定的Java类)findClass
(查找指定的Java类)defineClass
(定义一个Java类)resolveClass
(链接指定的Java类)
类动态加载机制
显式:用反射或者classloader
隐式:直接new 或者类名.方法名()
显式加载方式又可以看作类动态加载机制
Class.forname()
this.getClass().getClassLoader().loadClass(***********)

类加载隔离
同一个类可以被不同的类加载器加载,两者之间不需要存在继承的关系。但是加载出来的是属于完全独立的两个对象,这两个对象之间仅可以靠反射相互调用。
跨类加载器加载
要点同上
JSP自定义类后门
<%@ %> 页面指令,设定页面属性和特征信息
<% %> java 代码片段,不能在此声明方法
<%! %> java 代码声明,声明全局变量或当前页面的方法
<%= %> Java 表达式
BCEL Classloader
BCEL(Byte Code Engineering Library)原本是Apache Jakarta的一个子项目,目前已成为Apache Commons的一个子项目,主要用于分析、创建、操纵Java class文件。
JAVA的反射机制
获得class的几种方式
1.直接XXX.class
2.XXX.forname()
3.ClassLoader.getclass()
注:反射调用内部类的时候需要使用$来代替.
反射Runtime
类
有的时候用反射去调用Runtime中的命令执行是因为权限不够,Runtime的构造器是private权限的时候需要借助反射来修改权限。

getDeclaredMethod可以获取到当前类的所有方法,和权限没有关系。(不包含父类)
类似的方式还可以无视权限修改当中的值。
getMethod()获取当前类和父类中有权限的方法。
调用方法执行命令
method.invoke(方法实例对象, 方法参数值,多个参数值用”,”隔开);