Perbandingan hasil decompiler Java menggunakan Software JAVA Decompiler pada Versi 1.1 dan versi 1.3

Oleh : Afriyudi, M.Kom.

ABSTRACT

This research was objectived to know the java decompiler making process and fixing the existing Java Decompiler program that was objectived to be implemented into java decompiler program form for Java second edition.

It have done an experiment from the existing program therefore it was resulting Java decompiler program that was better than the before. The fixing of the program was deleting method constructor that did not do any statement. Experiment of some program have also done to know the difference between the optimation for each Java Development Kit version. The version used for this experiment was version 1.1 and version 1.3.

Concluded that the result of the experiment resulting program that was better than the program before. The result of the experiment showed that the optimation was better if it was used version 1.3 rather than version 1.1.

Key Word : Java Decompiler, method constructor, Java Development Kit

1. PENDAHULUAN

Java adalah bahasa yang dikembangkan oleh Sun dengan tujuan menciptakan sebuah bahasa pemrograman yang dinamis dan berorientasi objek. Java mendapat sensasi tak terduga semanjak diperkenalkan pertama kali di internet 1995. Yang membuat Java berbeda dengan bahasa lainnya adalah adanya lingkungan pemrograman yang tidak spesifik untuk satu platform .

Setelah menulis program java di editor text, file tersebut di simpan sebagai file sumber yang kemudian file sumber tersebut di kompilasi untuk menghasilkan sejenis file objek biner yang disebut file Class. File Class ini tidak langsung dieksekusi karena tidak memuat instruksi-instruksi yang langsung bisa dipahami oleh prosesor. Interpreter java adalah perwujudan mesin virtual java dalam bentuk perangkat lunak, karena itu interpreter java bisa mengeksekusi file class biner .

Istilah kode-byte muncul dari kenyataan bahwa setiap bagian program java yang dibuat akan direduksi menjadi urutan byte yang mewakili perintah ke dalam suatu mesin virtual. Java mengambil kode byte program yang dibuat dan memeriksanya satu persatu dalam softwarenya, mengubah keadaan Central Processing Unit (CPU) Virtual yang disimulasikan dalam interpreter untuk menggambarkan perubahan keadaan program sehingga program tersebut dapat dijalankan di berbagai platform.

Keistimewaan-keistimewaan seperti diataslah yang membuat banyak programmer beralih ke pemrograman java. Sehingga banyak program aplikasi internet yang didalamnya mengandung program java, mulai dari program Animasi, Jaringan, Multimedia, dan Database. Banyak juga program yang dibuat dengan istilah open source (program yang diberikan Kode sumbernya) sehingga menambah luas pengetahuan yang menggunakan program tersebut. Dan tidak kalah banyak juga program yang disediakan dengan tanpa menyertakan kode sumbernya. Perihal inilah yang menimbulkan minat programmer untuk membuat sebuah aplikasi yang dapat merubah suatu file class java menjadi file java text sehingga dapat di baca dan di mengerti isi dari program tersebut. Selain itu program ini dapat juga membantu programer untuk mendapatkan kembali kode sumbernya yang hilang karena suatu sebab misalnya tidak sengaja terhapus. Menurut Emmerik (2002) keamanan dan pendidikanadalah beberapa alasan mengapa program decompiler perlu di buat.

2. TINJAUAN PUSTAKA

2.1 Edisi Java

Edisi java dibagi menjadi 2 yaitu edisi pertama dan edisi kedua. Berikut ini penjelasan pembagian edisi tersebut.

Tabel 1: Edisi Java

Edisi Pertama

Edisi Kedua

JDK Beta

JDK 1.2

JDK 1.0

JDK 1.3

JDK 1.1

JDK 1.4

Sumber : http://java.sun.com/products/archive/index.htm.

2.2 Java Decompiler

Menurut Miecznikowski dan Hendren (2002), Java Decompiler adalah perubahan bytecode java menjadi kode sumber. Sedangkan menurut Proebsting dan Watterson (1998), Java decompiler adalah perubahan dari bahasa tingkat rendah (Machine Code) menjadi bahasa tingkat tinggi (Source Code).

