E D R , A S I H C RSS

진격의안드로이드&Java (rev. 1.20)

진격의안드로이드&Java


2. 강의 내용

2.1. ByteCode.java

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;
	}
}

// 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: 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){
		}
	}
}

// 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
}

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;
		} 
	}
}

// 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
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:14
Processing time 0.0268 sec