我正在寻找以下想法的现有实现:假设有人想在普通Java程序中编写"内联汇编"字节代码(大多数相关应用程序将涉及Java中无法提供的invokedynamic指令).一种方法是:
void foo(boolean b) {
Label l1 = Asm.label();
Label l2 = Asm.label();
int i = Asm.no_int();
Asm._const(0);
Asm.store(i);
l1.bind();
Asm.load(i);
Asm.push(10);
Asm.if_cmpge(l2);
Asm.getstatic("java/lang/System", "out", "Ljava/io/PrintStream");
Asm.load(i);
Asm.invokevirtual("java/io/PrintStream", "println", "(I)V");
Asm.inc(i);
Asm._goto(l1);
l2.bind();
Asm._return();
}
Run Code Online (Sandbox Code Playgroud)
指令被编码为API调用,然后我们需要运行普通的java编译器,然后对字节代码进行后处理并用实际指令替换API调用.
PS我知道ASM框架的ASMifier,它没有解决上述问题.
| 归档时间: |
|
| 查看次数: |
2950 次 |
| 最近记录: |