Gambar 1 : Java Decompiler

2.3 Class File

Class file adalah sejenis file objek biner yang dihasilkan dari suatu sumber yang di kompilasi. Di dalam bahasa pemrograman berorientasi object, adalah merupakan definisi formal dari suatu objek. Class ini bertindak sebagai suatu template dari suatu objek yang siap pakai yang dibuat pada saat program dijalankan (run time). Class ini mendefinisikan sifat dari suatu objek dan metoda yang digunakan untuk mengontrol sifat dari objek tersebut. (Anuff,1997).

2.4 Byte-Code

Byte-Code adalah format instruksi berupa urutan byte yang mewakili perintah suatu mesin Virtual (JVM). Suatu form yang bisa dieksekusi oleh kode Java, yang dieksekusi dengan menggunakan Java virtual machine (VM). Biasanya juga disebut dengan interpreted code, pseudo code, and p-code. (Anuff,1997).

2.5 Java Virtual Machine (JVM)

JVM adalah kode-byte yang merepresentasikan instruksi bahasa mesin bagi sebuah mikroprocessor semu . JVM terdiri dari sebuah kelas pemanggil dan sebuah interpreter Java yang mengeksekusi kode arsitektur netral. Kelas pemanggil memanggil file .class dari kedua program Java dan Java API untuk dieksekusi oleh interpreter Java. Interpreter Java mungkin sebuah perangkat lunak interpreter yang menterjemahkan satu kode byte pada satu waktu, atau mungkin sebuah just-intime (JIT) kompiler yang menurunkan bytecode arsitektur netral kedalam bahasa mesin untuk host computer(Anuff,1997).

Gambar 2 : JVM Model

2.6 Komponen Pembuatan Java Decompiler

Pembuatan Java decompiler, pada perinsipnya membutuhkan beberapa komponen pendukung. Komponen yang digunakan untuk membuat java Decompiler adalah Informasi struktur file class, Byte-code Instruction set untuk membuat java deassembler dan yang terakhir adalah algoritma yang digunakan untuk membuat java decompiler(Proebsting dan Watterson :1998).

2.7 Struktur File Class

Sebuah File class terdiri dari urutan 8 bit per byte. Semua nilai 16 bit, 32 bit dan 64 bit dirancang untuk bisa dibaca dalam dua, empat dan delapan secara berurutan dalam 8 bit byte. Beberapa data Multibyte kadang disimpan dengan format big-endian, yaitu nilai terbesar letaknya didepan. Untuk platform Java 2 format ini bisa diatasi dengan menggunakan interface seperti java.io.DataInput dan java.io.DataOutput dan class java.io.DataInputStream dan java.io.DataOutputStream.

Untuk membaca file class, maka dapat didefinisikan tipe data sendiri seperti u1,u2 dan u4 yang berarti unsign satu, dua atau empat-byte.Untuk platform Java 2, type data ini dapat dibaca dengan method readUnsignedByte, readUnsignedShort, dan readInt yang berada pada interface java.io.DataInput.

Menurut Proebsting dan Watterson (1998) Struktur class file dapat ditulis dalam pseudo-struktur seperti :

class ClassFile

{

int magic;

short minor_version;

short major_version;

short constant_pool_count;

ConstantPool cp[];

short access_flags;

short this_class, super_class;

short interface_count;

Interfaces interfaces[];

short fields_count;

Definition fields[];

short methods_count;

Definition methods;

short arrtibutes_count;

Attributes attributes[];

}

2.8 Proses Java Decompiler

Proebsting dan Watterson (1998) menjelaskan bagaimana proses Decompiler terjadi terdiri dari 4 step proses mulai dari class file sampai dengan proses Readdable Sorce Code seperti gambar dibawah ini:

Gambar 3 : Proses Decompiler

Menurut Miecznikowski dan Hendren (2002) Struktur algoritma java Decompiler terbagi menjadi 3 bagian yaitu :

1. Menyusun Statement

