Java 类soot.jimple.internal.JEqExpr 实例源码

项目:cheetah    文件:AndroidEntryPointCreatorJIT.java   
private void createIfStmt(Unit target, Body body) {
    if (target == null) {
        return;
    }
    JEqExpr cond = new JEqExpr(intCounter, IntConstant.v(conditionCounter++));
    JIfStmt ifStmt = new JIfStmt(cond, target);
    body.getUnits().add(ifStmt);
}
项目:JAADAS    文件:AndroidEntryPointCreator.java   
private void createIfStmt(Unit target){
    if(target == null){
        return;
    }
    JEqExpr cond = new JEqExpr(intCounter, IntConstant.v(conditionCounter++));
    JIfStmt ifStmt = new JIfStmt(cond, target);
    body.getUnits().add(ifStmt);
}
项目:JAADAS    文件:NullnessAnalysis.java   
private void handleIfStmt(JIfStmt ifStmt, AnalysisInfo in, AnalysisInfo out, AnalysisInfo outBranch) {
    Value condition = ifStmt.getCondition();
    if(condition instanceof JInstanceOfExpr) {
        //a instanceof X ; if this succeeds, a is not null
        JInstanceOfExpr expr = (JInstanceOfExpr) condition;
        handleInstanceOfExpression(expr, in, out, outBranch);
    } else if(condition instanceof JEqExpr || condition instanceof JNeExpr) {
        //a==b or a!=b
        AbstractBinopExpr eqExpr = (AbstractBinopExpr) condition;
        handleEqualityOrNonEqualityCheck(eqExpr, in, out, outBranch);
    }       
}
项目:JAADAS    文件:NullnessAnalysis.java   
private void handleEqualityOrNonEqualityCheck(AbstractBinopExpr eqExpr, AnalysisInfo in,
        AnalysisInfo out, AnalysisInfo outBranch) {
    Value left = eqExpr.getOp1();
    Value right = eqExpr.getOp2();

    Value val=null;
    if(left==NullConstant.v()) {
        if(right!=NullConstant.v()) {
            val = right;
        }
    } else if(right==NullConstant.v()) {
        if(left!=NullConstant.v()) {
            val = left;
        }
    }

    //if we compare a local with null then process further...
    if(val!=null && val instanceof Local) {
        if(eqExpr instanceof JEqExpr)
            //a==null
            handleEquality(val, out, outBranch);
        else if(eqExpr instanceof JNeExpr)
            //a!=null
            handleNonEquality(val, out, outBranch);
        else
            throw new IllegalStateException("unexpected condition: "+eqExpr.getClass());
    }
}
项目:bixie    文件:SootBodyTransformer.java   
private Value normalizeNegations(Value v) {
    if (v instanceof NegExpr) {
        return ((NegExpr)v).getOp();
    } else if (v instanceof BinopExpr) {
        BinopExpr bo = (BinopExpr)v;
        if (bo instanceof NeExpr) {
            return new JEqExpr(bo.getOp1(), bo.getOp2());
        }
    }
    return v;
}
项目:jar2bpl    文件:SootBodyTransformer.java   
private Value normalizeNegations(Value v) {
    if (v instanceof NegExpr) {
        return ((NegExpr)v).getOp();
    } else if (v instanceof BinopExpr) {
        BinopExpr bo = (BinopExpr)v;
        if (bo instanceof NeExpr) {
            return new JEqExpr(bo.getOp1(), bo.getOp2());
        }
    }
    return v;
}
项目:soot-inflow    文件:AndroidEntryPointCreator.java   
private void createIfStmt(Unit target){
    if(target == null){
        return;
    }
    JEqExpr cond = new JEqExpr(intCounter, IntConstant.v(conditionCounter++));
    JIfStmt ifStmt = new JIfStmt(cond, target);
    body.getUnits().add(ifStmt);
}
项目:JAADAS    文件:DefaultEntryPointCreator.java   
@Override
protected SootMethod createDummyMainInternal(SootMethod mainMethod) {
    Map<String, Set<String>> classMap =
            SootMethodRepresentationParser.v().parseClassNames(methodsToCall, false);

    // create new class:
    Body body = mainMethod.getActiveBody();
        LocalGenerator generator = new LocalGenerator(body);
    HashMap<String, Local> localVarsForClasses = new HashMap<String, Local>();

    // create constructors:
    for(String className : classMap.keySet()){
        SootClass createdClass = Scene.v().forceResolve(className, SootClass.BODIES);
        createdClass.setApplicationClass();

        Local localVal = generateClassConstructor(createdClass, body);
        if (localVal == null) {
            logger.warn("Cannot generate constructor for class: {}", createdClass);
            continue;
        }
        localVarsForClasses.put(className, localVal);
    }

    // add entrypoint calls
    int conditionCounter = 0;
    JNopStmt startStmt = new JNopStmt();
    JNopStmt endStmt = new JNopStmt();
    Value intCounter = generator.generateLocal(IntType.v());
    body.getUnits().add(startStmt);
    for (Entry<String, Set<String>> entry : classMap.entrySet()){
        Local classLocal = localVarsForClasses.get(entry.getKey());
        for (String method : entry.getValue()){
            SootMethodAndClass methodAndClass =
                    SootMethodRepresentationParser.v().parseSootMethodString(method);
            SootMethod currentMethod = findMethod(Scene.v().getSootClass(methodAndClass.getClassName()),
                    methodAndClass.getSubSignature());
            if (currentMethod == null) {
                logger.warn("Entry point not found: {}", method);
                continue;
            }

            JEqExpr cond = new JEqExpr(intCounter, IntConstant.v(conditionCounter));
            conditionCounter++;
            JNopStmt thenStmt = new JNopStmt();
            JIfStmt ifStmt = new JIfStmt(cond, thenStmt);
            body.getUnits().add(ifStmt);
            buildMethodCall(currentMethod, body, classLocal, generator);
            body.getUnits().add(thenStmt);
        }
    }
    body.getUnits().add(endStmt);
    JGotoStmt gotoStart = new JGotoStmt(startStmt);
    body.getUnits().add(gotoStart);

    body.getUnits().add(Jimple.v().newReturnVoidStmt());
    NopEliminator.v().transform(body);
    eliminateSelfLoops(body);
    return mainMethod;
}
项目:soot-inflow    文件:DefaultEntryPointCreator.java   
/**
 * Soot requires a main method, so we create a dummy method which calls all entry functions.
 * 
 * @param classMap
 *            the methods to call (signature as String)
 * @param createdClass
 *            the class which contains the methods
 * @return list of entryPoints
 */
