本文整理了Java中soot.Body.getLocals()
方法的一些代码示例,展示了Body.getLocals()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Body.getLocals()
方法的具体详情如下:
包路径:soot.Body
类名称:Body
方法名:getLocals
[英]Returns a backed chain of the locals declared in this Body.
[中]
代码示例来源:origin: Sable/soot
private Local getLocalUnsafe(Body b, String name) {
for (Local local : b.getLocals()) {
if (local.getName().equals(name)) {
return local;
}
}
return null;
}
代码示例来源:origin: Sable/soot
private void retrieveAllArrayLocals(Body body, Set<Local> container) {
for (Local local : body.getLocals()) {
Type type = local.getType();
if (type instanceof IntType || type instanceof ArrayType) {
container.add(local);
}
}
}
代码示例来源:origin: Sable/soot
/**
* Gets all variables that are not used in this body
*
* @return The list of variables declared, but not used in this body
*/
public Set<Local> getUnusedVariables() {
Set<Local> res = new HashSet<Local>(body.getLocals());
res.retainAll(getUsedVariables());
return res;
}
代码示例来源:origin: Sable/soot
private void initLocalNames() {
localNames = new HashSet<String>();
for (Local l : body.getLocals()) {
localNames.add(l.getName());
}
}
代码示例来源:origin: Sable/soot
private void retrieveMultiArrayLocals(Body body, Set<Local> container) {
for (Local local : body.getLocals()) {
Type type = local.getType();
if (type instanceof ArrayType) {
if (((ArrayType) type).numDimensions > 1) {
this.multiarraylocals.add(local);
}
}
}
}
代码示例来源:origin: Sable/soot
public LocalMustNotAliasAnalysis(DirectedGraph<Unit> directedGraph, Body b) {
super(directedGraph);
locals = new HashSet<Local>();
locals.addAll(b.getLocals());
for (Local l : b.getLocals()) {
if (l.getType() instanceof RefLikeType) {
locals.add(l);
}
}
doAnalysis();
}
代码示例来源:origin: Sable/soot
protected void internalTransform(Body body, String phaseName, Map<String, String> options) {
soot.jbco.Main.methods2JLocals.put(body.getMethod(), new ArrayList<Local>(body.getLocals()));
}
}
代码示例来源:origin: Sable/soot
public SimpleLocalDefs(UnitGraph graph, FlowAnalysisMode mode) {
this(graph, graph.getBody().getLocals(), mode);
}
代码示例来源:origin: Sable/soot
private boolean hasArrayLocals(Body body) {
Iterator localIt = body.getLocals().iterator();
while (localIt.hasNext()) {
Local local = (Local) localIt.next();
if (local.getType() instanceof ArrayType) {
return true;
}
}
return false;
}
代码示例来源:origin: Sable/soot
public String toString() {
StringBuffer tmp = new StringBuffer();
Body b = cfg.getBody();
Iterator localsIt = b.getLocals().iterator();
while (localsIt.hasNext()) {
Local local = (Local) localsIt.next();
tmp.append(local + "\t" + getGlobalValueNumber(local) + "\n");
}
/*
* Iterator partitionsIt = partitions.iterator(); while(partitionsIt.hasNext()){ Partition partition = (Partition)
* partitionsIt.next(); int partitionNumber = partition.getPartitionNumber();
*
* Iterator partitionIt = partition.iterator(); while(partitionIt.hasNext()){ Local local =
* vg.getLocal((Node)partitionIt.next()); if(local == null) continue; tmp.append(local + "\t" + partitionNumber + "\n");
* } }
*/
return tmp.toString();
}
代码示例来源:origin: Sable/soot
@Override
public void validate(Body body, List<ValidationException> exception) {
for (Local l : body.getLocals()) {
if (l.getType() instanceof VoidType) {
exception.add(new ValidationException(l, "Local " + l + " in " + body.getMethod() + " defined with void type"));
}
}
}
代码示例来源:origin: Sable/soot
public SCPFAnalysis(UnitGraph graph) {
super(graph);
emptySet = new ArraySparseSet();
stmtToReplacement = new HashMap<Stmt, GotoStmt>();
deadStmts = new ArrayList<IfStmt>();
// initialise localToConstant map -- assume all scalars are
// constant (Top)
{
Collection<Local> locals = graph.getBody().getLocals();
Iterator<Local> localsIt = locals.iterator();
localToConstant = new HashMap<Local, Constant>(graph.size() * 2 + 1, 0.7f);
while (localsIt.hasNext()) {
Local local = (Local) localsIt.next();
localToConstant.put(local, TopConstant.v());
}
}
doAnalysis();
}
代码示例来源:origin: Sable/soot
protected soot.Local createLocal(String name, soot.Type sootType) {
soot.Local sootLocal = soot.jimple.Jimple.v().newLocal(name, sootType);
body.getLocals().add(sootLocal);
return sootLocal;
}
}
代码示例来源:origin: Sable/soot
private void validateLocal(Body body, ValueBox vb, List<ValidationException> exception) {
Value value;
if ((value = vb.getValue()) instanceof Local) {
if (!body.getLocals().contains(value)) {
exception.add(new ValidationException(value, "Local not in chain : " + value + " in " + body.getMethod()));
}
}
}
代码示例来源:origin: Sable/soot
/**
* Reassigns the local numbers such that a dense bit set can be created over them
*/
public void pack() {
int n = body.getLocalCount();
locals = new Local[n];
oldNumbers = new int[n];
n = 0;
for (Local local : body.getLocals()) {
locals[n] = local;
oldNumbers[n] = local.getNumber();
local.setNumber(n++);
}
}
代码示例来源:origin: Sable/soot
public InitAnalysis(UnitGraph g) {
super(g);
allLocals = new ArraySparseSet<Local>();
for (Local loc : g.getBody().getLocals()) {
allLocals.add(loc);
}
doAnalysis();
}
代码示例来源:origin: Sable/soot
@Override
protected void internalTransform(Body b, String phaseName, Map<String, String> options) {
LocalCreation lc = new LocalCreation(b.getLocals(), "ex");
for (Iterator<Unit> unitIt = b.getUnits().snapshotIterator(); unitIt.hasNext();) {
Unit u = unitIt.next();
// Check for a null exception
if (u instanceof ThrowStmt) {
ThrowStmt throwStmt = (ThrowStmt) u;
if (throwStmt.getOp() == NullConstant.v() || throwStmt.getOp().equals(IntConstant.v(0))
|| throwStmt.getOp().equals(LongConstant.v(0))) {
createThrowStmt(b, throwStmt, lc);
}
}
}
}
代码示例来源:origin: Sable/soot
@Override
protected Map<Value, Parity> newInitialFlow() {
Map<Value, Parity> initMap = new HashMap<Value, Parity>();
for (Local l : g.getBody().getLocals()) {
Type t = l.getType();
// System.out.println("next local: "+next);
if ((t instanceof IntegerType) || (t instanceof LongType)) {
initMap.put(l, BOTTOM);
}
}
for (ValueBox vb : g.getBody().getUseAndDefBoxes()) {
Value val = vb.getValue();
if (val instanceof ArithmeticConstant) {
initMap.put(val, getParity(initMap, val));
}
}
if (Options.v().interactive_mode()) {
updateBeforeFilterMap();
}
return initMap;
}
代码示例来源:origin: Sable/soot
@Override
public void validate(Body body, List<ValidationException> exceptions) {
SootMethod method = body.getMethod();
if (method != null) {
if (!method.getReturnType().isAllowedInFinalCode()) {
exceptions.add(new ValidationException(method, "Return type not allowed in final code: " + method.getReturnType(),
"return type not allowed in final code:" + method.getReturnType() + "\n method: " + method));
}
for (Type t : method.getParameterTypes()) {
if (!t.isAllowedInFinalCode()) {
exceptions.add(new ValidationException(method, "Parameter type not allowed in final code: " + t,
"parameter type not allowed in final code:" + t + "\n method: " + method));
}
}
}
for (Local l : body.getLocals()) {
Type t = l.getType();
if (!t.isAllowedInFinalCode()) {
exceptions.add(new ValidationException(l, "Local type not allowed in final code: " + t,
"(" + method + ") local type not allowed in final code: " + t + " local: " + l));
}
}
}
代码示例来源:origin: Sable/soot
/**
* Insert a runtime exception before unit u of body b. Useful to analyze broken code (which make reference to inexisting
* class for instance) exceptionType: e.g., "java.lang.RuntimeException"
*/
public static void addExceptionAfterUnit(Body b, String exceptionType, Unit u, String m) {
LocalCreation lc = new LocalCreation(b.getLocals());
Local l = lc.newLocal(RefType.v(exceptionType));
List<Unit> newUnits = new ArrayList<Unit>();
Unit u1 = Jimple.v().newAssignStmt(l, Jimple.v().newNewExpr(RefType.v(exceptionType)));
Unit u2
= Jimple.v()
.newInvokeStmt(Jimple.v().newSpecialInvokeExpr(l,
Scene.v().makeMethodRef(Scene.v().getSootClass(exceptionType), "<init>",
Collections.singletonList((Type) RefType.v("java.lang.String")), VoidType.v(), false),
StringConstant.v(m)));
Unit u3 = Jimple.v().newThrowStmt(l);
newUnits.add(u1);
newUnits.add(u2);
newUnits.add(u3);
b.getUnits().insertBefore(newUnits, u);
}
内容来源于网络,如有侵权,请联系作者删除!