解析用GraalVm编译的class文件

这篇具有很好参考价值的文章主要介绍了解析用GraalVm编译的class文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Task1实验材料:

解析用GraalVm编译的class文件,开发语言,java

javap的用法

用法: javap <options> <classes>
其中, 可能的选项包括:
  --help -help -h -?               输出此帮助消息
  -version                         版本信息
  -v  -verbose                     输出附加信息
  -l                               输出行号和本地变量表
  -public                          仅显示公共类和成员
  -protected                       显示受保护的/公共类和成员
  -package                         显示程序包/受保护的/公共类
                                   和成员 (默认)
  -p  -private                     显示所有类和成员
  -c                               对代码进行反汇编
  -s                               输出内部类型签名
  -sysinfo                         显示正在处理的类的
                                   系统信息(路径、大小、日期、SHA-256 散列)
  -constants                       显示最终常量
  --module <模块>, -m <模块>       指定包含要反汇编的类的模块
  -J<vm-option>                    指定 VM 选项
  --module-path <路径>             指定查找应用程序模块的位置
  --system <jdk>                   指定查找系统模块的位置
  --class-path <路径>              指定查找用户类文件的位置
  -classpath <路径>                指定查找用户类文件的位置
  -cp <路径>                       指定查找用户类文件的位置
  -bootclasspath <路径>            覆盖引导类文件的位置
  --multi-release <version>        指定要在多发行版 JAR 文件中使用的版本

GNU 样式的选项可使用 = (而非空白) 来分隔选项名称
及其值。

如果只是单纯的用javap +class文件名的话,那只是单纯的反编译class文件而已。

我们都知道class文件的字节码文件,是难以理解的。

用javap详细输出

javap -v  Main.class

解析用GraalVm编译的class文件,开发语言,java

很好理解。这里保存了最新更改时间和文件大小为414字节。

类声明:

public class Main

版本信息:

minor version: 0
major version: 61

这表示 Java 编译器的次要版本为 0,主要版本为 61。Java 版本号 61 对应 JDK 17。

访问标志:

flags: (0x0021) ACC_PUBLIC, ACC_SUPER

这表示类具有 ACC_PUBLICACC_SUPER 两个访问标志。

类层次结构:

this_class: #21
super_class: #2

