Kotlin 소스 코드 에서 JVM 바이트 코드 를 역 컴 파일 하고 해체 합 니 다.

4716 단어
이 Kotlin 코드 에 javap (어 셈 블 리 프로그램) 과 jad (컴 파일 러) 를 사용 하려 는 실험 입 니 다.
fun main (args: Array <String>) {
    println ("Hello, World!")
}

Code sourcehttps://kotlinlang.org/docs/tutorials/command-line.html
다른 JVM 언어 와 마찬가지 로 Kotlin 은 자바 로 실행 할 수 있 는 클래스 파일 로 컴 파일 되 었 습 니 다.자바 p 는 JVM 의 보조 기 호 를 표시 하고 자바 소스 코드 로 역 컴 파일 할 수 있 기 때문에 검증 할 수 있 습 니 다.
이것 괜찮아요?
kotlinc hello.kt -include-runtime -d hello.jar

jar 를 추출 하고 javap, jad 를 hello. class 에 사용 합 니 다.
jar xf hello.jar

Environment
macOS High Sierra 10
javap (Disassembler)
Preparation
필요 없어 요. 처음부터 JDK 에 있 었 으 니까 요.
Execution
javap - c HelloKt.class

결실
Compiled from "hello.kt"
public final class HelloKt {
  public static final void main (java.lang.String []);
    Code:
       0: aload_ 0
       1: ldc # 9 // String args
       3: invokestatic # 15 // Method kotlin / jvm / internal / Intrinsics.checkParameterIsNotNull: (Ljava / lang / Object; Ljava / lang / String;) V
       6: ldc # 17 // String Hello, World!
       8: astore_1
       9: getstatic # 23 // Field java / lang / System.out: Ljava / io / PrintStream;
      12: aload_1
      13: invokevirtual # 29 // Method java / io / PrintStream.println: (Ljava / lang / Object;) V
      16: return
}

jad (decompiler)
Preparation
가 드 를 어떻게 소개 합 니까?
brew tap caskroom / cask
brew install caskroom / cask / jad

Execution
- a 옵션 을 사용 하여 보조 기 호 를 주석 으로 표시 할 수 있 습 니 다.
명령 하 다.
$ jad -a HelloKt.class
$ cat HelloKt.jad
import java.io.PrintStream;
import kotlin.jvm.internal.Intrinsics;

public final class HelloKt
{

    public static final void main (String args [])
    {
        Intrinsics.checkParameterIsNotNull (args, "args");
    // 0 0: aload_ 0
    // 1 1: ldc 1 # 9 
    // 2 3: invokestatic # 15 
        String s = "Hello, World!";
    // 3 6: ldc 1 # 17 
    // 4 8: astore_ 1
        System.out.println (s);
    // 5 9: getstatic # 23 
    // 6 12: aload - 1
    // 7 13: invokevirtual # 29 
    // 8 16: return
    }
}

소개 하고 분석 하기 쉽다.이후 에 나 는 Kotlin 의 특정한 함 수 를 자바 로 표시 하 는 방법 을 검사 할 것 이다.
from: https://dev.to//yuyabu/decompile-and-dissasemble-jvm-bytecode-compiled-from-kotlin-source-code-2cd9

좋은 웹페이지 즐겨찾기