本文整理了Java中soot.Body.getParameterLocal()
方法的一些代码示例,展示了Body.getParameterLocal()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Body.getParameterLocal()
方法的具体详情如下:
包路径:soot.Body
类名称:Body
方法名:getParameterLocal
[英]Return LHS of the first identity stmt assigning from @parameter i.
[中]返回从@参数i分配的第一个标识stmt的LHS。
代码示例来源:origin: Sable/soot
@Override
public FlowFunction<Value> getReturnFlowFunction(final Unit callSite, SootMethod calleeMethod, final Unit exitStmt,
Unit returnSite) {
Stmt s = (Stmt) callSite;
InvokeExpr ie = s.getInvokeExpr();
final List<Value> callArgs = ie.getArgs();
final List<Local> paramLocals = new ArrayList<Local>();
for (int i = 0; i < calleeMethod.getParameterCount(); i++) {
paramLocals.add(calleeMethod.getActiveBody().getParameterLocal(i));
}
return new FlowFunction<Value>() {
public Set<Value> computeTargets(Value source) {
Set<Value> liveParamsAtCallee = new HashSet<Value>();
for (int i = 0; i < paramLocals.size(); i++) {
if (paramLocals.get(i).equivTo(source)) {
liveParamsAtCallee.add(callArgs.get(i));
}
}
return liveParamsAtCallee;
}
};
}
代码示例来源:origin: Sable/soot
public FlowFunction<Pair<Value, Type>> getCallFlowFunction(final Unit src, final SootMethod dest) {
Stmt stmt = (Stmt) src;
InvokeExpr ie = stmt.getInvokeExpr();
final List<Value> callArgs = ie.getArgs();
final List<Local> paramLocals = new ArrayList<Local>();
for (int i = 0; i < dest.getParameterCount(); i++) {
paramLocals.add(dest.getActiveBody().getParameterLocal(i));
}
return new FlowFunction<Pair<Value, Type>>() {
public Set<Pair<Value, Type>> computeTargets(Pair<Value, Type> source) {
if (!dest.getName().equals("<clinit>") && !dest.getSubSignature().equals("void run()")) {
Value value = source.getO1();
int argIndex = callArgs.indexOf(value);
if (argIndex > -1) {
return Collections.singleton(new Pair<Value, Type>(paramLocals.get(argIndex), source.getO2()));
}
}
return Collections.emptySet();
}
};
}
代码示例来源:origin: Sable/soot
@Override
public FlowFunction<Local> getCallFlowFunction(Unit src, final SootMethod dest) {
Stmt s = (Stmt) src;
InvokeExpr ie = s.getInvokeExpr();
final List<Value> callArgs = ie.getArgs();
final List<Local> paramLocals = new ArrayList<Local>();
for (int i = 0; i < dest.getParameterCount(); i++) {
paramLocals.add(dest.getActiveBody().getParameterLocal(i));
}
return new FlowFunction<Local>() {
public Set<Local> computeTargets(Local source) {
// ignore implicit calls to static initializers
if (dest.getName().equals(SootMethod.staticInitializerName) && dest.getParameterCount() == 0) {
return Collections.emptySet();
}
Set<Local> taintsInCaller = new HashSet<Local>();
for (int i = 0; i < callArgs.size(); i++) {
if (callArgs.get(i).equivTo(source)) {
taintsInCaller.add(paramLocals.get(i));
}
}
return taintsInCaller;
}
};
}
代码示例来源:origin: Sable/soot
if (sm.getActiveBody().getParameterLocal(i) == l) {
代码示例来源:origin: edu.psu.cse.siis/coal
paramLocals.add(dest.getActiveBody().getParameterLocal(i));
代码示例来源:origin: secure-software-engineering/FlowDroid
/**
* Gets the parameter index to which the given access path refers
*
* @param sm The method in which to check the parameter locals
* @param curAP The access path
* @return The parameter index to which the given access path refers if it
* exists. Otherwise, if the given access path does not refer to a
* parameter, -1 is returned.
*/
private int getParameterIndex(SootMethod sm, AccessPath curAP) {
if (curAP.isStaticFieldRef())
return -1;
for (int i = 0; i < sm.getParameterCount(); i++)
if (curAP.getPlainValue() == sm.getActiveBody().getParameterLocal(i))
return i;
return -1;
}
代码示例来源:origin: secure-software-engineering/FlowDroid
@Override
public Local[] load(SootMethod method) throws Exception {
if (!method.isConcrete() || !method.hasActiveBody())
return new Local[0];
List<Local> lcs = new ArrayList<Local>(method.getParameterCount() + (method.isStatic() ? 0 : 1));
for (Unit u : method.getActiveBody().getUnits())
useBox: for (ValueBox vb : u.getUseBoxes()) {
// Check for parameters
for (int i = 0; i < method.getParameterCount(); i++) {
if (method.getActiveBody().getParameterLocal(i) == vb.getValue()) {
lcs.add((Local) vb.getValue());
continue useBox;
}
}
}
// Add the "this" local
if (!method.isStatic())
lcs.add(method.getActiveBody().getThisLocal());
return lcs.toArray(new Local[lcs.size()]);
}
});
代码示例来源:origin: secure-software-engineering/FlowDroid
@Override
public void injectCode(Body body, Local messageLocal) {
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldWhat.makeRef()),
body.getParameterLocal(1)));
}
代码示例来源:origin: secure-software-engineering/FlowDroid
@Override
public void injectCode(Body body, Local messageLocal) {
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldWhat.makeRef()),
body.getParameterLocal(1)));
body.getUnits().add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldObj.makeRef()), body.getParameterLocal(2)));
}
代码示例来源:origin: secure-software-engineering/FlowDroid
@Override
public void injectCode(Body body, Local messageLocal) {
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldWhat.makeRef()),
body.getParameterLocal(1)));
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldArg1.makeRef()),
body.getParameterLocal(2)));
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldArg2.makeRef()),
body.getParameterLocal(3)));
}
代码示例来源:origin: secure-software-engineering/FlowDroid
@Override
public void injectCode(Body body, Local messageLocal) {
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldWhat.makeRef()),
body.getParameterLocal(1)));
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldArg1.makeRef()),
body.getParameterLocal(2)));
body.getUnits()
.add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldArg2.makeRef()),
body.getParameterLocal(3)));
body.getUnits().add(Jimple.v().newAssignStmt(
Jimple.v().newInstanceFieldRef(messageLocal, fldObj.makeRef()), body.getParameterLocal(4)));
}
代码示例来源:origin: rohanpadhye/vasco
@Override
public Map<Local, Constant> callEntryFlowFunction(Context<SootMethod, Unit, Map<Local, Constant>> context, SootMethod calledMethod, Unit unit, Map<Local, Constant> inValue) {
// Initialise result to empty map
Map<Local, Constant> entryValue = topValue();
// Map arguments to parameters
InvokeExpr ie = ((Stmt) unit).getInvokeExpr();
for (int i = 0; i < ie.getArgCount(); i++) {
Value arg = ie.getArg(i);
Local param = calledMethod.getActiveBody().getParameterLocal(i);
assign(param, arg, inValue, entryValue);
}
// And instance of the this local
if (ie instanceof InstanceInvokeExpr) {
Value instance = ((InstanceInvokeExpr) ie).getBase();
Local thisLocal = calledMethod.getActiveBody().getThisLocal();
assign(thisLocal, instance, inValue, entryValue);
}
// Return the entry value at the called method
return entryValue;
}
代码示例来源:origin: rohanpadhye/vasco
@Override
public Map<Local, SignAnalysis.Sign> callEntryFlowFunction(
Context<SootMethod, Unit, Map<Local, SignAnalysis.Sign>> context, SootMethod calledMethod, Unit unit,
Map<Local, SignAnalysis.Sign> inValue) {
// Initialise result to empty map
Map<Local, SignAnalysis.Sign> entryValue = topValue();
// Map arguments to parameters
InvokeExpr ie = ((Stmt) unit).getInvokeExpr();
for (int i = 0; i < ie.getArgCount(); i++) {
Value arg = ie.getArg(i);
Local param = calledMethod.getActiveBody().getParameterLocal(i);
assign(param, arg, inValue, entryValue);
}
// And instance of the this local
if (ie instanceof InstanceInvokeExpr) {
Value instance = ((InstanceInvokeExpr) ie).getBase();
Local thisLocal = calledMethod.getActiveBody().getThisLocal();
assign(thisLocal, instance, inValue, entryValue);
}
// Return the entry value at the called method
return entryValue;
}
代码示例来源:origin: secure-software-engineering/FlowDroid
/**
* Converts a taint into an access path that is valid inside a given method.
* This models that a taint is propagated into the method and from there on in
* normal IFDS.
*
* @param t The taint to convert
* @param sm The method in which the access path shall be created
* @return The access path derived from the given taint and method
*/
private AccessPath createAccessPathInMethod(Taint t, SootMethod sm) {
// Convert the taints to Soot objects
SootField[] fields = safeGetFields(t.getAccessPath());
Type[] types = safeGetTypes(t.getAccessPathTypes(), fields);
Type baseType = TypeUtils.getTypeFromString(t.getBaseType());
// A return value cannot be propagated into a method
if (t.isReturn())
throw new RuntimeException("Unsupported taint type");
if (t.isParameter()) {
Local l = sm.getActiveBody().getParameterLocal(t.getParameterIndex());
return manager.getAccessPathFactory().createAccessPath(l, fields, baseType, types, true, false, true,
ArrayTaintType.ContentsAndLength);
}
if (t.isField() || t.isGapBaseObject()) {
Local l = sm.getActiveBody().getThisLocal();
return manager.getAccessPathFactory().createAccessPath(l, fields, baseType, types, true, false, true,
ArrayTaintType.ContentsAndLength);
}
throw new RuntimeException("Failed to convert taint " + t);
}
代码示例来源:origin: secure-software-engineering/FlowDroid
if (isConstant[i] && propagatedParameters.add(new Pair<>(sm, i))) {
Local paramLocal = sm.getActiveBody().getParameterLocal(i);
Unit point = getFirstNonIdentityStmt(sm);
Unit assignConst = Jimple.v().newAssignStmt(paramLocal, values[i]);
代码示例来源:origin: rohanpadhye/vasco
/**
* Returns a points-to graph with the locals of main initialised to
* <tt>null</tt>, except the command-line arguments which are
* initialised to an array of strings.
*/
@Override
public PointsToGraph boundaryValue(SootMethod entryPoint) {
// For now we only support entry to the main method
assert(entryPoint == Scene.v().getMainMethod());
// Ok, start setting up entry value
PointsToGraph entryValue = new PointsToGraph();
// Locals of main... (only reference types)
SootMethod mainMethod = Scene.v().getMainMethod();
for (Local local : mainMethod.getActiveBody().getLocals()) {
if (local.getType() instanceof RefLikeType) {
entryValue.assign(local, null);
}
}
// Command-line arguments to main...
Local argsLocal = mainMethod.getActiveBody().getParameterLocal(0);
NewArrayExpr argsExpr = new JNewArrayExpr(Scene.v().getRefType("java.lang.String"), IntConstant.v(0));
entryValue.assignNew(argsLocal, argsExpr);
entryValue.setFieldConstant(argsLocal, PointsToGraph.ARRAY_FIELD, PointsToGraph.STRING_CONST);
return entryValue;
}
代码示例来源:origin: secure-software-engineering/soot-infoflow
if (parameterTaintMethods.contains(currentMethod))
targetAP = manager.getAccessPathFactory().createAccessPath(currentMethod.getActiveBody()
.getParameterLocal(pref.getIndex()), true);
代码示例来源:origin: secure-software-engineering/FlowDroid
|| apAtReturn.getBaseType() instanceof ArrayType)
for (int i = 0; i < m.getParameterCount(); i++) {
Local p = m.getActiveBody().getParameterLocal(i);
if (apAtReturn.getPlainValue() == p) {
FlowSink sink = sourceSinkFactory.createParameterSink(i, apAtReturn);
代码示例来源:origin: secure-software-engineering/FlowDroid
if (parameterTaintMethods != null && parameterTaintMethods.contains(currentMethod))
targetAP = manager.getAccessPathFactory()
.createAccessPath(currentMethod.getActiveBody().getParameterLocal(pref.getIndex()), true);
代码示例来源:origin: secure-software-engineering/FlowDroid
for (int i = 0; i < callSite.getInvokeExpr().getArgCount(); i++) {
if (callSite.getInvokeExpr().getArg(i) == curAP.getPlainValue()) {
Local paramLocal = callee.getActiveBody().getParameterLocal(i);
return manager.getAccessPathFactory().copyWithNewValue(curAP, paramLocal);
SootMethod curMethod = manager.getICFG().getMethodOf(stmt);
for (int i = 0; i < callSite.getInvokeExpr().getArgCount(); i++) {
Local paramLocal = curMethod.getActiveBody().getParameterLocal(i);
if (paramLocal == curAP.getPlainValue()) {
return manager.getAccessPathFactory().copyWithNewValue(curAP, callSite.getInvokeExpr().getArg(i),
内容来源于网络,如有侵权,请联系作者删除!