class是java编译后的可执行的字节码文件。下面是java
package com.example; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World by gk"); } }
编译后的二进制
用ida反汇编
; +-------------------------------------------------------------------------+ ; | 这个文件由 IDA (交互式反汇编器) 生成 | ; | 版权所有 (c) 2023 Hex-Rays, <support@hex-rays.com> | ; +-------------------------------------------------------------------------+ ; 文件校验信息 ; Input SHA256 : A4C83C79AC32ED56D145FF91391E36F338B37EB95EBAB2A4D4192795AFEE16D0 ; Input MD5 : FBC27DC5D80422D99FACC4CA045323F6 ; Input CRC32 : 0E1D6D53 ; 文件信息 ; 文件名称 : C:\Users\21558\Pictures\jar2\HelloWorld.class ; 文件格式 : JavaVM Class File (JDK 1.8版本) ; 字节码版本:Java 8 (52.0) .bytecode 52.0 .source "HelloWorld.java" ; 导入的类和方法原型声明 ;.import java.lang.Object ; 导入Object类,HelloWorld类的父类 ; java.lang.Object.<init>()void ; 导入Object类的构造方法 ;.import java.lang.System ; 导入System类 ; java.lang.System.out java.io.PrintStream ; 导入System.out静态字段 ;.import java.io.PrintStream ; 导入PrintStream类 ; java.io.PrintStream.println(java.lang.String)void ; 导入println方法 ; 类声明部分 .class public com.example.HelloWorld ; 声明公共类 HelloWorld .super java.lang.Object ; 声明父类为 Object ; 构造方法 .method public <init> ; 默认构造函数 .limit stack 1 ; 操作数栈最大深度为1 .limit locals 1 ; 局部变量表大小为1 met001_begin: .line 3 aload_0 ; 加载this引用到操作数栈 invokespecial java.lang.Object.<init>()void ; 调用父类Object的构造方法 return ; 返回 met001_end:
;met001_slot000 ; DATA XREF: <init>↑r
.var 0 is this com.example.HelloWorld from met001_begin to met001_end
.end method
- 是局部变量表中的第一个槽位(slot)的标签名称
- 表示这是局部变量表中索引为0的变量
- 表明这个变量是当前类的实例引用(this引用)
- 指定了变量的类型
- 定义了这个变量的作用域范围,从方法开始到方法结束
- 每个方法都有自己的局部变量表
- 局部变量表中的每个位置称为一个槽位(slot)
- 对于实例方法,slot0 永远保存this引用
- 方法的参数从slot1开始存放
- 方法内声明的局部变量从参数之后的slot开始存放
; main方法 .method public static main ; 主方法声明 .limit stack 2 ; 操作数栈最大深度为2 .limit locals 1 ; 局部变量表大小为1 met002_begin: .line 5 getstatic java.lang.System.out java.io.PrintStream ; 获取System.out静态字段 ldc "Hello World" ; 将字符串常量"Hello World"压入栈 invokevirtual java.io.PrintStream.println(java.lang.String)void ; 调用println方法 .line 6 return ; 返回 met002_end: .end method
标签:lang,java,Object,HelloWorld,---,met001,文件格式,inline,class From: https://www.cnblogs.com/GKLBB/p/18679485