Package jadx.core.dex.nodes

Examples of jadx.core.dex.nodes.InsnNode


    MethodInfo mth = MethodInfo.fromDex(dex, insn.getIndex());
    return new InvokeNode(mth, insn, type, isRange, resReg);
  }

  private InsnNode arrayGet(DecodedInstruction insn, ArgType argType) {
    InsnNode inode = new InsnNode(InsnType.AGET, 2);
    inode.setResult(InsnArg.reg(insn, 0, argType));
    inode.addArg(InsnArg.reg(insn, 1, ArgType.unknown(PrimitiveType.ARRAY)));
    inode.addArg(InsnArg.reg(insn, 2, ArgType.INT));
    return inode;
  }
View Full Code Here


    inode.addArg(InsnArg.reg(insn, 2, ArgType.INT));
    return inode;
  }

  private InsnNode arrayPut(DecodedInstruction insn, ArgType argType) {
    InsnNode inode = new InsnNode(InsnType.APUT, 3);
    inode.addArg(InsnArg.reg(insn, 1, ArgType.unknown(PrimitiveType.ARRAY)));
    inode.addArg(InsnArg.reg(insn, 2, ArgType.INT));
    inode.addArg(InsnArg.reg(insn, 0, argType));
    return inode;
  }
View Full Code Here

  private InsnNode arithLit(DecodedInstruction insn, ArithOp op, ArgType type) {
    return new ArithNode(insn, op, type, true);
  }

  private InsnNode neg(DecodedInstruction insn, ArgType type) {
    InsnNode inode = new InsnNode(InsnType.NEG, 1);
    inode.setResult(InsnArg.reg(insn, 0, type));
    inode.addArg(InsnArg.reg(insn, 1, type));
    return inode;
  }
View Full Code Here

  }

  private static void removeInstructions(BlockNode block) {
    Iterator<InsnNode> it = block.getInstructions().iterator();
    while (it.hasNext()) {
      InsnNode insn = it.next();
      switch (insn.getType()) {
        case NOP:
        case MONITOR_ENTER:
        case MONITOR_EXIT:
        case MOVE_EXCEPTION:
          it.remove();
          break;

        case CONSTRUCTOR:
          ConstructorInsn co = (ConstructorInsn) insn;
          if (co.isSelf()) {
            it.remove();
          }
          break;

        case MOVE:
          // remove redundant moves:
          //   unused result and same args names (a = a;)
          RegisterArg result = insn.getResult();
          if (result.getSVar().getUseCount() == 0
              && result.isNameEquals(insn.getArg(0))) {
            it.remove();
          }
          break;
      }
    }
View Full Code Here

    inode.addArg(InsnArg.reg(insn, 1, type));
    return inode;
  }

  private InsnNode insn(InsnType type, RegisterArg res) {
    InsnNode node = new InsnNode(type, 0);
    node.setResult(res);
    return node;
  }
View Full Code Here

  }

  private static void checkInline(BlockNode block) {
    List<InsnNode> list = block.getInstructions();
    for (int i = 0; i < list.size(); i++) {
      InsnNode insn = list.get(i);
      // replace 'move' with inner wrapped instruction
      if (insn.getType() == InsnType.MOVE
          && insn.getArg(0).isInsnWrap()) {
        InsnNode wrapInsn = ((InsnWrapArg) insn.getArg(0)).getWrapInsn();
        wrapInsn.setResult(insn.getResult());
        wrapInsn.copyAttributesFrom(insn);
        list.set(i, wrapInsn);
      }
    }
  }
View Full Code Here

    node.setResult(res);
    return node;
  }

  private InsnNode insn(InsnType type, RegisterArg res, InsnArg arg) {
    InsnNode node = new InsnNode(type, 1);
    node.setResult(res);
    node.addArg(arg);
    return node;
  }
View Full Code Here

    node.addArg(arg);
    return node;
  }

  private InsnNode insn(InsnType type, RegisterArg res, InsnArg... args) {
    InsnNode node = new InsnNode(type, args == null ? 0 : args.length);
    node.setResult(res);
    if (args != null) {
      for (InsnArg arg : args) {
        node.addArg(arg);
      }
    }
    return node;
  }
View Full Code Here

      ArithOp op = arith.getOp();
      if (op == ArithOp.ADD || op == ArithOp.SUB) {
        for (int i = 0; i < 2; i++) {
          InsnArg arg = arith.getArg(i);
          if (arg.isInsnWrap()) {
            InsnNode wrapInsn = ((InsnWrapArg) arg).getWrapInsn();
            wrapInsn.add(AFlag.DONT_WRAP);
            checkInsn(wrapInsn);
          }
        }
      }
    } else {
      for (InsnArg arg : insn.getArguments()) {
        if (arg.isInsnWrap()) {
          InsnNode wrapInsn = ((InsnWrapArg) arg).getWrapInsn();
          checkInsn(wrapInsn);
        }
      }
    }
  }
View Full Code Here

   */
  private static void markExceptionHandlers(BlockNode block) {
    if (block.getInstructions().isEmpty()) {
      return;
    }
    InsnNode me = block.getInstructions().get(0);
    ExcHandlerAttr handlerAttr = me.get(AType.EXC_HANDLER);
    if (handlerAttr == null || me.getType() != InsnType.MOVE_EXCEPTION) {
      return;
    }
    ExceptionHandler excHandler = handlerAttr.getHandler();
    block.addAttr(handlerAttr);
    // set correct type for 'move-exception' operation
    ArgType type = excHandler.isCatchAll() ? ArgType.THROWABLE : excHandler.getCatchType().getType();

    RegisterArg resArg = me.getResult();
    resArg = InsnArg.reg(resArg.getRegNum(), type);
    me.setResult(resArg);
    me.add(AFlag.DONT_INLINE);

    excHandler.setArg(resArg);
  }
View Full Code Here

TOP

Related Classes of jadx.core.dex.nodes.InsnNode

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.