Example usage for org.objectweb.asm MethodVisitor visitVarInsn

List of usage examples for org.objectweb.asm MethodVisitor visitVarInsn

Introduction

In this page you can find the example usage for org.objectweb.asm MethodVisitor visitVarInsn.

Prototype

public void visitVarInsn(final int opcode, final int var) 

Source Link

Document

Visits a local variable instruction.

Usage

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");
        }
    };
}