Package jadx.core.dex.nodes

Examples of jadx.core.dex.nodes.InsnNode


    InsnArg enumArg = mapInfo.getArg();
    FieldNode field = mapInfo.getMapField();
    if (field == null || !enumArg.isInsnWrap()) {
      return;
    }
    InsnNode sget = ((InsnWrapArg) enumArg).getWrapInsn();
    if (!(sget instanceof IndexInsnNode)) {
      return;
    }
    Object index = ((IndexInsnNode) sget).getIndex();
    if (!(index instanceof FieldInfo)) {
View Full Code Here


    InsnArg sgetArg = checkInsn.getArg(0);
    InsnArg invArg = checkInsn.getArg(1);
    if (!sgetArg.isInsnWrap() || !invArg.isInsnWrap()) {
      return null;
    }
    InsnNode invInsn = ((InsnWrapArg) invArg).getWrapInsn();
    InsnNode sgetInsn = ((InsnWrapArg) sgetArg).getWrapInsn();
    if (invInsn.getType() != InsnType.INVOKE || sgetInsn.getType() != InsnType.SGET) {
      return null;
    }
    InvokeNode inv = (InvokeNode) invInsn;
    if (!inv.getCallMth().getShortId().equals("ordinal()I")) {
      return null;
View Full Code Here

      return true;
    }
    IfNode ifInsn = getIfInsn();
    int size = insns.size();
    for (int i = 0; i < size; i++) {
      InsnNode insn = insns.get(i);
      if (insn.getResult() == null) {
        return false;
      }
      RegisterArg res = insn.getResult();
      if (res.getSVar().getUseCount() > 1) {
        return false;
      }
      boolean found = false;
      // search result arg in other insns
View Full Code Here

      return;
    }
    if (!c.getB().isLiteral() || ((LiteralArg) c.getB()).getLiteral() != 0) {
      return;
    }
    InsnNode wrapInsn = ((InsnWrapArg) c.getA()).getWrapInsn();
    InsnType type = wrapInsn.getType();
    if (type != InsnType.CMP_L && type != InsnType.CMP_G) {
      return;
    }
    IfNode insn = c.getInsn();
    insn.changeCondition(insn.getOp(), wrapInsn.getArg(0), wrapInsn.getArg(1));
  }
View Full Code Here

    String code = cls.getCode().toString();
    assertThat(code, containsString("return (int[]) o;"));

    List<InsnNode> insns = mth.getBasicBlocks().get(1).getInstructions();
    assertEquals(insns.size(), 1);
    InsnNode insnNode = insns.get(0);
    assertEquals(InsnType.RETURN, insnNode.getType());
    assertTrue(insnNode.getArg(0).isInsnWrap());
    InsnNode wrapInsn = ((InsnWrapArg) insnNode.getArg(0)).getWrapInsn();
    assertEquals(InsnType.CHECK_CAST, wrapInsn.getType());
    assertFalse(wrapInsn.getArg(0).isInsnWrap());
  }
View Full Code Here

  public static void remove(MethodNode mth, BlockNode block, InsnNode insn) {
    unbindInsn(mth, insn);
    // remove by pointer (don't use equals)
    Iterator<InsnNode> it = block.getInstructions().iterator();
    while (it.hasNext()) {
      InsnNode ir = it.next();
      if (ir == insn) {
        it.remove();
        return;
      }
    }
View Full Code Here

  public static boolean checkLastInsnType(BlockNode block, InsnType expectedType) {
    List<InsnNode> insns = block.getInstructions();
    if (insns.isEmpty()) {
      return false;
    }
    InsnNode insn = insns.get(insns.size() - 1);
    return insn.getType() == expectedType;
  }
View Full Code Here

  }

  private static InsnArg foundWrappedInsn(InsnNode container, InsnNode insn) {
    for (InsnArg arg : container.getArguments()) {
      if (arg.isInsnWrap()) {
        InsnNode wrapInsn = ((InsnWrapArg) arg).getWrapInsn();
        if (wrapInsn == insn) {
          return arg;
        }
        InsnArg res = foundWrappedInsn(wrapInsn, insn);
        if (res != null) {
View Full Code Here

      return false;
    }
    if (!lastArg.getType().isArray() || !lastArg.isInsnWrap()) {
      return false;
    }
    InsnNode insn = ((InsnWrapArg) lastArg).getWrapInsn();
    if (insn.getType() == InsnType.FILLED_NEW_ARRAY) {
      int count = insn.getArgsCount();
      for (int i = 0; i < count; i++) {
        InsnArg elemArg = insn.getArg(i);
        addArg(code, elemArg, false);
        if (i < count - 1) {
          code.add(", ");
        }
      }
      return true;
    } else if (insn.getType() == InsnType.FILL_ARRAY) {
      code.add(makeArrayElements((FillArrayNode) insn));
      return true;
    }
    return false;
  }
View Full Code Here

  private boolean inlineMethod(MethodNode callMthNode, InvokeNode insn, CodeWriter code) throws CodegenException {
    MethodInlineAttr mia = callMthNode.get(AType.METHOD_INLINE);
    if (mia == null) {
      return false;
    }
    InsnNode inl = mia.getInsn();
    if (callMthNode.getMethodInfo().getArgumentsTypes().isEmpty()) {
      makeInsn(inl, code, Flags.BODY_ONLY);
    } else {
      // remap args
      InsnArg[] regs = new InsnArg[callMthNode.getRegsCount()];
      List<RegisterArg> callArgs = callMthNode.getArguments(true);
      for (int i = 0; i < callArgs.size(); i++) {
        InsnArg arg = insn.getArg(i);
        RegisterArg callArg = callArgs.get(i);
        regs[callArg.getRegNum()] = arg;
      }
      // replace args
      List<RegisterArg> inlArgs = new ArrayList<RegisterArg>();
      inl.getRegisterArgs(inlArgs);
      Map<RegisterArg, InsnArg> toRevert = new HashMap<RegisterArg, InsnArg>();
      for (RegisterArg r : inlArgs) {
        int regNum = r.getRegNum();
        if (regNum >= regs.length) {
          LOG.warn("Unknown register number {} in method call: {} from {}", r, callMthNode, mth);
        } else {
          InsnArg repl = regs[regNum];
          if (repl == null) {
            LOG.warn("Not passed register {} in method call: {} from {}", r, callMthNode, mth);
          } else {
            inl.replaceArg(r, repl);
            toRevert.put(r, repl);
          }
        }
      }
      makeInsn(inl, code, Flags.BODY_ONLY);
      // revert changes in 'MethodInlineAttr'
      for (Map.Entry<RegisterArg, InsnArg> e : toRevert.entrySet()) {
        inl.replaceArg(e.getValue(), e.getKey());
      }
    }
    return true;
  }
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.