java byte打印_java – 允许轻松打印字节码指令*包括*参数的库

有关打印字节码详细信息的示例,请查看ASM和TraceMethodVisitor的ASM源代码.

这是一个简单的测试类:

import java.io.InputStream;

import java.io.PrintWriter;

import java.util.Arrays;

import org.objectweb.asm.ClassReader;

import org.objectweb.asm.util.TraceClassVisitor;

public class Main {

public static void main(String[] args) throws Exception {

if (1 > args.length) {

System.err.println("No arguments.");

return;

}

InputStream is = Main.class.getResourceAsStream(args[0]);

ClassReader cr = new ClassReader(is);

cr.accept(new TraceClassVisitor(new PrintWriter(System.out)), 0);

}

}

哪个输出(当传递Main.class作为参数时):

// class version 50.0 (50)

// access flags 0x21

public class Main {

// compiled from: Main.java

// access flags 0x1

public ()V

L0

LINENUMBER 11 L0

ALOAD 0

INVOKESPECIAL java/lang/Object. ()V

RETURN

MAXSTACK = 1

MAXLOCALS = 1

// access flags 0x9

public static main([Ljava/lang/String;)V throws java/lang/Exception

L0

LINENUMBER 13 L0

ICONST_1

ALOAD 0

ARRAYLENGTH

IF_ICMPLE L1

L2

LINENUMBER 14 L2

GETSTATIC java/lang/System.err : Ljava/io/PrintStream;

LDC "No arguments."

INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V

L3

LINENUMBER 15 L3

RETURN

L1

LINENUMBER 17 L1

FRAME SAME

LDC LMain;.class

ALOAD 0

ICONST_0

AALOAD

INVOKEVIRTUAL java/lang/Class.getResourceAsStream (Ljava/lang/String;)Ljava/io/InputStream;

ASTORE 1

L4

LINENUMBER 18 L4

NEW org/objectweb/asm/ClassReader

DUP

ALOAD 1

INVOKESPECIAL org/objectweb/asm/ClassReader. (Ljava/io/InputStream;)V

ASTORE 2

L5

LINENUMBER 19 L5

ALOAD 2

NEW org/objectweb/asm/util/TraceClassVisitor

DUP

NEW java/io/PrintWriter

DUP

GETSTATIC java/lang/System.out : Ljava/io/PrintStream;

INVOKESPECIAL java/io/PrintWriter. (Ljava/io/OutputStream;)V

INVOKESPECIAL org/objectweb/asm/util/TraceClassVisitor. (Ljava/io/PrintWriter;)V

ICONST_0

INVOKEVIRTUAL org/objectweb/asm/ClassReader.accept (Lorg/objectweb/asm/ClassVisitor;I)V

L6

LINENUMBER 28 L6

RETURN

MAXSTACK = 6

MAXLOCALS = 3

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值