Menyusun sejumlah ekpresi, penyusunan instruksi yang mengandung control flow, dan Penanganan exceptions.

2. Penanganan control flow

Ada 6 tahapan pada bagian ini yaitu

  1. Synchronized blocks: mengkonstruksi kode yang tidak terstruktur;

  2. Loop detection: menyusun instruksi while dan do-while;

  3. Penanganan kondisi percabangan;

  4. Penanganan Kesalahan;

  5. Merangkai Statement, dan;

  6. Instruksi Continues, breaks dan blok label pengambil keputusan.

3. A structure encapsulation tree (SET).

Gambar 4 : Representasi SET

3. PENELITIAN

3.1 Objek Penelitian

Dalam penelitian ini, yang menjadi objek penelitian adalah Java Development Kit edisi pertama dan edisi kedua yang meliputi versi JDK Beta, JDK 1.0, JDK 1.1, JDK 1.2, JDK 1.3 dan JDK 1.4. Dalam uji coba yang dijadikan objek hanya JDK1.1 dan JDK 1.3.

3.1 Bahan dan Alat Penelitian

Bahan yang digunakan dalam penelitian ini adalah berbagai sumber informasi yang berkenaan dengan topik penelitian, dan dari hasil percobaan aplikasi Java Decompiler.

Alat-alat yang digunakan dalam penelitian adalah perangkat komputer dan beberapa software pendukung seperti Java Compiler dan Edit sebagai program Editor untuk menulis program.

Penelitian ini menggunakan tool yang dibuat oleh Karthik Kumar yang diperoleh pada alamat http://jrevpro.sourceforge.net.

Jalannya Penelitian

Penelitian di lakukan dengan 3 tahap, yaitu :

  1. Pengumpulan data-data dan informasi yang berhubungan dengan komponen yang mendukung pemprosesan pembuatan program Decompiler seperti Struktur file class, perintah Java Virtual Machine, logika pembuatan Decompiler dan tool pendukung yaitu JreversePro.
  2. Dilanjutkan dengan pembuatan program untuk membaca struktur file class dan membaca kode byte (byte-code) dan menterjemahkannya ke dalam perintah Java Virtual Machine yaitu java assembly

Dan kemudian menganalisa dan menterjemahkan kode JVM tersebut menjadi kode program Java (proses decompiler).

3.2 Penjelasan Umum Hasil Penelitian

Penelitian ini dilakukan dengan memperbaiki tool yang ada seperti melengkapinya dengan beberapa komponen yang belum ada pada tool tersebut yaitu :

  1. Menampilkan file class dengan format file biner
  2. Membaca Struktur file class.
  3. Memperbaiki hasil decompiler.

4. HASIL PENELITIAN DAN PEMBAHASAN

4.1 Hasil Penelitian

Hasil penelitian adalah berupa program decompiler java yang dapat menghasilkan kode sumber java dari suatu program yang telah di kompile.

4.2 Pembahasan

Bagian ini akan menjelaskan hasil dari penelitian yang telah di lakukan. Untuk mencobanya peneliti menggunakan bahan untuk di uji yaitu sebuah kode program yang jika di compiler menjadi execute program akan menghasilkan tulisan “hello World” dan kode program yang lain yang melibatkan dua file program.

4.3 Percobaan Pertama

Percobaan ini dilakukan dengan Java Development Kid versi 1.1, hasil percobaan ini nantinya akan dibandingkan dengan Decompiler Jreversepro buatan Karthik Kumar.

Langkah-langkah percobaan ini yaitu :

  1. Ketik program yang akan di uji dengan menggunakan program Edit

      1. // contoh program java
      2. // Programmer : Afriyudi
      3. // date : April 2003
      4. class HelloWorld
      5. {
      6. public static void main(String args[])
      7. {
      8. System.out.println(“hello World”;);
      9. }
      10. }

2. Compile dengan java: javac HelloWorld.java

3. Setelah program di compile maka akan menghasilkan file class yaitu HelloWorld.class

4. Jalankan program decompiler : java –jar decompiler.jar