@Override
protected SootMethod createDummyMainInternal(List<String> methods) {
    Map<String, List<String>> classMap =
            SootMethodRepresentationParser.v().parseClassNames(methods, false);

    // create new class:
        JimpleBody body = Jimple.v().newBody();
        SootMethod mainMethod = createEmptyMainMethod(body);

        LocalGenerator generator = new LocalGenerator(body);
    HashMap<String, Local> localVarsForClasses = new HashMap<String, Local>();

    // create constructors:
    for(String className : classMap.keySet()){
        SootClass createdClass = Scene.v().forceResolve(className, SootClass.BODIES);
        createdClass.setApplicationClass();

        Local localVal = generateClassConstructor(createdClass, body);
        if (localVal == null) {
            logger.warn("Cannot generate constructor for class: {}", createdClass);
            continue;
        }
        localVarsForClasses.put(className, localVal);
    }

    // add entrypoint calls
    int conditionCounter = 0;
    JNopStmt startStmt = new JNopStmt();
    JNopStmt endStmt = new JNopStmt();
    Value intCounter = generator.generateLocal(IntType.v());
    body.getUnits().add(startStmt);
    for (Entry<String, List<String>> entry : classMap.entrySet()){
        Local classLocal = localVarsForClasses.get(entry.getKey());
        for (String method : entry.getValue()){
            SootMethodAndClass methodAndClass =
                    SootMethodRepresentationParser.v().parseSootMethodString(method);
            SootMethod currentMethod = findMethod(Scene.v().getSootClass(methodAndClass.getClassName()),
                    methodAndClass.getSubSignature());
            if (currentMethod == null) {
                logger.warn("Entry point not found: {}", method);
                continue;
            }

            JEqExpr cond = new JEqExpr(intCounter, IntConstant.v(conditionCounter));
            conditionCounter++;
            JNopStmt thenStmt = new JNopStmt();
            JIfStmt ifStmt = new JIfStmt(cond, thenStmt);
            body.getUnits().add(ifStmt);
            buildMethodCall(currentMethod, body, classLocal, generator);
            body.getUnits().add(thenStmt);
        }
    }
    body.getUnits().add(endStmt);
    JGotoStmt gotoStart = new JGotoStmt(startStmt);
    body.getUnits().add(gotoStart);

    body.getUnits().add(Jimple.v().newReturnVoidStmt());
    return mainMethod;
}