首页 > 其他分享 >文件格式分析 --- 最小class

文件格式分析 --- 最小class

时间:2025-01-19 15:46:34浏览次数:1  
标签:lang java Object HelloWorld --- met001 文件格式 inline class

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


  1. met001_slot000 是局部变量表中的第一个槽位(slot)的标签名称
  2. .var 0 表示这是局部变量表中索引为0的变量
  3. is this 表明这个变量是当前类的实例引用(this引用)
  4. com.example.HelloWorld 指定了变量的类型
  5. from met001_begin to met001_end 定义了这个变量的作用域范围,从方法开始到方法结束
 
  • 每个方法都有自己的局部变量表
  • 局部变量表中的每个位置称为一个槽位(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

相关文章

  • [2025.1.19 JavaSE学习]网络编程-2(netstat指令 && TCP补充)
    netstatnetstat-an:可以查看当前主机网络情况,包括端口监听情况和网络连接情况netstat-an|more:可以分页显示在dos控制台执行Listening表示某个端口在监听如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息PS:netstat-anb,可以发现,8888端口号在上一节程序运行......
  • Airflow - Study Notes 4
      Toretrievetheseimages,IfrequentlymakeuseoftheNASAAstronomyPictureoftheDayAPI (https://apod.nasa.gov/apod/astropix.html)togatheranewimage.Thisisafree APIrequiringanAPIkeytobecreatedbutiseasilyaccessible.  ......
  • SSM在线仓储管理系统-毕业设计源码96366
    摘要本文介绍了一个基于SSM框架的在线仓储管理系统的设计与实现。该系统旨在提供一个便捷、高效的仓储管理平台,帮助企业实现对库存、出入库等仓储操作的自动化管理。在线仓储管理系统具有以下主要功能:用户登录与权限控制、库存管理、出入库管理、订单管理等。通过该系统,企......
  • ingress-nginx代理tcp使其能外部访问mysql
    一、helm部署mysql主从复制helmrepoaddbitnamihttps://charts.bitnami.com/bitnamihelmrepoupdate helmpullbitnami/mysql 解压后编辑values.yaml文件,修改如下(storageclass已设置默认类)117##@paramarchitectureMySQLarchitecture(`standalone`or`re......
  • Swift Parameter-free Attention Network模型详解及代码复现
    研究动机在深度学习领域,超分辨率技术的发展面临着模型复杂度与推理速度之间的权衡。传统的基于注意力的超分辨率网络虽然能提高性能,但往往需要较大的感受野和参数化的注意力图,这可能导致推理速度下降。为了解决这一问题,研究人员提出了SwiftParameter-freeAttentionNetwo......
  • 远铂DIY官网系统AI助手新增支持DeepSeek-V3 AI模型接口
            近日,量化巨头幻方量化的子公司深度求索(DeepSeek)发布了全新系列模型DeepSeek-V3,并同步开源。这一事件迅速引爆AI圈,DeepSeek-V3不仅霸榜开源模型,更在性能上与全球顶尖闭源模型GPT-4o和Claude-3.5-Sonnet不相上下。    更令人瞩目的是,该模型的训练成本仅......
  • 【华为OD-E卷 - 最长连续子序列 100分(python、java、c++、js、c)】
    【华为OD-E卷-最长连续子序列100分(python、java、c++、js、c)】题目有N个正整数组成的一个序列。给定整数sum,求长度最长的连续子序列,使他们的和等于sum,返回此子序列的长度,如果没有满足要求的序列,返回-1输入描述第一行输入是:N个正整数组成的一个序列第二行输入是:给定......
  • 【华为OD-E卷 - 找出两个整数数组中同时出现的整数 100分(python、java、c++、js、c)】
    【华为OD-E卷-找出两个整数数组中同时出现的整数100分(python、java、c++、js、c)】题目现有两个整数数组,需要你找出两个数组中同时出现的整数,并按照如下要求输出:有同时出现的整数时,先按照同时出现次数(整数在两个数组中都出现并目出现次数较少的那个)进行归类,然后按照出......
  • 【华为OD-E卷 - 计算疫情扩散时间 100分(python、java、c++、js、c)】
    【华为OD-E卷-计算疫情扩散时间100分(python、java、c++、js、c)】题目在一个地图中(地图由n*n个区域组成),有部分区域被感染病菌。感染区域每天都会把周围(上下左右)的4个区域感染。请根据给定的地图计算,多少天以后,全部区域都会被感染。如果初始地图上所有区域全部都被感......
  • 少一点If/Else - 状态模式(State Pattern)
    状态模式(StatePattern)状态模式(StatePattern)状态模式(StatePattern)概述状态模式(StatePattern)结构图状态模式(StatePattern)涉及的角色talkischeap,showyoumycode总结状态模式(StatePattern)状态模式(StatePattern)是一种行为型设计模式,它允许对象在其内部状态......