javap可以反编译pak文件吗

Python014

javap可以反编译pak文件吗,第1张

概述:

javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码,从而对代码内部的执行逻辑进行分析。

语法:

把java文件编译为class文件:javac Test.java (Test.java为java文件名) 生成对应的 .class 文件 Test.class

执行javap操作:javap 命令行 class文件名称(不加 .class后缀)

例如: javap -c Test

命令行

-help 输出 javap 的帮助信息。

-l 输出行及局部变量表。

-b 确保与 JDK 1.1 javap 的向后兼容性。

-public 只显示 public 类及成员。

-protected 只显示 protected 和 public 类及成员。

-package 只显示包、protected 和 public 类及成员。这是缺省设置。

-private 显示所有类和成员。

-J[flag] 直接将 flag 传给运行时系统。

-s 输出内部类型签名。

-c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。

-verbose 输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本

-classpath[路径] 指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。

  - bootclasspath[路径] 指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jrelibt.jar 和 jrelibi18n.jar 中。

-extdirs[dirs] 覆盖搜索安装方式扩展的位置

java 启动器 java 将初始化 Java 虚拟机。虚拟机随即按以下顺序搜索和加载类: 自举类 - 构成 Java 平台的类,包括 rt.jar 和 i18n.jar 中的类。 扩展类 - 使用 Java 扩展机制的类。它们被捆绑为 .jar 文件,位于扩展目录中。 用户类 - 开发人员和第三方定义的类,不使用扩展机制。在命令行上使用 -classpath 选项(常用方法)或使用 CLASSPATH 环境变量可识别这些类的位置(参见设置 Windows 或 Solaris 的 Classpath)。 实际上,这三个搜索路径将被连为一个简单的类路径。这有点象以前使用的“单级”类路径,但现在的模型有一些重要差别: 偶然“隐藏”或省略自举类相对困难一些。 通常只需指定用户类的位置。系统将“自动”查找自举类和扩展类。 工具类现在位于独立的归档中 (tools.jar)。只有当它包含在用户类路径中时才可用(稍后会有解释)。 Java 启动器如何查找自举类 自举类是实现 Java 1.2 平台的类。自举类在 /jdk1.2/jre/lib 中的 rt.jar 和 i18n.jar 归档中。这些归档由存储在 sun.boot.class.path 系统属性中的自举类路径值指定。该系统属性仅供引用,不应直接修改。 需要重新定义自举类路径的可能性较小。极少数情况下需要使用另一组核心类时,非标准选项 -Xbootclasspath 答应重新定义自举类路径。 注重:实现 JDK 开发工具的类与自举类在不同归档中。工具归档为 /jdk1.2/lib/tools.jar.调用启动器时,开发工具将该归档添加到用户类路径中。然而,这个扩大的用户类路径仅用于执行工具。处理源代码的工具 javac 和 javadoc 将使用初始类路径,而不是扩大后的类路径(有关具体信息,参见下面的 Javac 和 Javadoc 如何查找类)。 Java 启动器如何查找扩展类 扩展类是扩展 Java 平台的类。扩展目录中的每个 .jar 文件即被认为是扩展,且都使用 Java 扩展框架加载。我们不提供改变扩展目录位置的选项。 Java 启动器如何查找用户类 用户类是在 Java 平台上构建的类。查找用户类时,启动器需要使用用户类路径,它是一张目录、JAR 归档和包含类文件的 Zip 归档的列表。 类文件有一个反映类全限定名的子路径名。例如,假如类 com.mypackage.MyClass 存储在 /myclasses 下,则 /myclasses 一定位于用户类路径中,且类文件的完全路径一定为 /myclasses/com/mypackage/MyClass.class.假如类存储在名为 myclasses.jar 的归档中,则 myclasses.jar 一定位于用户类路径中,且类文件一定作为 com/mypackage/MyClass.class 存储在归档中。 在Solaris 中,我们用字符串指定用户类路径,而用冒号 (:) 分隔类路径项。java 启动器将用户类路径字符串放置在 java.class.path 系统属性中。该值可能的源为: 缺省值“。”意味着用户类文件是当前目录中的所有类文件(假如是在包中,则为当前目录下的)。 CLASSPATH 环境变量的值,它覆盖缺省值。 命令行选项 -cp 或 -classpath 的值,它覆盖缺省值和 CLASSPATH 值。 -jar 选项指定的 JAR 归档,它覆盖所有其它值。假如使用该选项,则所有用户类都来自指定的归档。