Skip to content

gra1n's blog

梦里有时身化鹤,人间无数草为萤。

Menu
Menu

java web笔记(1)

Posted on 2022年3月8日2022年3月9日 by gra1n

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

类加载机制

核心方法有:

  1. loadClass(加载指定的Java类)
  2. findClass(查找指定的Java类)
  3. defineClass(定义一个Java类)
  4. 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(方法实例对象, 方法参数值,多个参数值用”,”隔开);

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

分类

  • blockchain
  • crypto
  • java
  • web
  • 专业课
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月

近期文章

  • hnp on ecdsa
  • CryptoZombies 题解

近期评论

  • gra1n发表在《AMM开根》
©2022 gra1n's blog | Built using WordPress and Responsive Blogily theme by Superb