Gambar 4.1 Menu Utama

Melihat file class dengan format byte :

Setelah Program Decompiler dan DisAssemler ini dijalankan, untuk melihat isi dari class file, maka yang harus dilakukan adalah pilih menu class file untuk melihat class file dengan bentuk bahasa mesin.

Membaca Struktur File class :

Kemudian dari menu yang tersedia disediakan pula menu untuk melihat struktur file java, Untuk melihat struktur file class pilih menu struktur file maka akan tampil hasil seperti di bawah ini (lihat di lampiran 1) :

Melihat Hasil Java Assembly :

Setelah melihat struktur file java proses selanjutnya adalah merubah struktur file tersebut menjadi java Asembly, yaitu bahasa mesin java. Untuk melihat hasil dari java assembly pilih menu Disassembler :

class HelloWorld{

HelloWorld()

{

// Max Locals 1 , Max Stack 1

0: aload_0

1: invokespecial #1 <()V,<init> >

4: return

}

public static void main(String[] stringArr)

{

// Max Locals 1 , Max Stack 2

0: getstatic #2 <Ljava/io/PrintStream;,out >

3: ldc #3 <“hello World” >

5: invokevirtual #4 <(Ljava/lang/String;)V,println >

8: return

}

}

Hasil Akhir :

Kemudian hasil dari java asembly tersebut dirubah menjadi source java yang bisa dimengerti oleh manusia tidak seperti bahasa asembly yang sedikit rumit jika harus dibaca. Untuk melihat hasil decompiler maka pilih menu Decompiler

import java.io.PrintStream;

class HelloWorld{

public static void main(String[] stringArr)

{

System.out.println(“hello World”;);

return;

}

}

Tabel 2. Perbandingan hasil decompiler dan kode asli

Kode Asli Hasil Decompiler
// contoh program java

// Programmer : Afriyudi

// date : April 2003

class HelloWorld

{

public static void

main(String args[])

{

System.out.println(“hello World”;);

}

}

import java.io.PrintStream;

class HelloWorld{

 

public static void

main(String[] stringArr)

{

System.out.println(“hello World”;);

return;

}

}

Dari perbandingan dua kode di atas dapat diambil kesimpulan bahwa hasil dari decompiler akan menghasilkan :

  1. Ada beberapa penambahan import file yang sebenarnya boleh tidak didefinisikan, tetapi ini yang merupakan tantangan bagi peneliti lain untuk dapat meminimalisasinya.
  2. Hasil dari decompiler kesannya agak aneh dan aturannya tidak lazim tetapi jika dicompile hasilnya sama dengan kode asli.

Tabel 3. Perbandingan dari dua versi dilihat dari ukuran file setelah di compile :

JDK 1.1 JDK 1.3
Nama File Ukuran Nama File Ukuran
HelloWorld.class 425 HelloWorld.class 425

Jika dilihat dari struktur file dan hasil decompiler maka tidak ada perbedaan antara hasil dari kedua versi tersebut. Hasil dari compile ulang dari hasil decompile menunjukkan tidak ada perubahan dari ukuran file maupun struktur filenya, ini dikarenakan program yang dibandingkan masih sederhana dan tidak komplek

Tabel 4. Perbandingan hasil decompiler dan jreversepro :

Hasil jreversepro Hasil Decompiler

import java.io.PrintStream;

class HelloWorld{

HelloWorld()

{

;

return;

}

public static void

main(String[] stringArr)

{

System.out.println(“hello World”;);

return;

}

}

import java.io.PrintStream;

class HelloWorld{

public static void

main(String[] stringArr)

{

System.out.println(“hello World”;);

return;

}

}

Dari perbandingan dua kode di atas dapat diambil kesimpulan bahwa Decompiler yang peneliti buat menghasilkan source code yang lebih baik yaitu dengan adanya pengurangan konstruktor yang tidak perlu karena konstruktor tersebut tidak melakukan apapun.

4.4 Percobaan Kedua

