Package jadx.core.dex.instructions.args

Examples of jadx.core.dex.instructions.args.InsnArg


    return null;
  }

  private static List<InsnNode> flattenInsnChain(InsnNode insn) {
    List<InsnNode> chain = new ArrayList<InsnNode>();
    InsnArg i = insn.getArg(0);
    while (i.isInsnWrap()) {
      InsnNode wrapInsn = ((InsnWrapArg) i).getWrapInsn();
      chain.add(wrapInsn);
      if (wrapInsn.getArgsCount() == 0) {
        break;
      }
View Full Code Here


        if (node != null && node.isArgsOverload()) {
          List<ArgType> args = callMth.getArgumentsTypes();
          int j = inv.getArgsCount() - 1;
          for (int i = args.size() - 1; i >= 0; i--) {
            ArgType argType = args.get(i);
            InsnArg insnArg = inv.getArg(j--);
            if (insnArg.isRegister() && !argType.equals(insnArg.getType())) {
              insnArg.setType(argType);
              change = true;
            }
          }
        }
        return change;
View Full Code Here

  private SelectTypeVisitor() {
  }

  public static void visit(InsnNode insn) {
    InsnArg res = insn.getResult();
    if (res != null && !res.getType().isTypeKnown()) {
      selectType(res);
    }
    for (InsnArg arg : insn.getArguments()) {
      if (!arg.getType().isTypeKnown()) {
        selectType(arg);
View Full Code Here

      case IPUT:
      case SPUT:
        return convertFieldArith(mth, insn);

      case CHECK_CAST:
        InsnArg castArg = insn.getArg(0);
        ArgType castType = (ArgType) ((IndexInsnNode) insn).getIndex();
        if (!ArgType.isCastNeeded(castArg.getType(), castType)) {
          InsnNode insnNode = new InsnNode(InsnType.MOVE, 1);
          insnNode.setResult(insn.getResult());
          insnNode.addArg(castArg);
          return insnNode;
        }
View Full Code Here

  /**
   * Simplify 'cmp' instruction in if condition
   */
  private static void simplifyIf(IfNode insn) {
    InsnArg f = insn.getArg(0);
    if (f.isInsnWrap()) {
      InsnNode wi = ((InsnWrapArg) f).getWrapInsn();
      if (wi.getType() == InsnType.CMP_L || wi.getType() == InsnType.CMP_G) {
        if (insn.getArg(1).isLiteral()
            && ((LiteralArg) insn.getArg(1)).getLiteral() == 0) {
          insn.changeCondition(insn.getOp(), wi.getArg(0), wi.getArg(1));
View Full Code Here

  private static InsnNode simplifyArith(InsnNode insn) {
    ArithNode arith = (ArithNode) insn;
    if (arith.getArgsCount() != 2) {
      return null;
    }
    InsnArg litArg = null;
    InsnArg secondArg = arith.getArg(1);
    if (secondArg.isInsnWrap()) {
      InsnNode wr = ((InsnWrapArg) secondArg).getWrapInsn();
      if (wr.getType() == InsnType.CONST) {
        litArg = wr.getArg(0);
      }
    } else if (secondArg.isLiteral()) {
      litArg = secondArg;
    }
    if (litArg != null) {
      long lit = ((LiteralArg) litArg).getLiteral();
      // fix 'c + (-1)' => 'c - (1)'
View Full Code Here

  /**
   * Convert field arith operation to arith instruction
   * (IPUT = ARITH (IGET, lit) -> ARITH (fieldArg <op>= lit))
   */
  private static InsnNode convertFieldArith(MethodNode mth, InsnNode insn) {
    InsnArg arg = insn.getArg(0);
    if (!arg.isInsnWrap()) {
      return null;
    }
    InsnNode wrap = ((InsnWrapArg) arg).getWrapInsn();
    InsnType wrapType = wrap.getType();
    if ((wrapType != InsnType.ARITH && wrapType != InsnType.STR_CONCAT)
        || !wrap.getArg(0).isInsnWrap()) {
      return null;
    }
    InsnNode get = ((InsnWrapArg) wrap.getArg(0)).getWrapInsn();
    InsnType getType = get.getType();
    if (getType != InsnType.IGET && getType != InsnType.SGET) {
      return null;
    }
    FieldInfo field = (FieldInfo) ((IndexInsnNode) insn).getIndex();
    FieldInfo innerField = (FieldInfo) ((IndexInsnNode) get).getIndex();
    if (!field.equals(innerField)) {
      return null;
    }
    try {
      InsnArg reg = null;
      if (getType == InsnType.IGET) {
        reg = get.getArg(0);
      }
      FieldArg fArg = new FieldArg(field, reg);
      if (reg != null) {
View Full Code Here

          throw new JadxException("Unknown enum field name: " + cls);
        }
        EnumField field = new EnumField(name, insn.getArgsCount() - 2);
        attr.getFields().add(field);
        for (int i = 2; i < insn.getArgsCount(); i++) {
          InsnArg constrArg;
          InsnArg iArg = insn.getArg(i);
          if (iArg.isLiteral()) {
            constrArg = iArg;
          } else {
            constrArg = CodeShrinker.inlineArgument(staticMethod, (RegisterArg) iArg);
            if (constrArg == null) {
              throw new JadxException("Can't inline constructor arg in enum: " + cls);
View Full Code Here

        List<RegisterArg> useList = res.getSVar().getUseList();
        if (useList.size() != 1) {
          pass = false;
          break;
        }
        InsnArg arg = useList.get(0);
        InsnNode usePlace = arg.getParentInsn();
        if (!BlockUtils.blockContains(block, usePlace)
            && !BlockUtils.blockContains(next, usePlace)) {
          pass = false;
          break;
        }
View Full Code Here

  private static boolean containsTernary(InsnNode insn) {
    if (insn.getType() == InsnType.TERNARY) {
      return true;
    }
    for (int i = 0; i < insn.getArgsCount(); i++) {
      InsnArg arg = insn.getArg(i);
      if (arg.isInsnWrap()) {
        InsnNode wrapInsn = ((InsnWrapArg) arg).getWrapInsn();
        if (containsTernary(wrapInsn)) {
          return true;
        }
      }
View Full Code Here

TOP

Related Classes of jadx.core.dex.instructions.args.InsnArg

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.