gpt4 book ai didi

java - ASM 不报告常量指令

转载 作者:行者123 更新时间:2023-12-01 19:30:29 24 4
gpt4 key购买 nike

我正在尝试使用 ASM 库来读取字节代码并将其转换为不同的格式。从包含此方法的简单测试类开始:

public static double square(double a) {
return a * a;
}

它编译成这个字节代码:

public static double square(double);
Code:
0: dload_0
1: dload_0
2: dmul
3: dreturn

使用这个MethodVisitor来读取代码:

    return new MethodVisitor(ASM7) {
@Override
public void visitInsn(int opcode) {
System.out.println(String.format("%02x", opcode));
}

@Override
public void visitLdcInsn(Object value) {
System.out.println(value);
}
};

我得到这个输出:

6b
af

这些分别是 dmuldreturn 的操作码,因此它正在遍历代码,但它也没有报告 dload_0 指令通过 visitInsnvisitLdcInsn

我做错了什么?

最佳答案

ASM 将 dload_0 扩展为 dload 0。同时,在写入时,ASM 将字节码指令优化回写入 ClassWriter 时的快捷常量。覆盖 visitVarInsn,您将看到输出,其中字节代码作为第一个参数,变量索引作为第二个参数。

(在 Holger 评论后编辑。)

关于java - ASM 不报告常量指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59869384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com