Search in sources :

Example 6 with Method

use of com.googlecode.d2j.Method in project dex2jar by pxb1988.

the class I121Test method i121.

@Test
public static void i121(DexClassVisitor cv) {
    DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "a", new String[] { "Ljava/lang/String;", "Ljava/lang/String;" }, "Ljava/lang/String;"));
    DexCodeVisitor code = mv.visitCode();
    int p0 = 2;
    int p1 = 3;
    int v0 = 0;
    int v1 = 1;
    DexLabel cond_7 = new DexLabel();
    DexLabel try_start_2 = new DexLabel();
    DexLabel try_end_9 = new DexLabel();
    DexLabel catch_a = new DexLabel();
    DexLabel goto_2 = new DexLabel();
    code.visitTryCatch(try_start_2, try_end_9, new DexLabel[] { catch_a }, new String[] { "Ljava/io/UnsupportedEncodingException;" });
    code.visitRegister(4);
    code.visitJumpStmt(IF_EQZ, p1, -1, cond_7);
    code.visitLabel(goto_2);
    code.visitLabel(try_start_2);
    code.visitMethodStmt(INVOKE_STATIC, new int[] { p0, p1 }, new Method("Ljava/net/URLEncoder;", "encode", new String[] { "Ljava/lang/String;", "Ljava/lang/String;" }, "Ljava/lang/String;"));
    code.visitStmt1R(MOVE_RESULT_OBJECT, v0);
    code.visitStmt1R(RETURN_OBJECT, v0);
    code.visitLabel(cond_7);
    code.visitConstStmt(CONST_STRING, p1, "ISO-8859-1");
    code.visitLabel(try_end_9);
    code.visitJumpStmt(GOTO, -1, -1, goto_2);
    code.visitLabel(catch_a);
    code.visitStmt1R(MOVE_EXCEPTION, v0);
    code.visitTypeStmt(NEW_INSTANCE, v1, -1, "Ljava/lang/IllegalArgumentException;");
    code.visitMethodStmt(INVOKE_DIRECT, new int[] { v1, v0 }, new Method("Ljava/lang/IllegalArgumentException;", "<init>", new String[] { "Ljava/lang/Throwable;" }, "V"));
    code.visitStmt1R(THROW, v1);
    code.visitEnd();
    mv.visitEnd();
}
Also used : DexCodeVisitor(com.googlecode.d2j.visitors.DexCodeVisitor) DexLabel(com.googlecode.d2j.DexLabel) Method(com.googlecode.d2j.Method) DexMethodVisitor(com.googlecode.d2j.visitors.DexMethodVisitor) Test(org.junit.Test)

Example 7 with Method

use of com.googlecode.d2j.Method in project dex2jar by pxb1988.

the class I168Test method i168.

@Test
public static void i168(DexClassVisitor cv) {
    DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "a", new String[] {}, "I"));
    DexCodeVisitor code = mv.visitCode();
    // 2000 locals
    code.visitRegister(2000);
    for (int i = 0; i < 2000; i++) {
        // 2000 insns
        code.visitConstStmt(Op.CONST, i, i);
    }
    for (int i = 0; i < 18000; i++) {
        // 18000 insns
        code.visitConstStmt(Op.CONST, 25, i);
    }
    code.visitStmt1R(Op.RETURN, 25);
    code.visitEnd();
    mv.visitEnd();
}
Also used : DexCodeVisitor(com.googlecode.d2j.visitors.DexCodeVisitor) Method(com.googlecode.d2j.Method) DexMethodVisitor(com.googlecode.d2j.visitors.DexMethodVisitor) Test(org.junit.Test)

Example 8 with Method

use of com.googlecode.d2j.Method in project dex2jar by pxb1988.

the class I63Test method i63.

@Test
public static void i63(DexClassVisitor cv) {
    DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La;", "b", new String[] {}, "V"));
    if (mv != null) {
        DexCodeVisitor code = mv.visitCode();
        if (code != null) {
            code.visitRegister(1);
            DexLabel L1 = new DexLabel();
            DexLabel L2 = new DexLabel();
            code.visitLabel(L1);
            code.visitFieldStmt(Op.SGET, 0, -1, new Field("La;", "f", "J"));
            code.visitLabel(L2);
            code.visitStmt0R(Op.RETURN_VOID);
            code.visitEnd();
            code.visitTryCatch(L1, L2, new DexLabel[] { L2 }, new String[] { "La;" });
        }
        mv.visitEnd();
    }
}
Also used : Field(com.googlecode.d2j.Field) DexCodeVisitor(com.googlecode.d2j.visitors.DexCodeVisitor) DexLabel(com.googlecode.d2j.DexLabel) Method(com.googlecode.d2j.Method) DexMethodVisitor(com.googlecode.d2j.visitors.DexMethodVisitor) Test(org.junit.Test)

