List of usage examples for org.objectweb.asm MethodVisitor visitVarInsn
public void visitVarInsn(final int opcode, final int var)
From source file:jpcsp.Allegrex.compiler.CodeBlock.java
License:Open Source License
private void addNonStaticMethods(CompilerContext context, ClassVisitor cv) { MethodVisitor mv; // public int exec(int returnAddress, int alternativeReturnAddress, boolean isJump) throws Exception; mv = cv.visitMethod(Opcodes.ACC_PUBLIC, context.getExecMethodName(), context.getExecMethodDesc(), null, exceptions);/*from w w w .ja v a 2 s .c om*/ mv.visitCode(); mv.visitMethodInsn(Opcodes.INVOKESTATIC, getClassName(), context.getStaticExecMethodName(), context.getStaticExecMethodDesc()); mv.visitInsn(Opcodes.IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); // private static IExecutable e; FieldVisitor fv = cv.visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, context.getReplaceFieldName(), executableDescriptor, null, null); fv.visitEnd(); // public void setExecutable(IExecutable e); mv = cv.visitMethod(Opcodes.ACC_PUBLIC, context.getReplaceMethodName(), context.getReplaceMethodDesc(), null, exceptions); mv.visitCode(); mv.visitVarInsn(Opcodes.ALOAD, 1); mv.visitFieldInsn(Opcodes.PUTSTATIC, getClassName(), context.getReplaceFieldName(), executableDescriptor); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(1, 2); mv.visitEnd(); // public IExecutable getExecutable(); mv = cv.visitMethod(Opcodes.ACC_PUBLIC, context.getGetMethodName(), context.getGetMethodDesc(), null, exceptions); mv.visitCode(); mv.visitFieldInsn(Opcodes.GETSTATIC, getClassName(), context.getReplaceFieldName(), executableDescriptor); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:jtaint.ByteCodeUtil.java
License:Apache License
public static void buildGetter(ClassVisitor cv, String owner, String fieldName, String fieldDesc, int accFlags, String methodName) {/*from w ww. j a v a2 s . c o m*/ MethodVisitor mv = cv.visitMethod(accFlags + ACC_PUBLIC, methodName, "()" + fieldDesc, null, null); Type t = Type.getType(fieldDesc); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, owner, fieldName, fieldDesc); mv.visitInsn(t.getOpcode(IRETURN)); mv.visitMaxs(t.getSize(), 1); mv.visitEnd(); }
From source file:jtaint.ByteCodeUtil.java
License:Apache License
public static void buildSetter(ClassVisitor cv, String owner, String fieldName, String fieldDesc, int accFlags, String methodName) {/*from www . j av a 2s . c o m*/ MethodVisitor mv = cv.visitMethod(accFlags + ACC_PUBLIC, methodName, "(" + fieldDesc + ")V", null, null); Type t = Type.getType(fieldDesc); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(t.getOpcode(ILOAD), 1); mv.visitFieldInsn(PUTFIELD, owner, fieldName, fieldDesc); mv.visitInsn(RETURN); mv.visitMaxs(1 + t.getSize(), 1 + t.getSize()); mv.visitEnd(); }
From source file:jtaint.ClassLoaderAdapter.java
License:Apache License
private void addDefineClassWrapper(String methodName, String methodDesc) { MethodVisitor mv = cv.visitMethod(ACC_PRIVATE, ByteCodeUtil.internalName("defineClass"), methodDesc, null, null);/*from w ww .j a va 2s . c o m*/ mv.visitCode(); mv.visitVarInsn(ALOAD, 0); /* This */ mv.visitVarInsn(ALOAD, 1); /* String name */ mv.visitVarInsn(ALOAD, 2); /* Buffer (byte[] or ByteBuffer */ mv.visitVarInsn(ILOAD, 3); /* offset */ mv.visitVarInsn(ILOAD, 4); /* len */ Type[] args = Type.getArgumentTypes(methodDesc); Type[] newArgs = new Type[3]; System.arraycopy(args, 1, newArgs, 0, 3); /* Buffer, offset, len */ String newDesc = Type.getMethodDescriptor(newArgs[0], newArgs); mv.visitMethodInsn(INVOKESTATIC, "jtaint/InstrumentationUtils", "instrument", newDesc); if ("Ljava/nio/ByteBuffer;".equals(newArgs[0].getDescriptor())) { mv.visitInsn(DUP); mv.visitMethodInsn(INVOKEVIRTUAL, "java/nio/ByteBuffer", "position", "()I"); mv.visitInsn(SWAP); mv.visitInsn(DUP_X1); mv.visitMethodInsn(INVOKEVIRTUAL, "java/nio/ByteBuffer", "remaining", "()I"); } else { mv.visitInsn(DUP); mv.visitInsn(ARRAYLENGTH); mv.visitInsn(ICONST_0); mv.visitInsn(SWAP); } /* Now push all additional arguments */ int l = 5; for (int i = 4; i < args.length; l += args[i].getSize(), i++) mv.visitVarInsn(args[i].getOpcode(ILOAD), l); mv.visitMethodInsn(INVOKESPECIAL, className, methodName, methodDesc); mv.visitInsn(ARETURN); mv.visitMaxs(l, l); mv.visitEnd(); }
From source file:jtaint.ClassLoaderAdapter.java
License:Apache License
private void addExportWrapper() { String desc = "(Ljava/lang/String;)Ljava/lang/Class;"; MethodVisitor mv = cv.visitMethod(ACC_PUBLIC, ByteCodeUtil.internalName("findLoadedClass"), desc, null, null);//from w w w.ja v a 2 s . c om mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, className, "findLoadedClass", desc); mv.visitInsn(ARETURN); mv.visitMaxs(2, 2); mv.visitEnd(); }
From source file:jtaint.InstrumentationLockBuilder.java
License:Apache License
private static final void buildIncLock(ClassVisitor cv, String className) { MethodVisitor mv; mv = cv.visitMethod(ACC_PUBLIC, ByteCodeUtil.internalName("incLock"), "()V", null, null); mv.visitCode();//from w w w. j a v a2 s. c om mv.visitVarInsn(ALOAD, 0); mv.visitInsn(DUP); mv.visitFieldInsn(GETFIELD, className, ByteCodeUtil.internalName("lock"), "I"); mv.visitInsn(ICONST_1); mv.visitInsn(IADD); mv.visitFieldInsn(PUTFIELD, className, ByteCodeUtil.internalName("lock"), "I"); mv.visitInsn(RETURN); mv.visitMaxs(3, 1); mv.visitEnd(); }
From source file:jtaint.InstrumentationLockBuilder.java
License:Apache License
private static final void buildDecAndTestLock(ClassVisitor cv, String className) { MethodVisitor mv; mv = cv.visitMethod(ACC_PUBLIC, ByteCodeUtil.internalName("decAndTestLock"), "()I", null, null); mv.visitCode();/*from w w w . jav a 2s. c o m*/ mv.visitVarInsn(ALOAD, 0); mv.visitInsn(DUP); mv.visitFieldInsn(GETFIELD, className, ByteCodeUtil.internalName("lock"), "I"); mv.visitInsn(ICONST_1); mv.visitInsn(ISUB); mv.visitInsn(DUP_X1); mv.visitFieldInsn(PUTFIELD, className, ByteCodeUtil.internalName("lock"), "I"); mv.visitInsn(IRETURN); mv.visitMaxs(3, 1); mv.visitEnd(); }
From source file:jtaint.ProcessBuilderAdapter.java
License:Apache License
public MethodVisitor visitMethod(final int access, final String name, final String desc, String signature, final String[] exceptions) { final MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); if (!methodList.contains(new MethodDecl(access, name, desc))) return mv; return new SimpleAdviceAdapter(mv, className, access, name, desc) { protected void onMethodEnter() { Type cmdType = Type.getArgumentTypes(desc)[0]; mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, "jtaint/ExecUtil", "validateExec", "(" + cmdType.getDescriptor() + ")V"); }// ww w .j a v a 2s.co m }; }
From source file:jtaint.RemappingStringClassAdapter.java
License:Apache License
private void buildToString(int access, boolean hasOffset) { /* Do not call super.visitMethod, we don't want remapping done here */ MethodVisitor mv = cv.visitMethod(access, "toString", "()Ljava/lang/String;", null, null); if (mv == null) return;/*from w w w . jav a2s . c o m*/ if ((access & ACC_ABSTRACT) != 0) { mv.visitEnd(); return; } mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, "jtaint/OrigStringUtil", "toBaseString", "(L" + className + ";)Ljava/lang/String;"); mv.visitInsn(ARETURN); mv.visitMaxs(1, 1); mv.visitEnd(); }
From source file:jtaint.RuntimeAdapter.java
License:Apache License
public MethodVisitor visitMethod(final int access, final String name, final String desc, String signature, String[] exceptions) {/*from w ww.ja v a2s . c o m*/ final MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); if (!methodList.contains(new MethodDecl(access, name, desc))) return mv; return new SimpleAdviceAdapter(mv, className, access, name, desc) { public void onMethodEnter() { Type cmdType = Type.getArgumentTypes(desc)[0]; mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKESTATIC, "jtaint/ExecUtil", "validateExec", "(" + cmdType.getDescriptor() + ")V"); } }; }