Difference between r1.19 and the current
@@ -10,16 +10,18 @@
{{{
// Compile
// notepad++ 에서 UTF8(BOM 없음) 선택후 다음과 같이 cmd에서 컴파일
javac -encoding utf8 ByteCode.java
}}}
{{{
// Decompile
javap -c ByteCode.class
}}}
==== 기본 소스 ====
public ByteCode() {
System.out.println("hello");
// Compile
// notepad++ 에서 UTF8(BOM 없음) 선택후 다음과 같이 cmd에서 컴파일
}}}
{{{
// Decompile
}}}
==== 기본 소스 ====
{{{
{{{#!vim java
public class ByteCode{public ByteCode() {
System.out.println("hello");
@@ -34,21 +36,18 @@
}
}}}
Compiled from "ByteCode.java"
public class ByteCode {
public ByteCode();
Code:
0: aload_0
n:(Ljava/lang/String;)V
public void methodOperandStack();
}}}
{{{
// Decompile 결과
{{{#!vim java
// Result of Decompile
Compiled from "ByteCode.java"
public class ByteCode {
public ByteCode();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":
()V
4: getstatic #2 // Field java/lang/System.out:Ljava/
io/PrintStream;
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #3 // String hello 9: invokevirtual #4 // Method java/io/PrintStream.printl
9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: returnpublic void methodOperandStack();
@@ -66,7 +65,7 @@
}}}
==== 1차 수정 ====
public ByteCode() {
System.out.println("hello");
==== 1차 수정 ====
{{{
{{{#!vim java
public class ByteCode{public ByteCode() {
System.out.println("hello");
@@ -84,21 +83,18 @@
}
}}}
Compiled from "ByteCode.java"
public class ByteCode {
public ByteCode();
Code:
0: aload_0
n:(Ljava/lang/String;)V
public void methodOperandStack();
}}}
{{{
// Decompile 결과
{{{#!vim java
// Result of Decompile
Compiled from "ByteCode.java"
public class ByteCode {
public ByteCode();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":
()V
4: getstatic #2 // Field java/lang/System.out:Ljava/
io/PrintStream;
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #3 // String hello 9: invokevirtual #4 // Method java/io/PrintStream.printl
9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: returnpublic void methodOperandStack();
@@ -121,7 +117,7 @@
}}}
==== 2차 수정 ====
public ByteCode() {
System.out.println("hello");
==== 2차 수정 ====
{{{
{{{#!vim java
public class ByteCode{public ByteCode() {
System.out.println("hello");
@@ -139,21 +135,18 @@
}
}}}
Compiled from "ByteCode.java"
public class ByteCode {
public ByteCode();
Code:
0: aload_0
n:(Ljava/lang/String;)V
}
}}}
}}}
{{{
// Decompile 결과
{{{#!vim java
// Result of Decompile
Compiled from "ByteCode.java"
public class ByteCode {
public ByteCode();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":
()V
4: getstatic #2 // Field java/lang/System.out:Ljava/
io/PrintStream;
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #3 // String hello 9: invokevirtual #4 // Method java/io/PrintStream.printl
9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: return}
}}}
2.1.1. cmd에서 Compile & Decompile 방법 ¶
// Compile // notepad++ 에서 UTF8(BOM 없음) 선택후 다음과 같이 cmd에서 컴파일 javac -encoding utf8 ByteCode.java
// Decompile javap -c ByteCode.class
2.1.2. 기본 소스 ¶
public class ByteCode{ public ByteCode() { System.out.println("hello"); } public void methodOperandStack(){ int a, b, c; a = 5; b = 1; c = a + b; } }
// Result of Decompile Compiled from "ByteCode.java" public class ByteCode { public ByteCode(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 7: ldc #3 // String hello 9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 12: return public void methodOperandStack(); Code: 0: iconst_5 1: istore_1 2: iconst_1 3: istore_2 4: iload_1 5: iload_2 6: iadd 7: istore_3 8: return }
2.1.3. 1차 수정 ¶
public class ByteCode{ public ByteCode() { System.out.println("hello"); } public void methodOperandStack(){ try{ int a, b, c; a = 5; b = 1; c = a + b; } catch(Exception e){ } } }
// Result of Decompile Compiled from "ByteCode.java" public class ByteCode { public ByteCode(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 7: ldc #3 // String hello 9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 12: return public void methodOperandStack(); Code: 0: iconst_5 1: istore_1 2: iconst_1 3: istore_2 4: iload_1 5: iload_2 6: iadd 7: istore_3 8: goto 12 11: astore_1 12: return Exception table: from to target type 0 8 11 Class java/lang/Exception }
2.1.4. 2차 수정 ¶
public class ByteCode{ public ByteCode() { System.out.println("hello"); } private static final boolean optimize = false; private final void methodOperandStack(){ if(optimize){ int a, b, c; a = 5; b = 1; c = a + b; } } }
// Result of Decompile Compiled from "ByteCode.java" public class ByteCode { public ByteCode(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 7: ldc #3 // String hello 9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 12: return }