Percobaan yang dilakukan pada tahap ini adalah membandingkan hasil decompiler dari 2 versi JDK. Versi yang digunakan untuk bahan percobaan adalah versi 1.1 dan versi 1.3.

Program yang digunakan untuk percobaan ini ada 2 file yaitu MenuUtama.java dan Main.java yang jika keduanya di compile akan menghasilkan program menu seperti gambar 4.1.

Tabel 5. Perbandingan dari dua versi dilihat dari ukuran file setelah di compile :

JDK 1.1 JDK 1.3
Nama File Ukuran Nama File Ukuran
Main.class 539 byte Main.class 491 byte
MenuUtama.class 3.08 KB MenuUtama.class 2.96 KB

Untuk melihat perbedaan antara kedua versi, maka bisa dilihat di struktur file class dan dilihat dari hasil decompiler yaitu :

Struktur file class :

  1. File Main.class pada versi 1.1 jumlah konstanta pool adalah 38 sedangkan pada versi 1.3 berjumlah 34
  2. File MenuUtama pada versi 1.1 jumlah konstanta pool adalah 192 sedangkan pada versi 1.3 berjumlah 186

Dua perbedaan diatas menyebabkan perbedaan ukuran file untuk kedua versi berbeda, Dari ukurannya versi 1.3 lebih efisian dalam optimasi.

Hasil decompiler :

  1. Pada file Main.class pada versi 1.1 dan versi 1.3 akan menghasilkan kode yang sama tapi perbedaannya hasil decompiler versi 1.3 tidak ada import file seperti pada versi 1.1
  2. Pada file MenuUtama.class pada versi 1.1 dan versi 1.3 akan menghasilkan kode yang sama tapi perbedaannya hasil decompiler versi 1.1 lebih banyak merepresentasikan import file dibandingkan versi 1.3, file import tersebut adalah

import java.awt.Window;

import javax.swing.AbstractButton;

import javax.swing.JComponent;

import javax.swing.text.JTextComponent;

Dua perbedaan diatas menyebabkan perbedaan ukuran file untuk kedua versi tersebut, versi 1.3 lebih efisian dalam optimasi.

Hasil decompiler dari kedua versi di atas jika di compile ulang akan menghasilkan program yang sama dengan program aslinya. Berikut ini hasil Perbandingan dari dua versi dilihat dari hasil decompiler yang di compile ulang dengan JDK versi 1.1 dan JDK versi 1.3:

Tabel 6. Perbandingan dari dua versi dilihat dari ukuran file setelah di compile

JDK 1.1 JDK 1.3
Nama File Ukuran Nama File Ukuran
Main.class 539 byte Main.class 491 byte
Menuutama.class 3.10 KB MenuUtama.class 2.98 KB

Jika dilihat dari struktur file dan hasil decompiler maka hasil dari compile ulang dari hasil decompiler sama dengan hasil penjelasan sebelummnya hanya perbedaanya untuk versi 1.1 dan versi 1.3 ada penambahan 2 byte untuk ukuran file.

5. KESIMPULAN DAN SARAN

5.1 Kesimpulan

Dari hasil penelitian dan pembahasan dapat diambil dua sub kesimpulan yaitu, Percobaan pertama dapat disimpulkan bahwa :

  1. Hasil perbandingan dari kode asli dan decompiler menunjukkan bahwa adanya penambahan import file yang merupakan penjelasan dari method yang digunakan di program
  2. Hasil dari decompiler kesannya agak aneh dan aturannya tidak lazim tetapi jika dicompile ulang hasilnya akan sama dengan kode aslinya.
  3. Hasil compile file HelloWorld.java pada JDK versi 1.1 dan JDK versi 1.3 ukuran filenya sama yaitu 425 byte. Kemudian hasil decompilenya di compile ulang pada JDK versi 1.1 dan JDK versi 1.3 menghasilkan ukuran yang sama, ini dikarenakan program yang dibandingkan masih sederhana dan tidak komplek.
  4. Hasil perbandingan dari program decompiler yang peneliti perbaiki dengan program sebelumnya menunjukkan program decompiler yang peneliti perbaiki hasilnya lebih baik karena adanya pengurangan method konstruktor yang tidak mempunyai statemen berarti.

