Kotlin 소스 코드 에서 JVM 바이트 코드 를 역 컴 파일 하고 해체 합 니 다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.