kambo/karsk

Karsk - Java字节码编写器

v0.1.0 2020-02-22 11:01 UTC

This package is auto-updated.

Last update: 2024-09-22 21:01:31 UTC


README

Software License

Karsk 是 ASM(一个非常小且快速的Java字节码操作框架)的直接端口。

目前这还非常实验性,并且还有很多工作正在进行。欢迎任何帮助!

安装

安装框架的首选方式是使用composer

composer require kambo/karsk

基本用法

public class Helloworld {
    public static void main (String[] args) {
        System.out.println("Hello world!");
    }
}
<?php
use Kambo\Karsk\ClassWriter;
use Kambo\Karsk\Opcodes;

$cw = new ClassWriter(0);
$cw->visit(
    Opcodes::V1_8,
    Opcodes::ACC_PUBLIC,
    "Helloworld",
    null,
    "java/lang/Object",
    null
);

$mw = $cw->visitMethod(Opcodes::ACC_PUBLIC, "<init>", "()V", null, null);
$mw->visitVarInsn(Opcodes::ALOAD, 0);

$mw->visitMethodInsn(Opcodes::INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false);
$mw->visitInsn(Opcodes::RETURN_);
$mw->visitMaxs(1, 1);
$mw->visitEnd();

$mainMethod = $cw->visitMethod(
    (Opcodes::ACC_PUBLIC + Opcodes::ACC_STATIC),
    "main",
    "([Ljava/lang/String;)V",
    null,
    null
);
$mainMethod->visitFieldInsn(Opcodes::GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
$mainMethod->visitLdcInsn("Hello world!");

$mainMethod->visitMethodInsn(
    Opcodes::INVOKEVIRTUAL,
    "java/io/PrintStream",
    "println",
    "(Ljava/lang/String;)V",
    false
);
$mainMethod->visitInsn(Opcodes::RETURN_);
$mainMethod->visitMaxs(2, 2);
$mainMethod->visitEnd();

$code = $cw->toByteArray();

许可证

3-Clause BSD,https://open-source.org.cn/licenses/BSD-3-Clause