考虑我有这个java程序。
public class Main {
public static void main(String []args){
String a = "Dad";
System.out.println(a);
}
现在我有一个 ASM 代码可以遍历方法节点,并且可以访问方法中的指令。假设我添加了调用方法和用于添加简单打印语句的 ldc。[![在此处输入图片描述][1]][1]
for(Object methodNodeObj : classNode.methods) {
MethodNode methodNode = (MethodNode)methodNodeObj;
for(AbstractInsnNode abstractInsnNode : methodNode.instructions.toArray()) {
}
InsnList il = new InsnList();
il.add(new FieldInsnNode(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"));
il.add(new LdcInsnNode("Works!"));
il.add(new MethodInsnNode(INVOKEVIRTUAL, "java/io/PrintStream", "encode", "(Ljava/lang/String;)V"));
methodNode.instructions.insertBefore(abstractNode, il);
这有助于打印语句...假设如果我有一个 ALOAD 语句,即有一个变量用法,我想调用编码函数调用,以便在使用过程中对变量进行编码。所以我的计划是添加编码在 ALOAD 语句之后调用 stmt。如何做到这一点?