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;
}