Это эксперимент, чтобы попробовать использовать javap (дизассемблер) и jad (декомпилятор) для этого кода Kotlin.
fun main (args: Array) { println ("Hello, World!") }
Источник кода https://kotlinlang.org/docs/tutorials/command-line.html
Как и другие языки JVM, Kotlin компилируется в файл класса, исполняемый как Java. Мы можем проверить это, потому что java может отображать мнемонику JVM и декомпилировать как исходный код java с помощью jad.
Скомпилируйте это.
kotlinc hello.kt -include-runtime -d hello.jar
Извлеките jar и используйте javap, jad для hello.class
jar xf hello.jar
Маркос Хай Сьерра 10
Подготовка
В этом нет необходимости, так как он находится в JDK с самого начала
Исполнение
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 }
Подготовка
Как представить Джада
brew tap caskroom / cask brew install caskroom / cask / jad
Исполнение
Вы можете отобразить мнемонику в виде комментария с помощью опции -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 представлены и преобразованы в Java.
Оригинал: “https://dev.to/yuyabu/decompile-and-dissasemble-jvm-bytecode-compiled-from-kotlin-source-code-2cd9”