Java 类soot.jimple.NeExpr 实例源码
项目:JAADAS
文件:DexIfTransformer.java
/**
* Collect all the if statements comparing two locals with an Eq or Ne
* expression
*
* @param body
* the body to analyze
*/
private Set<IfStmt> getNullIfCandidates(Body body) {
Set<IfStmt> candidates = new HashSet<IfStmt>();
Iterator<Unit> i = body.getUnits().iterator();
while (i.hasNext()) {
Unit u = i.next();
if (u instanceof IfStmt) {
ConditionExpr expr = (ConditionExpr) ((IfStmt) u).getCondition();
boolean isTargetIf = false;
if (((expr instanceof EqExpr) || (expr instanceof NeExpr))) {
if (expr.getOp1() instanceof Local && expr.getOp2() instanceof Local) {
isTargetIf = true;
}
}
if (isTargetIf) {
candidates.add((IfStmt) u);
Debug.printDbg("[add if candidate: ", u);
}
}
}
return candidates;
}
项目:JAADAS
文件:NullCheckEliminator.java
public void internalTransform(Body body, String phaseName, Map<String,String> options) {
// really, the analysis should be able to use its own results to determine
// that some branches are dead, but since it doesn't we just iterate.
boolean changed;
do {
changed=false;
NullnessAnalysis analysis=analysisFactory.newAnalysis(new ExceptionalUnitGraph(body));
Chain<Unit> units=body.getUnits();
Stmt s;
for(s=(Stmt) units.getFirst();s!=null;s=(Stmt) units.getSuccOf(s)) {
if(!(s instanceof IfStmt)) continue;
IfStmt is=(IfStmt) s;
Value c=is.getCondition();
if(!(c instanceof EqExpr || c instanceof NeExpr)) continue;
BinopExpr e=(BinopExpr) c;
Immediate i=null;
if(e.getOp1() instanceof NullConstant) i=(Immediate) e.getOp2();
if(e.getOp2() instanceof NullConstant) i=(Immediate) e.getOp1();
if(i==null) continue;
boolean alwaysNull = analysis.isAlwaysNullBefore(s, i);
boolean alwaysNonNull = analysis.isAlwaysNonNullBefore(s, i);
int elim=0; // -1 => condition is false, 1 => condition is true
if(alwaysNonNull) elim=c instanceof EqExpr ? -1 : 1;
if(alwaysNull) elim=c instanceof EqExpr ? 1 : -1;
Stmt newstmt=null;
if(elim==-1) newstmt=Jimple.v().newNopStmt();
if(elim==1) newstmt=Jimple.v().newGotoStmt(is.getTarget());
if(newstmt!=null) {
units.swapWith(s,newstmt);
s=newstmt;
changed=true;
}
}
} while(changed);
}
项目:JAADAS
文件:AbstractNullTransformer.java
/**
* Examine expr if it is a comparison with 0.
*
* @param expr
* the ConditionExpr to examine
*/
protected boolean isZeroComparison(ConditionExpr expr) {
if (expr instanceof EqExpr || expr instanceof NeExpr) {
if (expr.getOp2() instanceof IntConstant
&& ((IntConstant) expr.getOp2()).value == 0)
return true;
if (expr.getOp2() instanceof LongConstant
&& ((LongConstant) expr.getOp2()).value == 0)
return true;
}
return false;
}
项目: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;
}
项目:petablox
文件:RelNeExpr.java
@Override
public void visit(Value e) {
if (e instanceof NeExpr) {
NeExpr ne = (NeExpr) e;
add(e, ne.getOp1(), ne.getOp2());
}
}
项目: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;
}
项目:jgs
文件:AnnotationValueSwitch.java
@Override
public void caseNeExpr(NeExpr v) {
rightElement = RightElement.NOT;
if (actualContext == StmtContext.ASSIGNRIGHT) {
throw new NotSupportedStmtException("NeExpr");
}
}
项目:FuzzDroid
文件:JimpleExprVisitorImpl.java
@Override
public void caseNeExpr(NeExpr v) {
throw new RuntimeException("todo");
}
项目:JAADAS
文件:ValueTemplatePrinter.java
public void caseNeExpr(NeExpr v) {
printBinaryExpr(v);
}
项目:JAADAS
文件:UseChecker.java
private void handleBinopExpr(BinopExpr be, Stmt stmt, Type tlhs)
{
Value opl = be.getOp1(), opr = be.getOp2();
Type tl = AugEvalFunction.eval_(this.tg, opl, stmt, this.jb),
tr = AugEvalFunction.eval_(this.tg, opr, stmt, this.jb);
if ( be instanceof AddExpr
|| be instanceof SubExpr
|| be instanceof MulExpr
|| be instanceof DivExpr
|| be instanceof RemExpr
|| be instanceof GeExpr
|| be instanceof GtExpr
|| be instanceof LeExpr
|| be instanceof LtExpr
|| be instanceof ShlExpr
|| be instanceof ShrExpr
|| be instanceof UshrExpr )
{
if ( tlhs instanceof IntegerType )
{
be.setOp1(this.uv.visit(opl, IntType.v(), stmt));
be.setOp2(this.uv.visit(opr, IntType.v(), stmt));
}
}
else if ( be instanceof CmpExpr
|| be instanceof CmpgExpr
|| be instanceof CmplExpr )
{
// No checks in the original assigner
}
else if ( be instanceof AndExpr
|| be instanceof OrExpr
|| be instanceof XorExpr )
{
be.setOp1(this.uv.visit(opl, tlhs, stmt));
be.setOp2(this.uv.visit(opr, tlhs, stmt));
}
else if ( be instanceof EqExpr
|| be instanceof NeExpr )
{
if ( tl instanceof BooleanType && tr instanceof BooleanType )
{ }
else if ( tl instanceof Integer1Type || tr instanceof Integer1Type )
{ }
else if ( tl instanceof IntegerType )
{
be.setOp1(this.uv.visit(opl, IntType.v(), stmt));
be.setOp2(this.uv.visit(opr, IntType.v(), stmt));
}
}
}
项目:JAADAS
文件:ExprVisitor.java
@Override
public void caseNeExpr(NeExpr ne) {
stmtV.addInsn(buildComparingBinaryInsn("NE", ne.getOp1(), ne.getOp2()), origStmt);
}
项目:JAADAS
文件:UnitThrowAnalysis.java
public void caseNeExpr(NeExpr expr) {
caseBinopExpr(expr);
}
项目:bixie
文件:SootValueSwitch.java
@Override
public void caseNeExpr(NeExpr arg0) {
translateBinOp(arg0);
}
项目:jar2bpl
文件:SootValueSwitch.java
@Override
public void caseNeExpr(NeExpr arg0) {
translateBinOp(arg0);
}
项目:jgs
文件:AnnotationValueSwitch.java
/**
* DOC
*
* @see soot.jimple.ExprSwitch#caseNeExpr(soot.jimple.NeExpr)
*/
@Override
public void caseNeExpr(NeExpr v) {
v.getOp1().apply(this);
v.getOp2().apply(this);
}
项目:jgs
文件:SecurityConstraintValueWriteSwitch.java
@Override
public void caseNeExpr(NeExpr v) {
throwInvalidWriteException(v);
}
项目:jgs
文件:SecurityConstraintValueReadSwitch.java
@Override
public void caseNeExpr(NeExpr v) {
handleBinaryExpr(v.getOp1(), v.getOp2());
}
项目:jgs
文件:SecurityLevelValueWriteSwitch.java
/**
* The method should update the <em>security level</em> of a {@link NeExpr},
* but it is not possible to update the level of an expression.
*
* @param v
* The expression for which the <em>security level</em> should be
* updated.
* @see soot.jimple.ExprSwitch#caseNeExpr(soot.jimple.NeExpr)
* @throws InvalidSwitchException
* Always, because the update is not possible.
*/
@Override
public void caseNeExpr(NeExpr v) {
throw new SwitchException(getMsg("exception.analysis.switch.update_error",
this.getClass().getSimpleName(),
v.getClass().getSimpleName(),
v.toString(),
getSourceLine()));
}
项目:jgs
文件:SecurityLevelValueReadSwitch.java
/**
* Looks up the <em>security level</em> for the given binary expression and
* stores the level in {@link SecurityLevelValueReadSwitch#level}. For a
* {@link NeExpr} this is the strongest operand <em>security level</em> of
* the given binary expression.
*
* @param v
* The expression for which the <em>security level</em> should be
* looked up.
* @see soot.jimple.ExprSwitch#caseNeExpr(soot.jimple.NeExpr)
* @see SecurityLevelValueReadSwitch#handleBinaryOperation(BinopExpr)
*/
@Override
public void caseNeExpr(NeExpr v) {
handleBinaryOperation(v);
}