java字节码文件 helloworld

原创 2016年08月31日 14:56:28

java代码

\\A.java
public class A{}

javac A.java \\得到 A.class
javap -v A.class

下面是javap工具帮我们生成的文本的字节码文件

Classfile /home/yao/test/javap/A.class
  Last modified Aug 30, 2016; size 176 bytes
  MD5 checksum f35fe1f44d02cd491e6561a30327ceb5
  Compiled from "A.java"
public class A
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #3.#10         // java/lang/Object."<init>":()V
   #2 = Class              #11            // A
   #3 = Class              #12            // java/lang/Object
   #4 = Utf8               <init>
   #5 = Utf8               ()V
   #6 = Utf8               Code
   #7 = Utf8               LineNumberTable
   #8 = Utf8               SourceFile
   #9 = Utf8               A.java
  #10 = NameAndType        #4:#5          // "<init>":()V
  #11 = Utf8               A
  #12 = Utf8               java/lang/Object
{
  public A();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 1: 0
}

不过瘾?自己按照java规范翻译一遍~

\\通过linux hexdump -C A.class 可以以16进制方式查看文件
00000000  ca fe ba be 00 00 00 34  00 0d 0a 00 03 00 0a 07  |.......4........|
00000010  00 0b 07 00 0c 01 00 06  3c 69 6e 69 74 3e 01 00  |........<init>..|
00000020  03 28 29 56 01 00 04 43  6f 64 65 01 00 0f 4c 69  |.()V...Code...Li|
00000030  6e 65 4e 75 6d 62 65 72  54 61 62 6c 65 01 00 0a  |neNumberTable...|
00000040  53 6f 75 72 63 65 46 69  6c 65 01 00 06 41 2e 6a  |SourceFile...A.j|
00000050  61 76 61 0c 00 04 00 05  01 00 01 41 01 00 10 6a  |ava........A...j|
00000060  61 76 61 2f 6c 61 6e 67  2f 4f 62 6a 65 63 74 00  |ava/lang/Object.|
00000070  21 00 02 00 03 00 00 00  00 00 01 00 01 00 04 00  |!...............|
00000080  05 00 01 00 06 00 00 00  1d 00 01 00 01 00 00 00  |................|
00000090  05 2a b7 00 01 b1 00 00  00 01 00 07 00 00 00 06  |.*..............|
000000a0  00 01 00 00 00 01 00 01  00 08 00 00 00 02 00 09  |................|
000000b0

下面就按java规范来翻译一下,
java官方字节码规范 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.24

->ca fe ba be
    magic u4
->00 00 00 34   
    minor_verion u2;major_version u2,jkd8
->00 0d ->13
    constant_pool_count
->#1 0a 00 03 00 0a    
    [CONSTANT_METHOD] u1 tag; u2 class_index; u2 name_and_type_index
->#2 07 00 0b 
    [CONSTANT_CLASS]  u1 tag; u2 name_index
->#3 07 00 0c
    [CONSTANT_CLASS]  u1 tag; u2 name_index
->#4 01 00 06 3c 69 6e 69 74 3e
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  <init>
->#5 01 00 03 28 29 56
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  ()V
->#6 01 00 04 43 6f 64 65
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  Code
->#7 01 00 0f 4c 69 6e 65 4e 75 6d 62 65 72  54 61 62 6c 65
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  LineNumberTable
->#8 01 00 0a 53 6f 75 72 63 65 46 69  6c 65
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  SourceFile
->#9 01 00 06 41 2e 6a 61 76 61
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  A.java
->#10 0c 00 04 00 05
    [CONSTANT_NAEMANDTYPE] u1 tag;u2 name_index;u2 descriptor_index;  00 04-><init> 00 05>()V
->#11 01 00 01 41
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  A
->#12 01 00 10 6a 61 76 61 2f 6c 61 6e 67  2f 4f 62 6a 65 63 74
    [CONSTANT_Utf8]   u1 tag; u2 length; u1[length] literal  java/lange/Object
->00 21 
    access flag u2, ACC_PUBLIC,ACC_SUPPER
->00 02
    u2 this_class
->00 03 
    u2 super_class
->00 00 
    u2 interfaces count
->00 00 
    u2 fields count 