Percobaan kedua dilakukan dengan membandingkan hasil decompiler pada Java Development Kit (JDK) versi 1.1 dan JDK versi 1.3 dengan bahan percobaan dua file java yaitu MenuUtama.java dan Main.java, dari percobaan ini dapat disimpulkan :

  1. Perbedaan terlihat dari ukuran file jika di decompiler dengan JDK versi 1.1 ukuran file Main.class 539, MenuUtama.class adalah 3.08 KB dan jika pada JDK versi 1.3 ukuran file Main.class 491, MenuUtama.class 2.96 KB.
  2. Perbedaan terlihat dari struktur file class yaitu file Main.class pada JDK versi 1.1 jumlah konstanta pool adalah 38 sedangkan pada versi 1.3 berjumlah 34, file MenuUtama.class pada JDK versi 1.3 jumlah konstanta pool adalah 192 sedangkan pada JDK versi 1.3 berjumlah 186.
  3. Perbedaan juga dapat dilihat dari hasil decompiler yaitu pada JDK 1.3 import file yang dihasilkan lebih efisien dibandingkan dengan import file yang dihasilkan pada JDK versi 1.1.
  4. Jika hasil decompiler di compile ulang lagi maka hasilnya akan berbeda pada ukuran file saja yaitu hanya penambahan 2 byte untuk masing-masing versi tapi hanya pada file MenuUtama.class
  5. Hasil perbandingan dari dua file di atas menunjukkan JDK versi 1.3 lebih baik dibandingkan dengan JDK versi 1.1 untuk optimasi file classnya.

5.2 Saran

Dari penelitian yang dibuat ternyata masih sederhana oleh karena itu penulis sarankan kiranya ada pengembangan lebih lanjut dengan penambahan tool optimasi, agar hasil yang didapat akan lebih baik dan susunan program yang dihasilkan akan lebih human readable, not ugly.

DAFTAR PUSTAKA

Anuff, Ed.,1997, Java Sourcebook, Andi Yogyakarta,20-22

Cifuentes, Cristina., 1994, Reverse Compilation Techniques, Queensland University Of Technology, Australia,7-11

Dahm,Markus.,2001,Byte Code Engineering with the BCEL API, Technical Report B-17-98,4

Emmrik, Mike Van.,2002,Why Decompilation Why Decompile?, http://www.program-transformation.org/twiki/bin/view/Transform/WhyDecompilation.html

Lam, Patrick., 1998, Of Graphs and Coffi Grounds: Decompiling Java, Sable Teknical Report No.6,1

Lindholm, Tim and Yellin, Frank.,1999,The JavaTM Virtual Machine Specification Second Edition, Sun Microsoft Inc, Bab 4

Miecznikowski, Jerome., dan Hendren, Laurie.,2002,Decompiling Java Using Staged Encapsulation, Mc Gill University, Canada, 1-5

Morris, Paul., Gray, Ronald A., dan Filman, Robert E., 1998, GOTO Removal Based On Regular Expressions, Sable Research Group, School of Computer Science McGill University, Montreal, Canada, 4-12

Nolan, Godfrey., 1998, Decompiling Java,The McGraw-Hill Companies Inc, Bab 2

Proebsting, Todd A. dan Watterson, Scott A.,1997, Krakatoa: Decompilation in Java (Does Bytecode Reveal Source?), The University of Arizona,2

Java Edition, Diakses januari 2002, http://java.sun.com/products/archive/index.htm.

Lampiran 1 :

Dokumen dibawah ini merupakan hasil dari penjabaran dari struktur file dari class dari objek java. Untuk mendapatkan hasil seperti dibawah ini pada program pilih menu struktur file.

magic: cafebabe

minor:3

major:45

cPC:29

i = 1; CPRef( tag = 10 ) class_index: 6 nameAndTypeIndex: 15

i = 2; CPRef( tag = 9 ) class_index: 16 nameAndTypeIndex: 17