Example 9 with Method

use of com.googlecode.d2j.Method in project dex2jar by pxb1988.

the class Issue71Test method i71.

@Test
public static void i71(DexClassVisitor cv) {
    DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La;", "test", new String[] {}, "V"));
    if (mv != null) {
        DexCodeVisitor code = mv.visitCode();
        if (code != null) {
            code.visitRegister(2);
            code.visitConstStmt(CONST_WIDE, 0, 0L);
            code.visitConstStmt(CONST_WIDE, 1, 2L);
            code.visitStmt3R(ADD_LONG, 0, 0, 1);
            code.visitStmt0R(RETURN_VOID);
            code.visitEnd();
        }
        mv.visitEnd();
    }
}
Also used : DexCodeVisitor(com.googlecode.d2j.visitors.DexCodeVisitor) Method(com.googlecode.d2j.Method) DexMethodVisitor(com.googlecode.d2j.visitors.DexMethodVisitor) Test(org.junit.Test)

Example 10 with Method

use of com.googlecode.d2j.Method in project dex2jar by pxb1988.

the class OptSyncTest method test.

/**
     * Generate the following code
     * 
     * <pre>
     * public static void a() {
     * a0 = System.out
     * L0: 
     * lock a0 <= a0 is inside a try-catch
     * a1="haha"
     * a0.println(a1)
     * L1: 
     * unlock a0 
     * return
     * L2: 
     * a1 := @Exception 
     * unlock a0 
     * throw a1
     * ============= 
     * .catch L0 - L1 > L2 // all 
     * }
     * </pre>
     * 
     * @param cv
     */
@Test
public void test(DexClassVisitor cv) {
    DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "a", new String[] {}, "V"));
    DexCodeVisitor code = mv.visitCode();
    int v0 = 0;
    int v1 = 1;
    DexLabel try_start = new DexLabel();
    DexLabel try_end = new DexLabel();
    DexLabel catch_a = new DexLabel();
    code.visitTryCatch(try_start, try_end, new DexLabel[] { catch_a }, new String[] { null });
    code.visitRegister(2);
    code.visitFieldStmt(SGET_OBJECT, v0, -1, new Field("Ljava/lang/System;", "out", "Ljava/io/PrintStream;"));
    code.visitLabel(try_start);
    code.visitStmt1R(MONITOR_ENTER, v0);
    code.visitConstStmt(CONST_STRING, v1, "haha");
    code.visitMethodStmt(INVOKE_VIRTUAL, new int[] { v0, v1 }, new Method("Ljava/io/PrintString;", "println", new String[] { "Ljava/lang/String;" }, "V"));
    code.visitLabel(try_end);
    code.visitStmt1R(MONITOR_EXIT, v0);
    code.visitStmt0R(RETURN_VOID);
    code.visitLabel(catch_a);
    code.visitStmt1R(MOVE_EXCEPTION, v1);
    code.visitStmt1R(MONITOR_EXIT, v0);
    code.visitStmt1R(THROW, v1);
    code.visitEnd();
    mv.visitEnd();
}
Also used : Field(com.googlecode.d2j.Field) DexCodeVisitor(com.googlecode.d2j.visitors.DexCodeVisitor) DexLabel(com.googlecode.d2j.DexLabel) Method(com.googlecode.d2j.Method) DexMethodVisitor(com.googlecode.d2j.visitors.DexMethodVisitor) Test(org.junit.Test)

Aggregations

Method (com.googlecode.d2j.Method)22 DexCodeVisitor (com.googlecode.d2j.visitors.DexCodeVisitor)18 DexMethodVisitor (com.googlecode.d2j.visitors.DexMethodVisitor)18 Test (org.junit.Test)13 DexLabel (com.googlecode.d2j.DexLabel)10 Field (com.googlecode.d2j.Field)9 DexClassVisitor (com.googlecode.d2j.visitors.DexClassVisitor)4 Op (com.googlecode.d2j.reader.Op)3 HashMap (java.util.HashMap)3 DexFileWriter (com.googlecode.d2j.dex.writer.DexFileWriter)2 DexFieldVisitor (com.googlecode.d2j.visitors.DexFieldVisitor)2 File (java.io.File)2 DexType (com.googlecode.d2j.DexType)1 DexCodeNode (com.googlecode.d2j.node.DexCodeNode)1 DexMethodNode (com.googlecode.d2j.node.DexMethodNode)1 DvmInterpreter (com.googlecode.d2j.node.analysis.DvmInterpreter)1 DexFileReader (com.googlecode.d2j.reader.DexFileReader)1 ASMifierFileV (com.googlecode.d2j.util.ASMifierFileV)1 DexAnnotationAble (com.googlecode.d2j.visitors.DexAnnotationAble)1 DexAnnotationVisitor (com.googlecode.d2j.visitors.DexAnnotationVisitor)1