gpt4 book ai didi

java - 字节码检测生成 java validator 错误

转载 作者:行者123 更新时间:2023-12-02 08:36:56 25 4
gpt4 key购买 nike

我使用 ASM 来为 Java 程序进行字节码检测。我所做的很简单 - 在检测方法时,如果指令是 PUTFIELD,只需在指令之前执行 DUP_X1,然后访问 PUTFIELD 并使用包含 DUP 堆栈条目的参数注入(inject)函数调用。

                public void visitFieldInsn(
int opcode,
String owner, // owner of this field...
String name,
String desc) {

boolean did_dup = false;

if(opcode == Opcodes.PUTFIELD) {
if(!owner.equals("java/lang/System")) {
if (desc.startsWith("L")) {
mv.visitInsn(Opcodes.DUP_X1);
did_dup = true;
}
}

}

mv.visitFieldInsn(opcode, owner, name, desc);

if (did_dup) {
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitMethodInsn(Opcodes.INVOKESTATIC, "com/amir/ASide", "updateG", "(Ljava/lang/Object;Ljava/lang/Object;)V");
}

}

代码在检测之前和之后分别如下所示:

public void setA(ClassA classa)
{
refA = classa;
eyeColor = classa.eyeColor;
}


public void setA(ClassA classa)
{
ASide.updateG(refA = classa, this);
ASide.updateG(eyeColor = classa.eyeColor, this);
}

但是当我运行检测代码时,我得到:

java.lang.VerifyError:期望在堆栈上找到对象/数组

您对此有什么帮助吗?

最佳答案

你的仪器有一些漏洞。例如,它不会检查您是否在静态方法内,因此存在此变量。

关于java - 字节码检测生成 java validator 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1402934/

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