i = 3; CPString( tag = 8 ) string_index: 18

i = 4; CPRef( tag = 10 ) class_index: 19 nameAndTypeIndex: 20

i = 5; CPClass( tag = 7 ) name_index: 21

i = 6; CPClass( tag = 7 ) name_index: 22

i = 7; CPUtf8( tag = 1 ) length: 6 str: <init>

i = 8; CPUtf8( tag = 1 ) length: 3 str: ()V

i = 9; CPUtf8( tag = 1 ) length: 4 str: Code

i = 10; CPUtf8( tag = 1 ) length: 15 str: LineNumberTable

i = 11; CPUtf8( tag = 1 ) length: 4 str: main

i = 12; CPUtf8( tag = 1 ) length: 22 str: ([Ljava/lang/String;)V

i = 13; CPUtf8( tag = 1 ) length: 10 str: SourceFile

i = 14; CPUtf8( tag = 1 ) length: 15 str: HelloWorld.java

i = 15; CPNameAndType( tag = 12 ) nameIndex: 7 signatureIndex: 8

i = 16; CPClass( tag = 7 ) name_index: 23

i = 17; CPNameAndType( tag = 12 ) nameIndex: 24 signatureIndex: 25

i = 18; CPUtf8( tag = 1 ) length: 11 str: hello World

i = 19; CPClass( tag = 7 ) name_index: 26

i = 20; CPNameAndType( tag = 12 ) nameIndex: 27 signatureIndex: 28

i = 21; CPUtf8( tag = 1 ) length: 10 str: HelloWorld

i = 22; CPUtf8( tag = 1 ) length: 16 str: java/lang/Object

i = 23; CPUtf8( tag = 1 ) length: 16 str: java/lang/System

i = 24; CPUtf8( tag = 1 ) length: 3 str: out

i = 25; CPUtf8( tag = 1 ) length: 21 str: Ljava/io/PrintStream;

i = 26; CPUtf8( tag = 1 ) length: 19 str: java/io/PrintStream

i = 27; CPUtf8( tag = 1 ) length: 7 str: println

i = 28; CPUtf8( tag = 1 ) length: 21 str: (Ljava/lang/String;)V

AccessFlags: 32 –> ( ACC_SUPER )

thisClass: 5 –> ( HelloWorld )

thisClass: 6 –> ( java/lang/Object )

interfacesCount: 0

fieldsCount: 0

=======Method Section Start======

MethodCount: 2

Method Number : 1

accessFlags: 0

nameIndex: 7 ( <init> )

descIndex: 8 ( ()V )

attrCount: 1

01: attribute_name_index: 9 ( Code )

attributeLength: 29

maxStack: 1

maxLocals: 1

codeLength: 5

code: 2a b7 00 01 b1

exception_table_length: 0

No StartPc endPc handlerPc catchType

attributesCount: 1

AttributesNameIndex: 10 ( LineNumberTable )

AttributeLength: 6

LineNumberTabelLength : 01

line_number_table[1]

start pc : 00

Line Number : 01

Method Number : 2

accessFlags: 9

nameIndex: 11 ( main )

descIndex: 12 ( ([Ljava/lang/String;)V )

attrCount: 1

01: attribute_name_index: 9 ( Code )

attributeLength: 37

maxStack: 2

maxLocals: 1

codeLength: 9

code: b2 00 02 12 03 b6 00 04 b1

exception_table_length: 0

No StartPc endPc handlerPc catchType

attributesCount: 1

AttributesNameIndex: 10 ( LineNumberTable )

AttributeLength: 10

LineNumberTabelLength : 02

line_number_table[1]

start pc : 00

Line Number : 05

line_number_table[2]

start pc : 08

Line Number : 06

=======Method Section End======

attributeCount: 1

AttributeIndex: 13 ( SourceFile )

attributesLength: 2 SourceFileIndex: 14

SourceFile: HelloWorld.java

Author: admin

See all posts by (22)

Leave a Reply

*

[+] kaskus emoticons nartzco