2017 © Pedro Peláez
 

library karsk

Karsk - java bytecode writer

image

kambo/karsk

Karsk - java bytecode writer

  • Saturday, July 14, 2018
  • by kambo
  • Repository
  • 1 Watchers
  • 0 Stars
  • 0 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Karsk - write java bytecode in PHP!

Software License, (*1)

Karsk is direct port of ASM "a very small and fast Java bytecode manipulation framework"., (*2)

This is highly experimental and very much work in progress at this moment. Any help is welcome!, (*3)

Install

Preferred way to install framework is with composer:, (*4)

composer require kambo/karsk

Basic usage

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();

License

3-Clause BSD, https://opensource.org/licenses/BSD-3-Clause, (*5)

The Versions

14/07 2018

dev-develop

dev-develop

Karsk - java bytecode writer

  Sources   Download

MIT

The Requires

  • php >=7.1

 

The Development Requires

by Bohuslav Simek