Предположим, у меня есть эта Java-программа.
public class Main {
public static void main(String []args){
String a = "Dad";
System.out.println(a);
}
Теперь у меня есть код ASM для обхода узлов метода и я могу получить доступ к инструкции в методе.Скажем, я добавил метод invoke и 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, то есть использование переменной, яЯ хочу вызвать функцию кодирования так, чтобы переменная кодировалась во время использования. Поэтому я планирую добавить кодирование invoke stmt после оператора ALOAD.Как этого добиться?