use of com.googlecode.d2j.visitors.DexMethodVisitor 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();
}
}
use of com.googlecode.d2j.visitors.DexMethodVisitor 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();
}
}
use of com.googlecode.d2j.visitors.DexMethodVisitor 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();
}
use of com.googlecode.d2j.visitors.DexMethodVisitor in project dex2jar by pxb1988.
the class ZeroTest method testZero.
@Test
public static void testZero(DexClassVisitor cv) {
DexMethodVisitor mv = cv.visitMethod(ACC_STATIC, new Method("La;", "b", new String[] {}, "[Ljava/lang/Object;"));
if (mv != null) {
DexCodeVisitor code = mv.visitCode();
if (code != null) {
int v0 = 0;
code.visitRegister(1);
DexLabel L1 = new DexLabel();
DexLabel L2 = new DexLabel();
DexLabel L3 = new DexLabel();
code.visitConstStmt(CONST, v0, 0);
code.visitJumpStmt(IF_EQ, v0, v0, L2);
code.visitLabel(L1);
code.visitStmt1R(RETURN_OBJECT, v0);
code.visitLabel(L2);
code.visitJumpStmt(IF_EQ, v0, v0, L3);
code.visitMethodStmt(INVOKE_STATIC, new int[0], new Method("La;", "getBytes", new String[0], "[B"));
code.visitStmt1R(MOVE_RESULT_OBJECT, v0);
code.visitLabel(L3);
code.visitMethodStmt(INVOKE_STATIC, new int[] { v0 }, new Method("La;", "useBytes", new String[] { "[B" }, "V"));
code.visitMethodStmt(INVOKE_STATIC, new int[0], new Method("La;", "getObjects", new String[0], "[Ljava/lang/Object;"));
code.visitStmt1R(MOVE_RESULT, v0);
code.visitJumpStmt(GOTO, -1, -1, L1);
code.visitEnd();
}
mv.visitEnd();
}
}
use of com.googlecode.d2j.visitors.DexMethodVisitor in project dex2jar by pxb1988.
the class ArrayTypeTest method a123.
@Test
public static void a123(DexClassVisitor cv) {
DexMethodVisitor mv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, new Method("La;", "b", new String[] {}, "V"));
DexCodeVisitor code = mv.visitCode();
code.visitRegister(3);
code.visitConstStmt(CONST, 0, 0);
code.visitConstStmt(CONST, 1, 1);
code.visitConstStmt(CONST, 2, 0x63);
code.visitStmt3R(APUT, 2, 0, 1);
code.visitStmt0R(RETURN_VOID);
code.visitEnd();
mv.visitEnd();
}
Aggregations