private void handleFieldRef(FieldRef fieldRef, AnalysisInfo out) { if (fieldRef instanceof InstanceFieldRef) { InstanceFieldRef instanceFieldRef = (InstanceFieldRef) fieldRef; // here we know that the receiver must point to an object Value base = instanceFieldRef.getBase(); out.put(base, NON_NULL); } }
vb.setValue(new DInstanceFieldRef(ifr.getBase(), ifr.getFieldRef(), thisLocals));
private void handleFieldRef(FieldRef fieldRef, AnalysisInfo out) { if (fieldRef instanceof InstanceFieldRef) { InstanceFieldRef instanceFieldRef = (InstanceFieldRef) fieldRef; // here we know that the receiver must point to an object Value base = instanceFieldRef.getBase(); out.put(base, NON_NULL); } // but the referenced object might point to everything // out.put(fieldRef, TOP); }
private void initRefTypeLists(ValueBox box) { Value val = box.getValue(); Type opType = null; if (val instanceof InstanceFieldRef) { InstanceFieldRef ir = (InstanceFieldRef) val; opType = ir.getType(); if (opType instanceof RefType || opType instanceof ArrayType) { EquivalentValue eir = getEquivalentValue(ir); if (!refTypeInstFields.contains(eir)) { refTypeInstFields.add(eir); EquivalentValue eirbase = getEquivalentValue(ir.getBase()); if (!refTypeInstFieldBases.contains(eirbase)) { refTypeInstFieldBases.add(eirbase); } } } } else if (val instanceof StaticFieldRef) { StaticFieldRef sr = (StaticFieldRef) val; opType = sr.getType(); if (opType instanceof RefType || opType instanceof ArrayType) { EquivalentValue esr = getEquivalentValue(sr); if (!refTypeStaticFields.contains(esr)) { refTypeStaticFields.add(esr); } } } }
public void caseInstanceFieldRef(InstanceFieldRef ref) { result = result.add(mgr.RESOLVE_FIELD_ERRORS); result = result.add(mgr.NULL_POINTER_EXCEPTION); result = result.add(mightThrow(ref.getBase())); }
public void caseInstanceFieldRef(InstanceFieldRef v) { ((ConvertToBaf) (v.getBase())).convertToBaf(context, out); ((ConvertToBaf) rvalue).convertToBaf(context, out); Unit u = Baf.v().newFieldPutInst(v.getFieldRef()); u.addAllTagsOf(JAssignStmt.this); out.add(u); }
private void handleInstanceFieldRef(InstanceFieldRef ifr, Stmt stmt) { ifr.setBase(this.uv.visit(ifr.getBase(), ifr.getFieldRef().declaringClass().getType(), stmt)); }
private Insn buildInstanceFieldGetInsn(Register destinationReg, InstanceFieldRef sourceRef) { Local instance = (Local) sourceRef.getBase(); Register instanceReg = regAlloc.asLocal(instance); FieldReference sourceField = DexPrinter.toFieldReference(sourceRef.getFieldRef()); Opcode opc = getPutGetOpcodeWithTypeSuffix(IGET_OPCODE, sourceField.getType()); return new Insn22c(opc, destinationReg, instanceReg, sourceField); }
@Override final public void caseInstanceFieldRef(InstanceFieldRef ifr) { if (pag.getOpts().field_based() || pag.getOpts().vta()) { setResult(pag.makeGlobalVarNode(ifr.getField(), ifr.getField().getType())); } else { setResult(pag.makeLocalFieldRefNode(ifr.getBase(), ifr.getBase().getType(), ifr.getField(), method)); } }
private Insn buildInstanceFieldPutInsn(InstanceFieldRef destRef, Value source) { FieldReference destField = DexPrinter.toFieldReference(destRef.getFieldRef()); Local instance = (Local) destRef.getBase(); Register instanceReg = regAlloc.asLocal(instance); Register sourceReg = regAlloc.asImmediate(source, constantV); Opcode opc = getPutGetOpcodeWithTypeSuffix(IPUT_OPCODE, destField.getType()); return new Insn22c(opc, sourceReg, instanceReg, destField); }
if (localOrRef instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) localOrRef; if (ifr.getBase().equivTo(smloa.getThisLocal())) { return isFieldLocal(ifr.getFieldRef().resolve()); } else { if (isObjectLocal(ifr.getBase(), sm, includePrimitiveDataFlowIfAvailable)) { boolean retval = loa.isFieldLocalToParent(ifr.getFieldRef().resolve()); if (dfa.printDebug()) {
protected void handleFlowsToValue(Value sink, Value source) { EquivalentValue sinkEqVal; EquivalentValue sourceEqVal; if (sink instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) sink; sinkEqVal = InfoFlowAnalysis.getNodeForFieldRef(sm, ifr.getField(), (Local) ifr.getBase()); // deals with inner fields } else { sinkEqVal = new CachedEquivalentValue(sink); } if (source instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) source; sourceEqVal = InfoFlowAnalysis.getNodeForFieldRef(sm, ifr.getField(), (Local) ifr.getBase()); // deals with inner // fields } else { sourceEqVal = new CachedEquivalentValue(source); } if (source instanceof Ref && !infoFlowSummary.containsNode(sourceEqVal)) { infoFlowSummary.addNode(sourceEqVal); } if (sink instanceof Ref && !infoFlowSummary.containsNode(sinkEqVal)) { infoFlowSummary.addNode(sinkEqVal); } if (!abbreviatedInfoFlowGraph.containsNode(sinkEqVal)) { abbreviatedInfoFlowGraph.addNode(sinkEqVal); } if (!abbreviatedInfoFlowGraph.containsNode(sourceEqVal)) { abbreviatedInfoFlowGraph.addNode(sourceEqVal); } abbreviatedInfoFlowGraph.addEdge(sourceEqVal, sinkEqVal); }
Node src = getNode(); if (l instanceof InstanceFieldRef) { ((InstanceFieldRef) l).getBase().apply(MethodNodeFactory.this); pag.addDereference((VarNode) getNode()); ((InstanceFieldRef) r).getBase().apply(MethodNodeFactory.this); pag.addDereference((VarNode) getNode()); } else if (r instanceof StaticFieldRef) {
protected RWSet addValue(Value v, SootMethod m, Stmt s) { RWSet ret = null; if (v instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) v; PointsToSet base = pa.reachingObjects((Local) ifr.getBase()); ret = new StmtRWSet(); ret.addFieldRef(base, ifr.getField()); } else if (v instanceof StaticFieldRef) { StaticFieldRef sfr = (StaticFieldRef) v; ret = new StmtRWSet(); ret.addGlobal(sfr.getField()); } else if (v instanceof ArrayRef) { ArrayRef ar = (ArrayRef) v; PointsToSet base = pa.reachingObjects((Local) ar.getBase()); ret = new StmtRWSet(); ret.addFieldRef(base, PointsToAnalysis.ARRAY_ELEMENTS_NODE); } return ret; }
public void caseInstanceFieldRef(InstanceFieldRef v) { emitValue(v.getBase()); emit("getfield " + slashify(v.getFieldRef().declaringClass().getName()) + "/" + v.getFieldRef().name() + " " + jasminDescriptorOf(v.getFieldRef().type()), -1 + sizeOfType(v.getFieldRef().type())); }
public void caseInstanceFieldRef(InstanceFieldRef v) { emitValue(v.getBase()); emitValue(rvalue); emit("putfield " + slashify(v.getFieldRef().declaringClass().getName()) + "/" + v.getFieldRef().name() + " " + jasminDescriptorOf(v.getFieldRef().type()), -1 + -sizeOfType(v.getFieldRef().type())); }
args.add(((InstanceFieldRef) ref).getBase());
protected void handleFlowsToDataStructure(Value base, Value source) { EquivalentValue sourcesOfBaseEqVal = new CachedEquivalentValue(new AbstractDataSource(base)); EquivalentValue baseEqVal = new CachedEquivalentValue(base); EquivalentValue sourceEqVal; if (source instanceof InstanceFieldRef) { InstanceFieldRef ifr = (InstanceFieldRef) source; sourceEqVal = InfoFlowAnalysis.getNodeForFieldRef(sm, ifr.getField(), (Local) ifr.getBase()); // deals with inner // fields } else { sourceEqVal = new CachedEquivalentValue(source); } if (source instanceof Ref && !infoFlowSummary.containsNode(sourceEqVal)) { infoFlowSummary.addNode(sourceEqVal); } if (!abbreviatedInfoFlowGraph.containsNode(baseEqVal)) { abbreviatedInfoFlowGraph.addNode(baseEqVal); } if (!abbreviatedInfoFlowGraph.containsNode(sourceEqVal)) { abbreviatedInfoFlowGraph.addNode(sourceEqVal); } if (!abbreviatedInfoFlowGraph.containsNode(sourcesOfBaseEqVal)) { abbreviatedInfoFlowGraph.addNode(sourcesOfBaseEqVal); } abbreviatedInfoFlowGraph.addEdge(sourceEqVal, sourcesOfBaseEqVal); abbreviatedInfoFlowGraph.addEdge(sourcesOfBaseEqVal, baseEqVal); // for convenience }
args.add(((InstanceFieldRef) ref).getBase());