->00 01 
    u2 methods count
{ method info #1
->00 01
    u2 access flag  public
->00 04
    u2 name index <init>
->00 05
    u2 descriptor index ()V
->00 01
    u2 attributes_count
->00 06
    u2 attribute_name_index  Code
->00 00 00 1d
    u4 attribute_length
->00 01
    u2 max_stack
->00 01
    u2 max_locals
->00 00 00 05
    u4 code_length
->2a b7 00 01 b1  
    u1 code[length]
->00 00
    u2 exception_table_length; 
->00 01 
    u2 attributes_count
->00 07 
    u2 attributes_name ->  LineNumberTable
->00 00 00 06 
    u4 attributes len
->00 01 
    u2 line_number_table_length
->00 00
    u2 start pc
->00 01 
    u2 linue number
}   
->00 01
    u2 attributes count
->00 08
    u2 attribute_name_index  > SourceFIle
->00 00 00 02
    u4 attribute_length
->00 09
    u1 info[attribute_length] 00 09 -> #9 A.java 
版权声明:本文为博主原创文章,未经博主允许不得转载。

Java字节码.class文件案例分析

我是个懒人,平时都不太喜欢写点东西,大部分时间都是自己一个人在琢磨,被同事给了个外号叫:“码疯”;很少泡在CSDN的Blog中,也只是偶尔想起来了写点东西过来玩玩,大部分时间都习惯了一个人享受午后阳光...
  • silentbalanceyh
  • silentbalanceyh
  • 2015年01月12日 15:57
  • 6520

jvm(6)-java类文件结构(字节码文件)

【0】README 0.1)本文部分文字描述转自 “深入理解jvm”,旨在学习 类文件结构  的基础知识; 0.2)本文荔枝以及荔枝的分析均为原创; 【1】类文件概述 1)各种不同平台的虚拟机与所...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2016年03月27日 20:25
  • 2204

如何反编译java字节码文件---使用javap反编译Java字节码文件

在上一篇文章《StringBuilder、StringBuffer与Java字符串处理》中,我们反汇编了Java字节码文件,通过查看编译器编译后的字节命令,我们能够更清楚地了解Java在字符串拼接等方...
  • linysheart
  • linysheart
  • 2015年04月01日 10:19
  • 1570

java字节码文件查看工具,查看class文件

  • 2018年01月15日 14:04
  • 770KB
  • 下载

使用javap命令或者eclipse的Bytecode visualizer插件阅读java字节码文件

阅读java的class文件,最常用的方法是jdk自带的javap命令,但是在eclipse有Bytecode visualizer插件,也可以很好地实现阅读; 直接阅读class文件,能够了解一下...
  • wakeupwakeup
  • wakeupwakeup
  • 2016年03月23日 17:33
  • 971

深入Java虚拟机之字节码文件格式

这两天在研究JavaAgent,动力是想弄明白playframework到底是做到热修改的。从目前的少许了解,推测出它利用javaagent在类导入到JVM之前,对字节码进行了修改。然后再配合clas...
  • dac55300424
  • dac55300424
  • 2013年10月07日 17:02
  • 902

Java字节码文件

字节码简介 编译器将Java源码编译成符合Java虚拟机规范的字节码文件。 字节码组成结构比较特殊,其内部不包含任何分隔符区分段落。 一组8位字节单位的字节流组成了一个完整的字节码文件。 字节码内部组...
  • chenzhao2013
  • chenzhao2013
  • 2016年12月29日 00:53
  • 998

Java字节码文件虚拟指令集简介

Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(Opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(Operands)所构成。虚拟机中许多指令并不包含操作数,只有一...
  • limm33
  • limm33
  • 2017年02月21日 09:43
  • 357

Java字节码文件指令操作码助记符含义

Java二进制指令代码解析 小注:去年在看《深入解析JVM》书的时候做的一些记录,同时参考了《Java虚拟机规范》。只是对指令的一些列举,加入了一些自己的理解。可以用来查询。 Java二进制指令代...
  • Zz110753
  • Zz110753
  • 2018年01月08日 17:17
  • 32

使用javap反编译Java字节码文件

我们如何反编译指定的Java字节码文件呢?其实,在Sun公司提供的JDK中,就已经内置了Java字节码文件反编译工具javap.exe(位于JDK安装目录的bin文件夹下)。 我们可以在dos窗...
  • Sun_P0
  • Sun_P0
  • 2016年06月23日 09:17
  • 388
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java字节码文件 helloworld
举报原因:
原因补充:

(最多只允许输入30个字)