진격의안드로이드&Java (rev. 1.22)
2.1.1. cmd에서 Compile & Decompile 방법 ¶
// Compile
// notepad++ 에서 UTF8(BOM 없음) 선택후 다음과 같이 cmd에서 컴파일
javac -encoding utf8 ByteCode.java
// Decompile
javap -c ByteCode.class
public class ByteCode{
public ByteCode() {
System.out.println("hello");
}
public void methodOperandStack(){
int a, b, c;
a = 5;
b = 1;
c = a + b;
}
}
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){
}
}
}
// 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.printl
n:(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
}
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;
}
}
}
// 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.printl
n:(Ljava/lang/String;)V
12: return
}