jordonyang / ClassParser

A Java class file parser based on Java Visual Machine Specification,just like javap.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Introduction

A Java class file parser based on Java Visual Machine Specification,just like javap which is an inclusive powerful tool of Java Developer's Kit to parser byte code.

Simple Test

source file of the test case

package decompile;

import java.util.Iterator;

public class IterableClass implements Iterable<String>{

    private String[] arr;

    public IterableClass(String[] arr) {
        this.arr = arr;
    }

    @Override
    public Iterator<String> iterator() {
        return new Iterator<String>() { 
            private int index = 0;
            @Override
            public boolean hasNext() {
                return index < arr.length;
            }

            @Override
            public String next() {
                return arr[index++];
            }

            @Override
            public void remove() {
               //TODO
            }
        };
    }
}

hexadecimal data of the class file

CA, FE, BA, BE, 00, 00, 00, 34, 00, 25, 09, 00, 05, 00, 1C, 0A
00, 06, 00, 1D, 07, 00, 1E, 0A, 00, 03, 00, 1F, 07, 00, 20, 07
00, 21, 07, 00, 22, 01, 00, 0C, 49, 6E, 6E, 65, 72, 43, 6C, 61
73, 73, 65, 73, 01, 00, 03, 61, 72, 72, 01, 00, 13, 5B, 4C, 6A
61, 76, 61, 2F, 6C, 61, 6E, 67, 2F, 53, 74, 72, 69, 6E, 67, 3B
01, 00, 06, 3C, 69, 6E, 69, 74, 3E, 01, 00, 16, 28, 5B, 4C, 6A
61, 76, 61, 2F, 6C, 61, 6E, 67, 2F, 53, 74, 72, 69, 6E, 67, 3B
29, 56, 01, 00, 04, 43, 6F, 64, 65, 01, 00, 0F, 4C, 69, 6E, 65
4E, 75, 6D, 62, 65, 72, 54, 61, 62, 6C, 65, 01, 00, 12, 4C, 6F
63, 61, 6C, 56, 61, 72, 69, 61, 62, 6C, 65, 54, 61, 62, 6C, 65
01, 00, 04, 74, 68, 69, 73, 01, 00, 19, 4C, 64, 65, 63, 6F, 6D
70, 69, 6C, 65, 2F, 49, 74, 65, 72, 61, 62, 6C, 65, 43, 6C, 61
73, 73, 3B, 01, 00, 08, 69, 74, 65, 72, 61, 74, 6F, 72, 01, 00
16, 28, 29, 4C, 6A, 61, 76, 61, 2F, 75, 74, 69, 6C, 2F, 49, 74
65, 72, 61, 74, 6F, 72, 3B, 01, 00, 09, 53, 69, 67, 6E, 61, 74
75, 72, 65, 01, 00, 2A, 28, 29, 4C, 6A, 61, 76, 61, 2F, 75, 74
69, 6C, 2F, 49, 74, 65, 72, 61, 74, 6F, 72, 3C, 4C, 6A, 61, 76
61, 2F, 6C, 61, 6E, 67, 2F, 53, 74, 72, 69, 6E, 67, 3B, 3E, 3B
01, 00, 0A, 61, 63, 63, 65, 73, 73, 24, 30, 30, 30, 01, 00, 2E
28, 4C, 64, 65, 63, 6F, 6D, 70, 69, 6C, 65, 2F, 49, 74, 65, 72
61, 62, 6C, 65, 43, 6C, 61, 73, 73, 3B, 29, 5B, 4C, 6A, 61, 76
61, 2F, 6C, 61, 6E, 67, 2F, 53, 74, 72, 69, 6E, 67, 3B, 01, 00
02, 78, 30, 01, 00, 3A, 4C, 6A, 61, 76, 61, 2F, 6C, 61, 6E, 67
2F, 4F, 62, 6A, 65, 63, 74, 3B, 4C, 6A, 61, 76, 61, 2F, 6C, 61
6E, 67, 2F, 49, 74, 65, 72, 61, 62, 6C, 65, 3C, 4C, 6A, 61, 76
61, 2F, 6C, 61, 6E, 67, 2F, 53, 74, 72, 69, 6E, 67, 3B, 3E, 3B
01, 00, 0A, 53, 6F, 75, 72, 63, 65, 46, 69, 6C, 65, 01, 00, 12
49, 74, 65, 72, 61, 62, 6C, 65, 43, 6C, 61, 73, 73, 2E, 6A, 61
76, 61, 0C, 00, 09, 00, 0A, 0C, 00, 0B, 00, 23, 01, 00, 19, 64
65, 63, 6F, 6D, 70, 69, 6C, 65, 2F, 49, 74, 65, 72, 61, 62, 6C
65, 43, 6C, 61, 73, 73, 24, 31, 0C, 00, 0B, 00, 24, 01, 00, 17
64, 65, 63, 6F, 6D, 70, 69, 6C, 65, 2F, 49, 74, 65, 72, 61, 62
6C, 65, 43, 6C, 61, 73, 73, 01, 00, 10, 6A, 61, 76, 61, 2F, 6C
61, 6E, 67, 2F, 4F, 62, 6A, 65, 63, 74, 01, 00, 12, 6A, 61, 76
61, 2F, 6C, 61, 6E, 67, 2F, 49, 74, 65, 72, 61, 62, 6C, 65, 01
00, 03, 28, 29, 56, 01, 00, 1C, 28, 4C, 64, 65, 63, 6F, 6D, 70
69, 6C, 65, 2F, 49, 74, 65, 72, 61, 62, 6C, 65, 43, 6C, 61, 73
73, 3B, 29, 56, 00, 21, 00, 05, 00, 06, 00, 01, 00, 07, 00, 01
00, 02, 00, 09, 00, 0A, 00, 00, 00, 03, 00, 01, 00, 0B, 00, 0C
00, 01, 00, 0D, 00, 00, 00, 46, 00, 02, 00, 02, 00, 00, 00, 0A
2A, B7, 00, 02, 2A, 2B, B5, 00, 01, B1, 00, 00, 00, 02, 00, 0E
00, 00, 00, 0E, 00, 03, 00, 00, 00, 09, 00, 04, 00, 0A, 00, 09
00, 0B, 00, 0F, 00, 00, 00, 16, 00, 02, 00, 00, 00, 0A, 00, 10
00, 11, 00, 00, 00, 00, 00, 0A, 00, 09, 00, 0A, 00, 01, 00, 01
00, 12, 00, 13, 00, 02, 00, 0D, 00, 00, 00, 33, 00, 03, 00, 01
00, 00, 00, 09, BB, 00, 03, 59, 2A, B7, 00, 04, B0, 00, 00, 00
02, 00, 0E, 00, 00, 00, 06, 00, 01, 00, 00, 00, 0F, 00, 0F, 00
00, 00, 0C, 00, 01, 00, 00, 00, 09, 00, 10, 00, 11, 00, 00, 00
14, 00, 00, 00, 02, 00, 15, 10, 08, 00, 16, 00, 17, 00, 01, 00
0D, 00, 00, 00, 2F, 00, 01, 00, 01, 00, 00, 00, 05, 2A, B4, 00
01, B0, 00, 00, 00, 02, 00, 0E, 00, 00, 00, 06, 00, 01, 00, 00
00, 05, 00, 0F, 00, 00, 00, 0C, 00, 01, 00, 00, 00, 05, 00, 18
00, 11, 00, 00, 00, 03, 00, 14, 00, 00, 00, 02, 00, 19, 00, 1A
00, 00, 00, 02, 00, 1B, 00, 08, 00, 00, 00, 0A, 00, 01, 00, 03
00, 00, 00, 00, 00, 00

