More actions
imported>novaman No edit summary |
(Repair batch-0007 pages from live compare) |
||
| (10 intermediate revisions by 2 users not shown) | |||
| Line 10: | Line 10: | ||
// Compile | // Compile | ||
// notepad++ 에서 UTF8(BOM 없음) 선택후 다음과 같이 cmd에서 컴파일 | // notepad++ 에서 UTF8(BOM 없음) 선택후 다음과 같이 cmd에서 컴파일 | ||
javac -encoding utf8 ByteCode.java | javac -encoding utf8 ByteCode.java | ||
// Decompile | // Decompile | ||
javap -c ByteCode.class | javap -c ByteCode.class | ||
| Line 29: | Line 31: | ||
} | } | ||
// Decompile | // Result of Decompile | ||
Compiled from "ByteCode.java" | Compiled from "ByteCode.java" | ||
| Line 36: | Line 38: | ||
Code: | Code: | ||
0: aload_0 | 0: aload_0 | ||
1: invokespecial #1 // Method java/lang/Object."<init>": | 1: invokespecial #1 // Method java/lang/Object."<init>":()V | ||
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; | |||
4: getstatic #2 // Field java/lang/System.out:Ljava/ | |||
7: ldc #3 // String hello | 7: ldc #3 // String hello | ||
9: invokevirtual #4 // Method java/io/PrintStream. | 9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | ||
12: return | 12: return | ||
| Line 75: | Line 74: | ||
} | } | ||
// Decompile | // Result of Decompile | ||
Compiled from "ByteCode.java" | Compiled from "ByteCode.java" | ||
| Line 82: | Line 81: | ||
Code: | Code: | ||
0: aload_0 | 0: aload_0 | ||
1: invokespecial #1 // Method java/lang/Object."<init>": | 1: invokespecial #1 // Method java/lang/Object."<init>":()V | ||
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; | |||
4: getstatic #2 // Field java/lang/System.out:Ljava/ | |||
7: ldc #3 // String hello | 7: ldc #3 // String hello | ||
9: invokevirtual #4 // Method java/io/PrintStream. | 9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | ||
12: return | 12: return | ||
| Line 126: | Line 122: | ||
} | } | ||
// Decompile | // Result of Decompile | ||
Compiled from "ByteCode.java" | Compiled from "ByteCode.java" | ||
| Line 133: | Line 129: | ||
Code: | Code: | ||
0: aload_0 | 0: aload_0 | ||
1: invokespecial #1 // Method java/lang/Object."<init>": | 1: invokespecial #1 // Method java/lang/Object."<init>":()V | ||
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; | |||
4: getstatic #2 // Field java/lang/System.out:Ljava/ | |||
7: ldc #3 // String hello | 7: ldc #3 // String hello | ||
9: invokevirtual #4 // Method java/io/PrintStream. | 9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V | ||
12: return | 12: return | ||
} | } | ||
Latest revision as of 01:32, 27 March 2026
강의록
강의 내용
ByteCode.java
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;
}
}
// 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
}
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차 수정
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
}