`
zwhc
  • 浏览: 265893 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

发布新程序:java 字节码查看器

阅读更多
本程序用于显示 java class 文件的结构。
1、程序先以 UE 十六进制编辑模式的显示方式显示 class 文件。
2、然后,显示各个字节对应的含义。

如,
[debug] code:03 3C 84 01 01 B1
[debug] iconst_0
[debug] istore_1
[debug] iinc
[debug] return

第一行表示程序代码的字节码,以后四行,是这些字节码对应的指令。

------------------------------------------------------

本程序改自 jclasslib_windows_3_0。

------------------------------------------------------
你可以通过如下方式使用 :
java -cp "./bin" -Djclasslib.io.debug=true org.gjt.jclasslib.io.ClassFileReader BC_pp.class

运行后,你可以看到如下信息:

00000000h: CA FE BA BE 00 00 00 31 00 16 07 00 02 01 00 0A ; .......1........
00000010h: 74 65 73 74 2F 42 43 5F 70 70 07 00 04 01 00 10 ; test/BC_pp......
00000020h: 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 ; java/lang/Object
00000030h: 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 56 01 ; ...<init>...()V.
00000040h: 00 04 43 6F 64 65 0A 00 03 00 09 0C 00 05 00 06 ; ..Code..........
00000050h: 01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 ; ...LineNumberTab
00000060h: 6C 65 01 00 12 4C 6F 63 61 6C 56 61 72 69 61 62 ; le...LocalVariab
00000070h: 6C 65 54 61 62 6C 65 01 00 04 74 68 69 73 01 00 ; leTable...this..
00000080h: 0C 4C 74 65 73 74 2F 42 43 5F 70 70 3B 01 00 04 ; .Ltest/BC_pp;...
00000090h: 6D 61 69 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C ; main...([Ljava/l
000000A0h: 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 01 00 04 ; ang/String;)V...
000000B0h: 61 72 67 73 01 00 13 5B 4C 6A 61 76 61 2F 6C 61 ; args...[Ljava/la
000000C0h: 6E 67 2F 53 74 72 69 6E 67 3B 01 00 01 69 01 00 ; ng/String;...i..
000000D0h: 01 49 01 00 0A 53 6F 75 72 63 65 46 69 6C 65 01 ; .I...SourceFile.
000000E0h: 00 0A 42 43 5F 70 70 2E 6A 61 76 61 00 21 00 01 ; ..BC_pp.java.!..
000000F0h: 00 03 00 00 00 00 00 02 00 01 00 05 00 06 00 01 ; ................
00000100h: 00 07 00 00 00 2F 00 01 00 01 00 00 00 05 2A B7 ; ...../........*.
00000110h: 00 08 B1 00 00 00 02 00 0A 00 00 00 06 00 01 00 ; ................
00000120h: 00 00 03 00 0B 00 00 00 0C 00 01 00 00 00 05 00 ; ................
00000130h: 0C 00 0D 00 00 00 09 00 0E 00 0F 00 01 00 07 00 ; ................
00000140h: 00 00 42 00 01 00 02 00 00 00 06 03 3C 84 01 01 ; ..B.........<...
00000150h: B1 00 00 00 02 00 0A 00 00 00 0E 00 03 00 00 00 ; ................
00000160h: 06 00 02 00 07 00 05 00 08 00 0B 00 00 00 16 00 ; ................
00000170h: 02 00 00 00 06 00 10 00 11 00 00 00 02 00 04 00 ; ................
00000180h: 12 00 13 00 01 00 01 00 14 00 00 00 02 00 15    ; ...............

[debug] CAFEBABE
[debug] read magic number
[debug] 0000
[debug] read minor version 0
[debug] 0031
[debug] read major version 49
[debug] 0016
[debug] read constant pool count 22
[debug] reading constant pool entry 1
[debug] 07
[debug] 0002
[debug] read CONSTANT_Class_info with name_index 2
[debug] reading constant pool entry 2
[debug] 01
[debug] read CONSTANT_Utf8_info with length 10 ("test/BC_pp")
[debug] reading constant pool entry 3
[debug] 07
[debug] 0004
[debug] read CONSTANT_Class_info with name_index 4
[debug] reading constant pool entry 4
[debug] 01
[debug] read CONSTANT_Utf8_info with length 16 ("java/lang/Object")
[debug] reading constant pool entry 5
[debug] 01
[debug] read CONSTANT_Utf8_info with length 6 ("<init>")
[debug] reading constant pool entry 6
[debug] 01
[debug] read CONSTANT_Utf8_info with length 3 ("()V")
[debug] reading constant pool entry 7
[debug] 01
[debug] read CONSTANT_Utf8_info with length 4 ("Code")
[debug] reading constant pool entry 8
[debug] 0A
[debug] read CONSTANT_Methodref_info with class_index 3 and name_and_type_index
9
[debug] reading constant pool entry 9
[debug] 0C
[debug] read CONSTANT_NameAndType_info with name_index 5 and descriptor_index 6
[debug] reading constant pool entry 10
[debug] 01
[debug] read CONSTANT_Utf8_info with length 15 ("LineNumberTable")
[debug] reading constant pool entry 11
[debug] 01
[debug] read CONSTANT_Utf8_info with length 18 ("LocalVariableTable")
[debug] reading constant pool entry 12
[debug] 01
[debug] read CONSTANT_Utf8_info with length 4 ("this")
[debug] reading constant pool entry 13
[debug] 01
[debug] read CONSTANT_Utf8_info with length 12 ("Ltest/BC_pp;")
[debug] reading constant pool entry 14
[debug] 01
[debug] read CONSTANT_Utf8_info with length 4 ("main")
[debug] reading constant pool entry 15
[debug] 01
[debug] read CONSTANT_Utf8_info with length 22 ("([Ljava/lang/String;)V")
[debug] reading constant pool entry 16
[debug] 01
[debug] read CONSTANT_Utf8_info with length 4 ("args")
[debug] reading constant pool entry 17
[debug] 01
[debug] read CONSTANT_Utf8_info with length 19 ("[Ljava/lang/String;")
[debug] reading constant pool entry 18
[debug] 01
[debug] read CONSTANT_Utf8_info with length 1 ("i")
[debug] reading constant pool entry 19
[debug] 01
[debug] read CONSTANT_Utf8_info with length 1 ("I")
[debug] reading constant pool entry 20
[debug] 01
[debug] read CONSTANT_Utf8_info with length 10 ("SourceFile")
[debug] reading constant pool entry 21
[debug] 01
[debug] read CONSTANT_Utf8_info with length 10 ("BC_pp.java")
[debug] read access flags 0x0021
[debug] read this_class index 1
[debug] read super_class index 3
[debug] read interfaces count 0
[debug] read fields count 0
[debug] 0002
[debug] read methods count 2
[debug] 0001 0005 0006
[debug] 0001
[debug] attributeNameIndex:0007
[debug] attributeLength:0000002F
[debug] attributeName:Code
[debug] 0001 0001 00000005
bb.length:5
[debug] code:2A B7 00 08 B1
[debug] aload_0
[debug] invokespecial
[debug] return
[debug] 0002
[debug] attributeNameIndex:000A
[debug] attributeLength:00000006
[debug] attributeName:LineNumberTable
[debug] read LineNumberTable entry with start_pc 0, line_number 3
[debug] read LineNumberTable attribute with 1 entries
[debug] attributeNameIndex:000B
[debug] attributeLength:0000000C
[debug] attributeName:LocalVariableTable
bb.length:0
[debug] info:
[debug] read uninterpreted attribute of reported type LocalVariableTableLocalVar
iableTable attribute with 0 entries
[debug] read LocalVariableTable entry with start_pc 0, length 5, name_index 12,
descriptor_index 13, index 0
[debug] read LocalVariableTable attribute with 1 entries
[debug] read Code attribute with max_stack 1, max_locals 1, code_length 5
[debug] read method with access flags 0x0001, name_index 5, descriptor_index 6,
1 attributes
[debug] 0009 000E 000F
[debug] 0001
[debug] attributeNameIndex:0007
[debug] attributeLength:00000042
[debug] attributeName:Code
[debug] 0001 0002 00000006
bb.length:6
[debug] code:03 3C 84 01 01 B1
[debug] iconst_0
[debug] istore_1
[debug] iinc
[debug] return
[debug] 0002
[debug] attributeNameIndex:000A
[debug] attributeLength:0000000E
[debug] attributeName:LineNumberTable
[debug] read LineNumberTable entry with start_pc 0, line_number 6
[debug] read LineNumberTable entry with start_pc 2, line_number 7
[debug] read LineNumberTable entry with start_pc 5, line_number 8
[debug] read LineNumberTable attribute with 3 entries
[debug] attributeNameIndex:000B
[debug] attributeLength:00000016
[debug] attributeName:LocalVariableTable
bb.length:0
[debug] info:
[debug] read uninterpreted attribute of reported type LocalVariableTableLocalVar
iableTable attribute with 0 entries
[debug] read LocalVariableTable entry with start_pc 0, length 6, name_index 16,
descriptor_index 17, index 0
[debug] read LocalVariableTable entry with start_pc 2, length 4, name_index 18,
descriptor_index 19, index 1
[debug] read LocalVariableTable attribute with 2 entries
[debug] read Code attribute with max_stack 1, max_locals 2, code_length 6
[debug] read method with access flags 0x0009, name_index 14, descriptor_index 15
, 1 attributes
[debug] 0001
[debug] attributeNameIndex:0014
[debug] attributeLength:00000002
[debug] attributeName:SourceFile
[debug] read SourceFile attribute with sourcefile_index 21
[debug] read 1 attributes for the ClassFile structure

1
0
分享到:
评论

相关推荐

    java字节码编辑器

    Java字节码编辑器是一种工具,它允许开发者直接编辑Java程序编译后的`.class`文件,而不是反编译后再重新编译。这种编辑器对于理解、调试和优化Java代码非常有用,尤其是对于那些无法访问源代码或者需要进行底层操作...

    字节码查看器.rar

    字节码查看器,如压缩包中的“jd-gui.exe”,是一款强大的工具,用于查看和分析Java字节码。通过它,开发者可以查看类文件的结构,包括类名、接口、字段、方法等信息,同时还能看到字节码指令的具体序列,这对于理解...

    jclazz win JAVA 字节码查看器

    总的来说,jclazz作为一款优秀的JAVA字节码查看器,为开发者提供了深入洞察Java程序的窗口。通过熟练掌握这款工具,我们可以更好地理解Java运行机制,进行高效的代码调试和优化,从而提升整体的开发水平。在1.2.2...

    Recaf一个现代Java字节码编辑器

    **Recaf:现代Java字节码编辑器** 在Java开发领域,字节码编辑器是一种不可或缺的工具,它允许开发者查看、分析并修改Java类文件的字节码,从而实现对程序运行时行为的深入控制。Recaf是这样一个现代、用户友好的...

    java字节码查看器

    了解java编译机制的必备工具 主程序为ee.ioc.cs.jbe.browser包下BrowserApplication.java 其中的jar文件可以直接当做程序打开 用它打开class文件即可查看字节码 jdk最好为最新版本

    class运行器v6(可以运行java字节码文件的工具 含代码)

    标题中的“class运行器v6”是一个用于执行Java字节码文件的应用程序,它允许用户在没有完整Java环境的情况下运行单个.class文件。这个工具可能是由开发者为了方便测试或教学目的而创建的,特别是对于那些不熟悉或者...

    jclasslib:jclasslib字节码查看器是一种工具,可可视化已编译Java类文件的所有方面以及所包含的字节码

    jclasslib字节码查看器下载可以从下载安装程序。目的jclasslib字节码查看器是一种工具,可可视化已编译Java类文件和包含的字节码的所有方面。 此外,它包含一个库,使开发人员可以读写Java类文件和字节码。 通过在主...

    Java 字节码简单说明.zip

    理解Java字节码有助于优化程序性能,例如,通过查看字节码可以分析方法的调用频率,为JIT编译提供依据;或者通过修改字节码实现代码注入,进行调试或增强功能。 总的来说,Java字节码是Java平台的核心组成部分,它...

    jclasslib,JClullb字节码查看器是一种工具,它可以可视化编译的Java类文件和包含的字节码的所有方面。.zip

    JClasslib是一款强大的字节码查看器,对于Java开发人员来说,它是一个宝贵的资源,可以帮助他们深入理解字节码,优化代码,调试问题,以及探索JVM的工作原理。开源的特性使得它更加灵活且易于适应各种需求,对于学习...

    JByteMod-Beta,Java字节码编辑器.zip

    JByteMod-Beta是一款强大的Java字节码编辑器,专为开发者设计,旨在提供一个高效、直观的环境来查看、修改和分析Java字节码。这款工具的核心特性包括语法高亮显示、实时反编译以及方法流程图的绘制,这些都是对Java...

    现代 Java 字节码编辑器.zip

    下载启动器使用方法和说明可在启动器仓库中找到快照版本请参阅发布工件的CI 操作独立发行 (目前 4X 没有)特征轻松地从高级或低级编辑 Java 字节码(减去烦人的部分)Recaf 中的编辑器功能抽象出了已编译 Java 应用...

    从一个class文件深入理解Java字节码结构

    通过深入了解这些结构,开发者可以更好地理解Java字节码的工作原理,从而优化代码执行效率,调试程序,甚至实现字节码级别的动态修改和插桩技术。这对于性能调优、AOP(面向切面编程)以及理解JVM的工作方式至关重要...

    jclasslib.rar_Java 8_java8 下载_java字节码查看工具;_jclasslib.jar_允许修改Jav

    jclasslib是一款免费开源的java字节码查看工具,该软件不但可以查看java字节码,同时还包含一个类库允许开发者读取,修改,写入Java Class文件与字节码。简单的说:用户可以通过jclasslib修改jar包下面的类,是一个...

    class字节码转java代码工具

    标题提到的“class字节码转java代码工具”就是这样一个实用程序,它能将Java字节码转换回源代码格式,简化了开发者的工作流程,尤其在没有原始源代码的情况下。 Java字节码是Java虚拟机(JVM)运行的中间语言,当...

    Java字节码

    Jclasslib是一款强大的Java字节码查看器,可用于分析和理解Java字节码。提供的_jclasslib_windows_3_1.exe文件就是该工具的Windows版本。通过这个工具,开发者可以深入到类文件的内部,查看字节码指令,了解方法的...

    使用类分解器Javap分析Java字节码

    Java字节码是Java程序在运行前被编译成的一种中间表示形式,它不依赖于任何特定的处理器架构,使得Java具有跨平台的能力。`Javap`是Java开发工具包(JDK)中自带的一个命令行工具,专门用于分析Java字节码,帮助...

    字节码实战包含class,字节码.zip

    在Java编程语言中,字节码(Bytecode)扮演着至关重要的角色,它是JVM(Java虚拟机)理解和执行程序的基础。"字节码实战"的主题深入探讨了字节码的概念、生成以及如何利用它来优化Java应用程序。下面将详细阐述相关...

    java字节码反编译工具

    Java字节码反编译工具是开发者们在研究或调试Java程序时常用的一种辅助软件,它能够将已编译的Java字节码(.class文件)转换回可读性较高的源代码形式。这样的工具使得开发者可以查看和理解第三方库或者无法获取源代码...

Global site tag (gtag.js) - Google Analytics