this_class 表示当前类为索引为 21 的常量池项(#21 = Class #22 // Main),而 super_class 表示其父类为索引为 2 的常量池项(#2 = Class #4 // java/lang/Object)。

接口、字段、方法和属性统计:

interfaces: 0, fields: 0, methods: 2, attributes: 1

该类没有实现接口,没有字段,有两个方法,一个属性。

常量池:

Constant pool: ...

常量池包含了类中使用的常量信息,包括方法引用、字段引用、字符串等。

方法信息:

#25 = Utf8 main
#26 = Utf8 ([Ljava/lang/String;)V

这表示类中有一个名为 main 的方法,其描述符为 ([Ljava/lang/String;)V,即主方法。

源文件信息:

#27 = Utf8 SourceFile
#28 = Utf8 Main.java

表示源文件名为 Main.java

解析用GraalVm编译的class文件,开发语言,java

  1. 构造函数:

    • aload_0:将当前对象的引用加载到操作数栈上。
    • invokespecial #1:调用父类的构造函数。
    • return:返回。
  2. 主函数:文章来源地址https://www.toymoban.com/news/detail-801941.html

    • getstatic #7:从静态字段区获取java.lang.System.out对象。
    • ldc #13:将字符串常量"Hello world!"加载到操作数栈上。
    • invokevirtual #15:调用java.io.PrintStream.println方法,将字符串输出到控制台。
    • return:返回。

到了这里,关于解析用GraalVm编译的class文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • class文件中,常量池之后的相关数据解析!【class二进制文件分析】

    前言:前段时间读《深入java虚拟机》介绍到class文件的时候,由于理论知识较多,人总感觉疲惫不堪,就泛泛阅读了一下。在工作中使用起来知识点知道,但是总是需要查阅各种资料。今天有时间,继续整理常量池后面的相关知识。 class文件中,我们可以通过背或记也好,或

    2024年02月07日
    浏览(45)
  • 【JVM学习】Class文件解析

    最近为了加深对于JAVA的理解,在复习JVM,这里面的内容大部分都是比较确定的、文档性质的内容,目前并没有特别的总结。但是看到类文件结构,手痒,想写了个解析文件的解析器,那就简单记录下吧。 详细内容不记了,太多了,有兴趣的同学看虚拟机相关书籍了解,这里

    2023年04月13日
    浏览(85)
  • 使用GraalVM native-image 编译SpringBoot3全过程

    本文记录了使用native-image编译SpringBoot3.0.3的过程及遇到的问题。其中一些问题也是网上很多朋友遇到,我在实际操作的过程也遇到过同样的问题,在此做一记录。 目录 一、编译环境准备 1.1 安装GraalVM 1.2 安装native-image 1.3 IDE设置 1.4 Visual Studio 2022 1.5 pom.xml文件 二、使用nati

    2024年02月11日
    浏览(50)
  • 一、认识 JVM 规范(JVM 概述、字节码指令集、Class文件解析、ASM)

    JVM : Java Virtual Machine ,也就是 Java 虚拟机 所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。 即:虚拟机是一个计算机系统。这种计算机系统运行在完全隔离的环境中,且它的硬件系统功能是通过软件模拟出来的。 JVM 通

    2024年01月23日
    浏览(49)
  • 开发Android原生插件,引入自己打的jar报,编译报 Unsupported class file major version 61

    “Unsupported class file major version 61” 错误的原因是由于你自己大的jar包当时是用的Java 17打包的,因为在 Java 中,每个主要版本都有一个对应的 major version 值。例如,Java 8 的 major version 值为 52,Java 9 的 major version 值为 53,以此类推。Java 17 的 major version 值为 61。 解决这个问题,

    2024年02月09日
    浏览(46)
  • 低版本jdk运行高版本编译jar包失败(class file version 61.0), this version of the Java Runtime class file 52.0

    省流:使用jdk1.8执行17编译的包,启动报错。         项目运行中难免出现服务器环节集成其它jar包的情况,而其它jar包的jdk版本可能和我们业务项目的jdk版本不一致,如果比我们业务版本低,那么可能不会出现问题, 因为jdk向下兼容,如果jdk版本比我们业务版本高,可能就

    2024年02月02日
    浏览(47)
  • 安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

    很多小品牌机型不具备多语言设置。国内大都是中文。要想换为其他语言除非固件支持。例如国际版固件等等。大厂基本都有中文或者英文或者其他语言配置。而小品牌机型只能通过修改rom来达到多语言调用. 今天给友友介绍一款工具,可以用来翻译手机rom语言。添加多国语

    2024年02月04日
    浏览(47)
  • PHP调用java class 类实现文件签名

    起因:对接某平台API接口,发送的文件需要做 SM3 签名,对方平台是java写的,只有java加密示例,照着java的加密算法翻译为PHP版本,在编码转换上始终有些差异。没办法,只能想办法使用他们的java方式。 Demo.java文件:

    2024年02月09日
    浏览(50)
  • Java笔记:使用javassist修改class文件内方法

    在工作突然有一个需求。线上运维的一个tomcat的web项目,运行的程序不正常。需要修改代码。可是这个项目代码非常的老,并且公司存储的源代码跟线上的不一致。 我了个擦,没有源代码但是还要结局客户的问题。只能到线上将对应程序的class文件拷贝到本地进行修改,每修

    2024年02月03日
    浏览(38)
  • 【C语言】从预处理到机器代码的C语言编译过程解析

    当我们编写一个C语言程序时,我们需要经历一个编译的过程,将源代码转换为可执行的机器代码。这个过程涉及到多个阶段和环节,每个阶段都有其特定的任务和功能。在本篇博客中,我们将详细介绍C语言的编译过程。 目录 一、预处理阶段(Preprocessing) 二、词法分析阶段

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包