analytical result of the constant pool

  #1 = Filedref        #5, #28   // decompile/IterableClass, arr:[Ljava/lang/String;
  #2 = Methodref       #6, #29   // java/lang/Object, <init>:()V
  #3 = Class           #30       // decompile/IterableClass$1
  #4 = Methodref       #3, #31   // decompile/IterableClass$1, <init>:(Ldecompile/IterableClass;)V
  #5 = Class           #32       // decompile/IterableClass
  #6 = Class           #33       // java/lang/Object
  #7 = Class           #34       // java/lang/Iterable
  #8 = Utf8            InnerClasses
  #9 = Utf8            arr       
  #10 = Utf8           [Ljava/lang/String;
  #11 = Utf8           <init>    
  #12 = Utf8           ([Ljava/lang/String;)V
  #13 = Utf8           Code      
  #14 = Utf8           LineNumberTable
  #15 = Utf8           LocalVariableTable
  #16 = Utf8           this      
  #17 = Utf8           Ldecompile/IterableClass;
  #18 = Utf8           iterator  
  #19 = Utf8           ()Ljava/util/Iterator;
  #20 = Utf8           Signature 
  #21 = Utf8           ()Ljava/util/Iterator<Ljava/lang/String;>;
  #22 = Utf8           access$000
  #23 = Utf8           (Ldecompile/IterableClass;)[Ljava/lang/String;
  #24 = Utf8           x0        
  #25 = Utf8           Ljava/lang/Object;Ljava/lang/Iterable<Ljava/lang/String;>;
  #26 = Utf8           SourceFile
  #27 = Utf8           IterableClass.java
  #28 = NameAndType    #9, #10   // arr:[Ljava/lang/String;
  #29 = NameAndType    #11, #35  // <init>:()V
  #30 = Utf8           decompile/IterableClass$1
  #31 = NameAndType    #11, #36  // <init>:(Ldecompile/IterableClass;)V
  #32 = Utf8           decompile/IterableClass
  #33 = Utf8           java/lang/Object
  #34 = Utf8           java/lang/Iterable
  #35 = Utf8           ()V       
  #36 = Utf8           (Ldecompile/IterableClass;)V

About

A Java class file parser based on Java Visual Machine Specification,just like javap.


Languages

Language:Java 100.0%