Package jadx.core.dex.nodes

Examples of jadx.core.dex.nodes.InsnNode


    Map<Integer, Integer> map = new HashMap<Integer, Integer>(tPhi.getArgsCount());
    for (InsnArg arg : tPhi.getArguments()) {
      if (!arg.isRegister()) {
        continue;
      }
      InsnNode assignInsn = ((RegisterArg) arg).getAssignInsn();
      if (assignInsn == null) {
        continue;
      }
      int sourceLine = assignInsn.getSourceLine();
      if (sourceLine != 0) {
        Integer count = map.get(sourceLine);
        if (count != null) {
          map.put(sourceLine, count + 1);
        } else {
View Full Code Here


        }
      }
    }

    if (!processed && block.getInstructions().size() == 1) {
      InsnNode insn = block.getInstructions().get(0);
      switch (insn.getType()) {
        case IF:
          next = processIf(r, block, (IfNode) insn, stack);
          processed = true;
          break;
View Full Code Here

      }
    }
    if (!confirm) {
      return false;
    }
    InsnNode breakInsn = new InsnNode(InsnType.BREAK, 0);
    insertBlock.getInstructions().add(breakInsn);
    stack.addExit(exit);
    // add label to 'break' if needed
    addBreakLabel(exitEdge, exit, breakInsn);
    return true;
View Full Code Here

      return;
    }
    Set<BlockNode> loopExitNodes = loop.getExitNodes();
    for (BlockNode pred : predecessors) {
      if (canInsertContinue(pred, predecessors, loopEnd, loopExitNodes)) {
        InsnNode cont = new InsnNode(InsnType.CONTINUE, 0);
        pred.getInstructions().add(cont);
      }
    }
  }
View Full Code Here

    List<InsnNode> b1Insns = b1.getInstructions();
    List<InsnNode> b2Insns = b2.getInstructions();
    if (b1Insns.size() != 1 || b2Insns.size() != 1) {
      return false;
    }
    InsnNode i1 = b1Insns.get(0);
    InsnNode i2 = b2Insns.get(0);
    if (i1.getArgsCount() == 0 || i2.getArgsCount() == 0) {
      return false;
    }
    return i1.getArg(0).equals(i2.getArg(0));
  }
View Full Code Here

   * - used as instance arg in invoke instruction
   * - used in 'array.length'
   */
  private static boolean checkObjectInline(SSAVar sVar) {
    for (RegisterArg useArg : sVar.getUseList()) {
      InsnNode insn = useArg.getParentInsn();
      if (insn != null) {
        InsnType insnType = insn.getType();
        if (insnType == InsnType.INVOKE) {
          InvokeNode inv = (InvokeNode) insn;
          if (inv.getInvokeType() != InvokeType.STATIC
              && inv.getArg(0) == useArg) {
            return true;
          }
        } else if (insnType == InsnType.ARRAY_LENGTH) {
          if (insn.getArg(0) == useArg) {
            return true;
          }
        }
      }
    }
View Full Code Here

    int replaceCount = 0;
    for (RegisterArg arg : use) {
//      if (arg.getSVar().isUsedInPhi()) {
//        continue;
//      }
      InsnNode useInsn = arg.getParentInsn();
      if (useInsn.getType() == InsnType.PHI) {
        continue;
      }
      LiteralArg litArg;
      if (use.size() == 1 || arg.isTypeImmutable()) {
        // arg used only in one place
        litArg = InsnArg.lit(literal, arg.getType());
      } else if (useInsn.getType() == InsnType.MOVE
          && !useInsn.getResult().getType().isTypeKnown()) {
        // save type for 'move' instructions (hard to find type in chains of 'move')
        litArg = InsnArg.lit(literal, arg.getType());
      } else {
        // in most cases type not equal arg.getType()
        // just set unknown type and run type fixer
        litArg = InsnArg.lit(literal, ArgType.UNKNOWN);
      }
      if (useInsn.replaceArg(arg, litArg)) {
        fixTypes(mth, useInsn, litArg);
        replaceCount++;
      }
    }
    return replaceCount == use.size();
View Full Code Here

  private static void inlineMth(MethodNode mth) {
    BlockNode firstBlock = mth.getBasicBlocks().get(0);
    if (firstBlock.getInstructions().isEmpty()) {
      // synthetic field getter
      BlockNode block = mth.getBasicBlocks().get(1);
      InsnNode insn = block.getInstructions().get(0);
      // set arg from 'return' instruction
      addInlineAttr(mth, InsnNode.wrapArg(insn.getArg(0)));
    } else {
      // synthetic field setter or method invoke
      if (firstBlock.getInstructions().size() == 1) {
        addInlineAttr(mth, firstBlock.getInstructions().get(0));
      }
View Full Code Here

  private int addrChange(int addr, int addrInc, int line) {
    int newAddr = addr + addrInc;
    int maxAddr = insnByOffset.length - 1;
    newAddr = Math.min(newAddr, maxAddr);
    for (int i = addr + 1; i <= newAddr; i++) {
      InsnNode insn = insnByOffset[i];
      if (insn == null) {
        continue;
      }
      for (InsnArg arg : insn.getArguments()) {
        if (arg.isRegister()) {
          activeRegisters[((RegisterArg) arg).getRegNum()] = arg;
        }
      }
      RegisterArg res = insn.getResult();
      if (res != null) {
        activeRegisters[res.getRegNum()] = res;
      }
    }
    setSourceLines(addr, newAddr, line);
View Full Code Here

      setLine(offset, line);
    }
  }

  private void setLine(int offset, int line) {
    InsnNode insn = insnByOffset[offset];
    if (insn != null) {
      insn.setSourceLine(line);
    }
  }
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.