int index; if (ctx.param != null) { index = m.regToParamIdx(m.pareReg(ctx.r.getText())); } else { index = i; m.setNameByIdx(index, unescapeStr(ctx.name.getText()));
@Override public Object visitFconst(SmaliParser.FconstContext ctx) { Op op = getOp(ctx.op); int r = m.pareReg(ctx.r1.getText()); Token cst = ctx.cst;
@Override public Object visitFlocal(SmaliParser.FlocalContext ctx) { if (dexDebugVisitor != null) { DexLabel dexLabel = new DexLabel(); scv.visitLabel(dexLabel); int reg = m.pareReg(ctx.r.getText()); String name; String type; if (ctx.v1 != null) { Field fld = parseFieldAndUnescape("Lt;", ctx.v1.getText()); name = fld.getName(); type = fld.getType(); } else if (ctx.v2 != null) { String txt = ctx.v2.getText(); int i = findString(txt, 1, txt.length(), '\"'); name = unescapeStr(txt.substring(0, i + 1)); type = unEscapeId(txt.substring(i + 2)); } else { if (ctx.name2 != null) { name = unescapeStr(ctx.name2.getText()); } else { name = unEscapeId(ctx.name1.getText()); } type = unEscapeId(ctx.type.getText()); } String sig = ctx.sig == null ? null : unescapeStr(ctx.sig.getText()); dexDebugVisitor.visitStartLocal(reg, dexLabel, name, type, sig); } return null; }
public static void acceptMethod(SmaliParser.SMethodContext ctx, String className, DexClassVisitor dexClassVisitor) { Method method; Token methodObj = ctx.methodObj; if (methodObj.getType() == SmaliLexer.METHOD_FULL) { method = Utils.parseMethodAndUnescape(methodObj.getText()); } else {// PART method = Utils.parseMethodAndUnescape(className, methodObj.getText()); } int access = collectAccess(ctx.sAccList()); boolean isStatic = 0 != (access & DexConstants.ACC_STATIC); DexMethodVisitor dexMethodVisitor = dexClassVisitor.visitMethod(access, method); if (dexMethodVisitor != null) { acceptAnnotations(ctx.sAnnotation(), dexMethodVisitor); int ins = Utils.methodIns(method, isStatic); int totalRegisters = findTotalRegisters(ctx, ins); if (totalRegisters < 0) { totalRegisters = ins; } M m = new M(method, totalRegisters, ins, isStatic); acceptParameter(ctx.sParameter(), m, dexMethodVisitor); acceptCode(ctx, m, dexMethodVisitor); dexMethodVisitor.visitEnd(); } }
@Override public Object visitFtrc(SmaliParser.FtrcContext ctx) { if (ctx.rstart != null) { int start = m.pareReg(ctx.rstart.getText()); int end = m.pareReg(ctx.rend.getText()); int size = end - start + 1; int rs[] = new int[size]; for (int i = 0; i < size; i++) { rs[i] = start + i; } scv.visitFilledNewArrayStmt(getOp(ctx.op), rs, unEscapeId(ctx.type.getText())); } else { scv.visitFilledNewArrayStmt(getOp(ctx.op), new int[0], unEscapeId(ctx.type.getText())); } return null; }
@Override public Object visitFmrc(SmaliParser.FmrcContext ctx) { if (ctx.rstart != null) { int start = m.pareReg(ctx.rstart.getText()); int end = m.pareReg(ctx.rend.getText()); int size = end - start + 1; int rs[] = new int[size]; for (int i = 0; i < size; i++) { rs[i] = start + i; } scv.visitMethodStmt(getOp(ctx.op), rs, parseMethodAndUnescape(ctx.method.getText())); } else { scv.visitMethodStmt(getOp(ctx.op), new int[0], parseMethodAndUnescape(ctx.method.getText())); } return null; }
@Override public Object visitF1t(SmaliParser.F1tContext ctx) { scv.visitJumpStmt(getOp(ctx.op), m.pareReg(ctx.r1.getText()), 0, getLabel(ctx.label.getText())); return null; }
@Override public Object visitF31t(SmaliParser.F31tContext ctx) { scv.visitF31tStmt(getOp(ctx.op), m.pareReg(ctx.r1.getText()), getLabel(ctx.label.getText())); return null; }
@Override public Object visitFf1c(SmaliParser.Ff1cContext ctx) { int r = m.pareReg(ctx.r1.getText()); Field field = parseFieldAndUnescape(ctx.fld.getText()); scv.visitFieldStmt(getOp(ctx.op), r, 0, field); return null; }
@Override public Object visitFend(SmaliParser.FendContext ctx) { if (dexDebugVisitor != null) { DexLabel dexLabel = new DexLabel(); scv.visitLabel(dexLabel); int reg = m.pareReg(ctx.r.getText()); dexDebugVisitor.visitEndLocal(reg, dexLabel); } return null; }
@Override public Object visitFm5c(SmaliParser.Fm5cContext ctx) { Op op = getOp(ctx.op); List<TerminalNode> ts = ctx.REGISTER(); int rs[] = new int[ts.size()]; for (int i = 0; i < ts.size(); i++) { rs[i] = m.pareReg(ts.get(i).getSymbol().getText()); } scv.visitMethodStmt(op, rs, parseMethodAndUnescape(ctx.method.getText())); return null; }
@Override public Object visitFrestart(SmaliParser.FrestartContext ctx) { if (dexDebugVisitor != null) { DexLabel dexLabel = new DexLabel(); scv.visitLabel(dexLabel); int reg = m.pareReg(ctx.r.getText()); dexDebugVisitor.visitRestartLocal(reg, dexLabel); } return null; }
@Override public Object visitFt5c(SmaliParser.Ft5cContext ctx) { Op op = getOp(ctx.op); List<TerminalNode> ts = ctx.REGISTER(); int rs[] = new int[ts.size()]; for (int i = 0; i < ts.size(); i++) { rs[i] = m.pareReg(ts.get(i).getSymbol().getText()); } scv.visitFilledNewArrayStmt(op, rs, unEscapeId(ctx.type.getText())); return null; }
@Override public Object visitF1x(SmaliParser.F1xContext ctx) { scv.visitStmt1R(getOp(ctx.op), m.pareReg(ctx.r1.getText())); return null; }