Refine search
public void makeVarLoad(LocalVariable variable) { code.add(new VarInsnNode(ALOAD, variable.index)); }
@SuppressWarnings("unchecked") static java.lang.reflect.Type localVariable(final ClassLoader loader, final MethodNode m, final VarInsnNode varInsn) { if (varInsn.getOpcode() == Opcodes.ALOAD) { List<LocalVariableNode> vars = m.localVariables; LocalVariableNode var = vars.stream() .filter(v -> v.index == varInsn.var) .findFirst() .orElse(null); if (var != null) { String signature = "()" + Optional.ofNullable(var.signature).orElse(var.desc); return TypeDescriptorParser.parse(loader, signature); } } return Object.class; }
il.add(new VarInsnNode(ASTORE, lv_idx_stack)); il.add(new VarInsnNode(ALOAD, lv_idx_stack)); il.add(new InsnNode(ARRAYLENGTH)); il.add(ASMUtils.loadInt(vl.addrs().size())); il.add(new InsnNode(IADD)); il.add(new TypeInsnNode(ANEWARRAY, Type.getInternalName(Object.class))); il.add(new VarInsnNode(ASTORE, lv_idx_args)); il.add(new VarInsnNode(ALOAD, lv_idx_args)); il.add(ASMUtils.loadInt(idx++)); il.add(new VarInsnNode(ALOAD, slot(v))); il.add(new InsnNode(AASTORE)); il.add(new VarInsnNode(ALOAD, lv_idx_stack)); il.add(ASMUtils.loadInt(0)); il.add(new VarInsnNode(ALOAD, lv_idx_args)); il.add(ASMUtils.loadInt(vl.addrs().size())); il.add(new VarInsnNode(ALOAD, lv_idx_stack)); il.add(new InsnNode(ARRAYLENGTH)); il.add(new MethodInsnNode( il.add(new VarInsnNode(ALOAD, lv_idx_args)); il.add(new VarInsnNode(ALOAD, slot(v))); il.add(new VarInsnNode(ALOAD, slot(v)));
private InsnList getVoidReturnTraceInstructions() { InsnList il = new InsnList(); addGetCallback(il); il.add(new VarInsnNode(Opcodes.ALOAD, this.methodVarIndex)); il.add(new VarInsnNode(Opcodes.ALOAD, this.executionIdIndex)); il.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "org/brutusin/instrumentation/Callback", "onVoidFinish", "(Ljava/lang/Object;Ljava/lang/String;)V", false)); return il; }
var += argType.getSize(); result.localVariables.add(clonedVar); result.instructions.add(startScope); result.instructions.add(cloned); if (!isStatic(originalMethod)) { result.instructions.add(new VarInsnNode(ALOAD, 0)); VarInsnNode loadInsn = new VarInsnNode(argType.getOpcode(ILOAD), loadIndex); result.instructions.add(new VarInsnNode(ALOAD, transactionVar.index)); new VarInsnNode(returnType.getOpcode(ISTORE), resultVariable.index)); index = foundVar; VarInsnNode cloned = new VarInsnNode(donorVarInsn.getOpcode(), index); result.instructions.add(new InsnNode(RETURN)); } else { result.instructions.add(new VarInsnNode(returnType.getOpcode(ILOAD), resultVariable.index)); result.instructions.add(new InsnNode(returnType.getOpcode(IRETURN)));
result.instructions = new InsnList(); result.instructions.add(startLabelNode); result.instructions.add(new VarInsnNode(ALOAD, 0)); for (Type argType : getArgumentTypes(methodNode.desc)) { VarInsnNode loadInsn = new VarInsnNode(argType.getOpcode(ILOAD), loadIndex); result.instructions.add(loadInsn); loadIndex += argType.getSize(); result.instructions.add(new VarInsnNode(ALOAD, transactionVarIndex)); result.instructions.add(new VarInsnNode(ALOAD, transactionVarIndex)); result.instructions.add(new VarInsnNode(ALOAD, 0)); String openForReadDesc = format("(%s)%s", getDescriptor(AlphaTransactionalObject.class), getDescriptor(AlphaTranlocal.class)); MethodInsnNode invokeInsn = new MethodInsnNode( getInvokeOpcode(methodNode), classNode.name, int returnOpCode = Type.getReturnType(methodNode.desc).getOpcode(IRETURN); result.instructions.add(new InsnNode(returnOpCode));
int foundcon = -1; for(int i=0; i<l.size(); i++) AbstractInsnNode n = l.get(i); +SUtil.firstToUpperCase(name), Type.getMethodDescriptor(Type.VOID_TYPE), null, null); mnode.instructions.add(clone); cur = cur.getNext(); Type[] args = Type.getArgumentTypes(mn.desc); InsnList init = new InsnList(); init.add(new VarInsnNode(Opcodes.ALOAD, 0)); init.add(new LdcInsnNode(Type.getType("L"+iclname+";"))); init.add(new InsnNode(Opcodes.DUP)); init.add(new LdcInsnNode(i)); init.add(new VarInsnNode(Opcodes.ALOAD, i+1)); // 0==this, 1==arg0, ... init.add(new InsnNode(Opcodes.AASTORE)); init.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "jadex/bdiv3/features/impl/BDIAgentFeature", "addInitArgs", "(Ljava/lang/Object;Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Object;)V")); l.insertBefore(l.get(foundcon+1), init);
InsnList extraInstructions = new InsnList(); for (FieldNode fieldNode : (List<FieldNode>) classNode.fields) { FieldMetadata fieldMetadata = classMetadata.getFieldMetadata(fieldNode.name); extraInstructions.add(new VarInsnNode(ALOAD, 0)); String referenceName = Type.getType(referenceDesc).getInternalName(); extraInstructions.add(new TypeInsnNode(NEW, referenceName)); extraInstructions.add(new InsnNode(DUP)); extraInstructions.add( new MethodInsnNode(INVOKESPECIAL, referenceName, "<init>", "()V")); extraInstructions.add(new FieldInsnNode(
Type ret = Type.getReturnType(mn.desc); InsnList nl = new InsnList(); nl.add(new VarInsnNode(Opcodes.ALOAD, 0)); nl.add(new FieldInsnNode(Opcodes.GETFIELD, iclname, AGENT_FIELD_NAME, "Ljadex/bridge/IInternalAccess;")); nl.add(new VarInsnNode(Opcodes.ALOAD, 0)); nl.add(new FieldInsnNode(Opcodes.GETFIELD, iclname, GLOBALNAME_FIELD_NAME, "Ljava/lang/String;")); nl.add(new LdcInsnNode(belname)); if(ret.getClassName().equals("byte")) nl.add(new FieldInsnNode(Opcodes.GETSTATIC, "java/lang/Byte", "TYPE", "Ljava/lang/Class;")); nl.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "jadex/bdiv3/features/impl/BDIAgentFeature", "getAbstractBeliefValue", "(Ljadex/bridge/IInternalAccess;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;")); nl.add(new TypeInsnNode(Opcodes.CHECKCAST, "java/lang/Number")); nl.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/lang/Number", "intValue", "()I")); nl.add(new InsnNode(Opcodes.I2B)); nl.add(new InsnNode(Opcodes.IRETURN)); else if(ret.getClassName().equals("short")) nl.add(new FieldInsnNode(Opcodes.GETSTATIC, "java/lang/Integer", "TYPE", "Ljava/lang/Class;")); nl.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "jadex/bdiv3/features/impl/BDIAgentFeature", "getAbstractBeliefValue", "(Ljadex/bridge/IInternalAccess;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;")); nl.add(new TypeInsnNode(Opcodes.CHECKCAST, "java/lang/Number")); nl.add(new MethodInsnNode(Opcodes.INVOKEVIRTUAL, "java/lang/Number", "intValue", "()I")); nl.add(new InsnNode(Opcodes.IRETURN));
if (an.desc.equals(PAR_NEST.getDescriptor())) { execMethod.maxLocals++; InsnList preamble = new InsnList(); preamble.add(new TypeInsnNode(NEW, ARRAY_LIST.getInternalName())); preamble.add(new InsnNode(DUP)); preamble.add(new MethodInsnNode(INVOKESPECIAL, ARRAY_LIST.getInternalName(), "<init>", "()V")); preamble.add(new VarInsnNode(ASTORE, listIndex)); Iterator<AbstractInsnNode> execInstIter = execMethod.instructions.iterator(); midterm.add(new VarInsnNode(ASTORE, localVariablesIdx.get(callablesManipulated))); midterm.add(new VarInsnNode(ALOAD, listIndex)); midterm.add(new VarInsnNode(ALOAD, localVariablesIdx.get(callablesManipulated))); midterm.add(new MethodInsnNode(INVOKEVIRTUAL, ARRAY_LIST.getInternalName(), "add", "(Ljava/lang/Object;)Z")); InsnList finish = new InsnList(); finish.add(new VarInsnNode(ALOAD, 0)); finish.add(new MethodInsnNode(INVOKESTATIC, TRANSACTION.getInternalName(), "current", "()Ljvstm/Transaction;")); finish.add(new VarInsnNode(ALOAD, listIndex));
private InsnList instantiationInsns() { InsnList il = new InsnList(); ClassNameTranslator tr = context.classNameTranslator; Type fnType = ASMUtils.typeForClassName(id.toClassName(tr)); il.add(new TypeInsnNode(NEW, fnType.getInternalName())); il.add(new InsnNode(DUP)); for (AbstractVar var : upvals) { if (var instanceof UpVar) { il.add(loadUpvalueRef((UpVar) var)); } else { Var v = (Var) var; assert (context.types.isReified(v)); il.add(new VarInsnNode(ALOAD, slot(v))); il.add(new TypeInsnNode(CHECKCAST, Type.getInternalName(Variable.class))); } } Type[] ctorArgTypes = new Type[upvals.size()]; Arrays.fill(ctorArgTypes, Type.getType(Variable.class)); il.add(ASMUtils.ctor(fnType, ctorArgTypes)); return il; }
if(name.indexOf(Type.getInternalName(IBDIAgent.class))!=-1) nl.add(new VarInsnNode(Opcodes.ALOAD, 0)); nl.add(new FieldInsnNode(Opcodes.GETFIELD, iclname, IBDIClassGenerator.AGENT_FIELD_NAME, "Ljadex/bridge/IInternalAccess;")); if(m.getDeclaringClass().equals(IBDIAgentFeature.class)) nl.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "jadex/bdiv3/features/impl/BDIAgentFeature", "getBDIAgentFeature", "(Ljadex/bridge/IInternalAccess;)Ljadex/bdiv3/features/IBDIAgentFeature;", false)); nl.add(new VarInsnNode(Opcodes.ILOAD, i+cnt)); nl.add(new VarInsnNode(Opcodes.LLOAD, i+cnt++)); nl.add(new VarInsnNode(Opcodes.FLOAD, i+cnt)); nl.add(new VarInsnNode(Opcodes.DLOAD, i+cnt++)); nl.add(new VarInsnNode(Opcodes.ALOAD, i+cnt)); nl.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "jadex/bdiv3/features/IBDIAgentFeature", mnode.name, mnode.desc, true)); nl.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "jadex/bridge/IInternalAccess", mnode.name, mnode.desc, true)); nl.add(new InsnNode(Opcodes.IRETURN)); nl.add(new InsnNode(Opcodes.LRETURN)); nl.add(new InsnNode(Opcodes.FRETURN));
InsnList initTranlocal = new InsnList(); initTranlocal.add(new VarInsnNode(ALOAD, transactionVar)); initTranlocal.add(new VarInsnNode(ALOAD, 0)); getDescriptor(AlphaTransactionalObject.class), getDescriptor(AlphaTranlocal.class)); initTranlocal.add(new MethodInsnNode( INVOKEINTERFACE, getInternalName(AlphaTransaction.class), "openForConstruction", openForConstructionDesc)); initTranlocal.add(new InsnNode(POP)); result.instructions.insertBefore(result.instructions.get(indexOfFirst), initTranlocal);
Type[] args = Type.getArgumentTypes(mn.desc); InsnList nl = new InsnList(); nl.add(new VarInsnNode(Opcodes.ALOAD, 0)); // loads the object nl.add(new FieldInsnNode(Opcodes.GETFIELD, iclname, AGENT_FIELD_NAME, Type.getDescriptor(IInternalAccess.class))); nl.add(new LdcInsnNode(belname)); nl.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "jadex/bdiv3/features/impl/BDIAgentFeature", "unobserveValue", nl.add(new InsnNode(Opcodes.ACONST_NULL)); nl.add(new InsnNode(Opcodes.ACONST_NULL)); // oldvalue ? nl.add(new InsnNode(Opcodes.ACONST_NULL)); // no index/key nl.add(new VarInsnNode(Opcodes.ALOAD, 0)); // loads the agent object nl.add(new FieldInsnNode(Opcodes.GETFIELD, iclname, AGENT_FIELD_NAME, Type.getDescriptor(IInternalAccess.class))); nl.add(new LdcInsnNode(belname)); nl.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "jadex/bdiv3/features/impl/BDIAgentFeature", "createChangeEvent",
ListIterator<AbstractInsnNode> iter = methodNode.instructions.iterator(); wInstructions.add(ins); if(typeIns.getOpcode() == Opcodes.NEW || typeIns.getOpcode() == Opcodes.NEWARRAY) wInstructions.add(new InsnNode(Opcodes.ACONST_NULL)); wInstructions.add(new VarInsnNode(Opcodes.ASTORE, varReturnValue)); wInstructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); var++; wInstructions.add(new VarInsnNode(Opcodes.ASTORE, --var)); wInstructions.add(new VarInsnNode(Opcodes.ALOAD, var)); wInstructions.add(new InsnNode(Opcodes.ATHROW)); wInstructions.add(new VarInsnNode(Opcodes.ASTORE, varReturnValue)); wInstructions.add(new VarInsnNode(Opcodes.ALOAD, varReturnValue)); wInstructions.add(new VarInsnNode(storeOpcode, ++var)); // might be only var wInstructions.add(new VarInsnNode(loadOpcode, var)); wInstructions.add(new VarInsnNode(Opcodes.ASTORE, --var)); wInstructions.add(new VarInsnNode(Opcodes.ALOAD, var));
continue; Type type = Type.getType(field.getType()); logger.info("Checking replacement field variable " + field.getName()); continue; if (type.getDescriptor().equals(desc)) { logger.info("Adding replacement field variable " + field.getName()); InsnList list = new InsnList(); if (node.getOpcode() == Opcodes.GETFIELD) { list.add(new InsnNode(Opcodes.POP)); // Remove field owner from stack list.add(new FieldInsnNode(Opcodes.GETSTATIC, className.replace('.', '/'), field.getName(), type.getDescriptor())); else { list.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this list.add(new FieldInsnNode(Opcodes.GETFIELD, className.replace('.', '/'), field.getName(),
public InsnList loadUpvalueRef(UpVar uv) { InsnList il = new InsnList(); il.add(new VarInsnNode(ALOAD, 0)); il.add(new FieldInsnNode( GETFIELD, context.thisClassType().getInternalName(), context.getUpvalueFieldName(uv), Type.getDescriptor(Variable.class))); return il; }
private static MethodNode generateStaticCallableCreation(ClassNode classNode, String className, String callableClass, MethodNode mn) { MethodNode staticMethod = new MethodNode(V1_6, mn.access | ACC_STATIC, mn.name + "$static$callable$creator", "(L" + className + ";" + mn.desc.substring(1, mn.desc.indexOf(')') + 1) + "L" + callableClass + ";", mn.signature, new String[0]); InsnList content = new InsnList(); content.add(new TypeInsnNode(NEW, callableClass)); content.add(new InsnNode(DUP)); int pos = 0; // Push the instance of the class being modified (first argument of this // synthetized method) content.add(new VarInsnNode(ALOAD, pos++)); // Push arguments of original method on the stack for callable creation for (Type t : Type.getArgumentTypes(mn.desc)) { content.add(new VarInsnNode(t.getOpcode(ILOAD), pos)); pos += t.getSize(); } // Instantiate the callable content.add(new MethodInsnNode(INVOKESPECIAL, callableClass, "<init>", getCallableCtorDesc(className, mn))); // Return it from the static method content.add(new InsnNode(ARETURN)); staticMethod.instructions.add(content); return staticMethod; }
insert(new VarInsnNode(ALOAD, 0)); insert(new InsnNode(DUP)); insert(new InsnNode(POP)); insert(new VarInsnNode(ALOAD, 0)); insert(new TypeInsnNode(NEW, "java/util/HashMap")); insert(new InsnNode(DUP_X1)); insert(new InsnNode(DUP)); insert(new MethodInsnNode(INVOKESPECIAL, "java/util/HashMap", "<init>", "()V", false)); if (paramTypes.length > 1 || paramTypes[0].getSort() == Type.ARRAY) { String arguments = Type.getInternalName(Arguments.class); insert(new TypeInsnNode(NEW, arguments)); insert(new InsnNode(DUP)); insert(new MethodInsnNode(INVOKESPECIAL, arguments, "<init>", "([Ljava/lang/Object;)V", false)); insert(new VarInsnNode(ASTORE, method.maxLocals));
LabelNode end = new LabelNode(); node.localVariables.add(new LocalVariableNode("this", context.thisClassType().getDescriptor(), null, begin, end, 0)); il.add(begin); il.add(new VarInsnNode(ALOAD, 0)); il.add(new MethodInsnNode( INVOKESPECIAL, context.superClassType().getInternalName(), "<init>", Type.getMethodType(Type.VOID_TYPE).getDescriptor(), String name = context.getUpvalueFieldName(uv); il.add(new VarInsnNode(ALOAD, 0)); // this il.add(new VarInsnNode(ALOAD, 1 + idx)); // upvalue #i il.add(new FieldInsnNode(PUTFIELD, context.thisClassType().getInternalName(), il.add(new InsnNode(RETURN)); il.add(end);