如何在 Java ASM 字节码中将整数添加到常量?
How to add an integer to a constant in Java ASM bytecode?
我正在尝试使用 java ASM 将 integer
变量 x
添加到名为 count
的静态 int
变量。
经过大量搜索,我找到了一种将固定整数添加到静态 int 变量的方法
InsnList numCounting = new InsnList();
// insert count++
numCounting.add(new FieldInsnNode(Opcodes.GETSTATIC, classNode_c.name, "count", "I"));
numCounting.add(new InsnNode(Opcodes.ICONST_1));
numCounting.add(new InsnNode(Opcodes.IADD));
numCounting.add(new FieldInsnNode(Opcodes.PUTSTATIC, classNode_c.name, "count", "I"));
mn.instructions.insert(node, numCounting);
我如何概括这一点,以便我可以将任意 int
添加到 count
?
谢谢
我现在无法真正测试这段代码,但这应该可以工作
InsnList numCounting = new InsnList();
// insert count++
numCounting.add(new FieldInsnNode(Opcodes.GETSTATIC, classNode_c.name, "count", "I"));
numCounting.add(new LdcInsnNode( x )); // Load a constant onto the stack, asm will put that constant in the constant pool for you
numCounting.add(new InsnNode(Opcodes.IADD));
numCounting.add(new FieldInsnNode(Opcodes.PUTSTATIC, classNode_c.name, "count", "I"));
mn.instructions.insert(node, numCounting);
(我通常使用 asm 的方法是在纯 java 中编写我想用 asm 生成的方法,编译它并用 javap 查看生成的字节码。这通常是一个很好的指示要使用的操作码。)
我正在尝试使用 java ASM 将 integer
变量 x
添加到名为 count
的静态 int
变量。
经过大量搜索,我找到了一种将固定整数添加到静态 int 变量的方法
InsnList numCounting = new InsnList();
// insert count++
numCounting.add(new FieldInsnNode(Opcodes.GETSTATIC, classNode_c.name, "count", "I"));
numCounting.add(new InsnNode(Opcodes.ICONST_1));
numCounting.add(new InsnNode(Opcodes.IADD));
numCounting.add(new FieldInsnNode(Opcodes.PUTSTATIC, classNode_c.name, "count", "I"));
mn.instructions.insert(node, numCounting);
我如何概括这一点,以便我可以将任意 int
添加到 count
?
谢谢
我现在无法真正测试这段代码,但这应该可以工作
InsnList numCounting = new InsnList();
// insert count++
numCounting.add(new FieldInsnNode(Opcodes.GETSTATIC, classNode_c.name, "count", "I"));
numCounting.add(new LdcInsnNode( x )); // Load a constant onto the stack, asm will put that constant in the constant pool for you
numCounting.add(new InsnNode(Opcodes.IADD));
numCounting.add(new FieldInsnNode(Opcodes.PUTSTATIC, classNode_c.name, "count", "I"));
mn.instructions.insert(node, numCounting);
(我通常使用 asm 的方法是在纯 java 中编写我想用 asm 生成的方法,编译它并用 javap 查看生成的字节码。这通常是一个很好的指示要使用的操作码。)