Package jadx.core.dex.instructions.args

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


      }

      case PHI: {
        PhiInsn phi = (PhiInsn) insn;
        RegisterArg result = phi.getResult();
        SSAVar resultSVar = result.getSVar();
        if (resultSVar != null && !result.getType().isTypeKnown()) {
          for (InsnArg arg : phi.getArguments()) {
            ArgType argType = arg.getType();
            if (argType.isTypeKnown()) {
              resultSVar.setType(argType);
              return true;
            }
          }
        }
        return false;
View Full Code Here


      while (it.hasPrevious()) {
        RegisterArg arg = it.previous();
//        if (arg.getName() != null) {
//          continue;
//        }
        SSAVar sVar = arg.getSVar();
        // allow inline only one use arg or 'this'
        if (sVar.getVariableUseCount() != 1 && !arg.isThis()) {
          continue;
        }
        InsnNode assignInsn = sVar.getAssign().getParentInsn();
        if (assignInsn == null || assignInsn.contains(AFlag.DONT_INLINE)) {
          continue;
        }
        int assignPos = insnList.getIndex(assignInsn);
        if (assignPos != -1) {
View Full Code Here

      if (insn.getType() != InsnType.PHI) {
        for (InsnArg arg : insn.getArguments()) {
          if (arg.isRegister()) {
            RegisterArg reg = (RegisterArg) arg;
            int regNum = reg.getRegNum();
            SSAVar var = vars[regNum];
            if (var == null) {
              var = mth.makeNewSVar(regNum, vers, null);
              vars[regNum] = var;
            }
            var.use(reg);
          }
        }
      }
      RegisterArg result = insn.getResult();
      if (result != null) {
        int regNum = result.getRegNum();
        vars[regNum] = mth.makeNewSVar(regNum, vers, result);
      }
    }
    for (BlockNode s : block.getSuccessors()) {
      PhiListAttr phiList = s.get(AType.PHI_LIST);
      if (phiList != null) {
        int j = s.getPredecessors().indexOf(block);
        if (j == -1) {
          throw new JadxRuntimeException("Can't find predecessor for " + block + " " + s);
        }
        for (PhiInsn phiInsn : phiList.getList()) {
          if (j >= phiInsn.getArgsCount()) {
            continue;
          }
          int regNum = phiInsn.getResult().getRegNum();
          SSAVar var = vars[regNum];
          if (var == null) {
            var = mth.makeNewSVar(regNum, vers, null);
            vars[regNum] = var;
          }
          var.use(phiInsn.getArg(j));
          var.setUsedInPhi(phiInsn);
        }
      }
    }
    for (BlockNode domOn : block.getDominatesOn()) {
      renameVar(mth, vars, vers, domOn);
View Full Code Here

    if (phi.getArgsCount() <= 1) {
      insnToRemove.add(phi);
      return;
    }
    boolean allSame = true;
    SSAVar var = phi.getArg(0).getSVar();
    for (int i = 1; i < phi.getArgsCount(); i++) {
      if (var != phi.getArg(i).getSVar()) {
        allSame = false;
        break;
      }
    }
    if (allSame) {
      // replace
      insnToRemove.add(phi);
      SSAVar assign = phi.getResult().getSVar();
      for (RegisterArg arg : new ArrayList<RegisterArg>(assign.getUseList())) {
        assign.removeUse(arg);
        var.use(arg);
      }
    }
  }
View Full Code Here

  public int getDebugInfoOffset() {
    return debugInfoOffset;
  }

  public SSAVar makeNewSVar(int regNum, int[] versions, @NotNull RegisterArg arg) {
    SSAVar var = new SSAVar(regNum, versions[regNum], arg);
    versions[regNum]++;
    if (sVars.isEmpty()) {
      sVars = new ArrayList<SSAVar>();
    }
    sVars.add(var);
View Full Code Here

    if (!arg.isLiteral()) {
      return false;
    }
    long lit = ((LiteralArg) arg).getLiteral();

    SSAVar sVar = insn.getResult().getSVar();
    if (lit == 0) {
      if (checkObjectInline(sVar)) {
        if (sVar.getUseCount() == 1) {
          insn.getResult().getAssignInsn().add(AFlag.DONT_INLINE);
        }
        return false;
      }
View Full Code Here

  private static void merge(InsnArg arg, LocalVar var) {
    if (arg != null && arg.isRegister()) {
      RegisterArg reg = (RegisterArg) arg;
      if (var.getRegNum() == reg.getRegNum()) {
        SSAVar ssaVar = reg.getSVar();

        boolean mergeRequired = false;

        if (ssaVar != null) {
          int ssaEnd = ssaVar.getEndAddr();
          int ssaStart = ssaVar.getStartAddr();
          int localStart = var.getStartAddr();
          int localEnd = var.getEndAddr();

          boolean isIntersected = !((localEnd < ssaStart) || (ssaEnd < localStart));
          if (isIntersected && (ssaEnd <= localEnd)) {
View Full Code Here

    InsnArg condArg = incrInsn.getArg(0);
    if (!condArg.isRegister()) {
      return null;
    }
    SSAVar sVar = ((RegisterArg) condArg).getSVar();
    List<RegisterArg> args = sVar.getUseList();
    if (args.size() != 3 || args.get(2) != condArg) {
      return null;
    }
    condArg = args.get(0);
    RegisterArg arrIndex = args.get(1);
View Full Code Here

    List<RegisterArg> condArgs = condition.getRegisterArgs();
    if (condArgs.size() != 1) {
      return false;
    }
    RegisterArg iteratorArg = condArgs.get(0);
    SSAVar sVar = iteratorArg.getSVar();
    if (sVar == null || sVar.isUsedInPhi()) {
      return false;
    }
    List<RegisterArg> useList = sVar.getUseList();
    InsnNode assignInsn = iteratorArg.getAssignInsn();
    if (useList.size() != 2
        || assignInsn == null
        || !checkInvoke(assignInsn, null, "iterator()Ljava/util/Iterator;", 0)) {
      return false;
View Full Code Here

  }

  public static void unbindArgUsage(MethodNode mth, InsnArg arg) {
    if (arg instanceof RegisterArg) {
      RegisterArg reg = (RegisterArg) arg;
      SSAVar sVar = reg.getSVar();
      if (sVar != null) {
        sVar.removeUse(reg);
      }
    } else if (arg instanceof InsnWrapArg) {
      InsnWrapArg wrap = (InsnWrapArg) arg;
      unbindInsn(mth, wrap.getWrapInsn());
    }
View Full Code Here

TOP

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

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.