Skip to content

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

Notifications You must be signed in to change notification settings

jordonyang/ClassParser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages