private void changeUntypedConstantsInInvoke(InvokeExpr invokeExpr) { for (int i = 0; i < invokeExpr.getArgCount(); i++) { Value v = invokeExpr.getArg(i); if (!(v instanceof UntypedConstant)) { continue; } Type t = invokeExpr.getMethodRef().parameterType(i); UntypedConstant uc = (UntypedConstant) v; invokeExpr.setArg(i, uc.defineType(t)); } }
protected void setInvokeType(InvokeExpr invokeExpr) { for (int i = 0; i < invokeExpr.getArgCount(); i++) { Value v = invokeExpr.getArg(i); if (!(v instanceof Local)) { continue; } Type t = invokeExpr.getMethodRef().parameterType(i); DalvikTyper.v().setType(invokeExpr.getArgBox(i), t, true); } if (invokeExpr instanceof StaticInvokeExpr) { // nothing to do } else if (invokeExpr instanceof InstanceInvokeExpr) { InstanceInvokeExpr iie = (InstanceInvokeExpr) invokeExpr; DalvikTyper.v().setType(iie.getBaseBox(), RefType.v("java.lang.Object"), true); } else if (invokeExpr instanceof DynamicInvokeExpr) { DynamicInvokeExpr die = (DynamicInvokeExpr) invokeExpr; // ? } else { throw new RuntimeException("error: unhandled invoke expression: " + invokeExpr + " " + invokeExpr.getClass()); } }
private void handleInvokeExpr(InvokeExpr ie, Stmt stmt) { SootMethodRef m = ie.getMethodRef(); if (ie instanceof InstanceInvokeExpr) { InstanceInvokeExpr iie = (InstanceInvokeExpr) ie; iie.setBase(this.uv.visit(iie.getBase(), m.declaringClass().getType(), stmt)); } for (int i = 0; i < ie.getArgCount(); i++) { ie.setArg(i, this.uv.visit(ie.getArg(i), m.parameterType(i), stmt)); } }
Value arg = ie.getArg(i);
ParameterRef pr = (ParameterRef) node; if (pr.getIndex() != -1) { if (!isObjectLocalToContext(ie.getArg(pr.getIndex()), containingMethod, context)) { return true; ParameterRef pr = (ParameterRef) node; if (pr.getIndex() != -1) { if (!isObjectLocalToContext(ie.getArg(pr.getIndex()), containingMethod, context)) { return true; ParameterRef pr = (ParameterRef) node; if (pr.getIndex() != -1) { if (!isObjectLocalToContext(ie.getArg(pr.getIndex()), containingMethod, context)) { return true;
private void handleInvokeExpr(InvokeExpr ie) { if (!uses) { return; } // Handle the parameters SootMethodRef method = ie.getMethodRef(); for (int i = 0; i < ie.getArgCount(); i++) { if (ie.getArg(i) instanceof Local) { Local local = (Local) ie.getArg(i); if (local.getType() instanceof IntegerType) { TypeVariable localType = resolver.typeVariable(local); localType.addParent(resolver.typeVariable(method.parameterType(i))); } } } if (ie instanceof DynamicInvokeExpr) { DynamicInvokeExpr die = (DynamicInvokeExpr) ie; SootMethodRef bootstrapMethod = die.getBootstrapMethodRef(); for (int i = 0; i < die.getBootstrapArgCount(); i++) { if (die.getBootstrapArg(i) instanceof Local) { Local local = (Local) die.getBootstrapArg(i); if (local.getType() instanceof IntegerType) { TypeVariable localType = resolver.typeVariable(local); localType.addParent(resolver.typeVariable(bootstrapMethod.parameterType(i))); } } } } }
Value className = ie.getArg(0); if (className instanceof StringConstant) { String cls = ((StringConstant) className).value;
uses.add(ie.getArg(i));
InvokeExpr invokeExpr = u.getInvokeExpr(); if (invokeExpr.getMethod().getSignature().equals(INVOKE_SIG)) { if (invokeExpr.getArg(0) instanceof StringConstant) { StringConstant constant = (StringConstant) invokeExpr.getArg(0); Local newLocal = Jimple.v().newLocal("sc" + body.getLocalCount(), constant.getType()); body.getLocals().add(newLocal);
for (int i = 0; i < iexpr.getArgCount(); i++) { checkCopy(stmt, body, exception, Type.toMachineType(called.parameterType(i)), Type.toMachineType(iexpr.getArg(i).getType()), " in argument " + i + " of call" + errorSuffix + " (Note: Parameters are zero-indexed)");
+ "(java.security.PrivilegedExceptionAction,java.security.AccessControlContext)>")) { Local receiver = (Local) ie.getArg(0); addVirtualCallSite(s, m, receiver, null, sigObjRun, Kind.PRIVILEGED);
int argCount = stmt.getInvokeExpr().getArgCount(); for (int i = 0; i < argCount; i++) { ret.union(addValue(stmt.getInvokeExpr().getArg(i), method, stmt));
if (ie.getMethodRef().resolve() == method) { if (((ParameterRef) parameterRef.getValue()).getIndex() >= 0) { if (!isObjectLocal(ie.getArg(((ParameterRef) parameterRef.getValue()).getIndex()), containingMethod,
int numArgs = ie.getArgCount(); for (int i = 0; i < numArgs; i++) { Value arg = ie.getArg(i); if (!(arg.getType() instanceof RefLikeType)) { continue;
} else { for (int param = 0; param < ie.getArgCount(); param++) { if (SmartMethodLocalObjectsAnalysis.isObjectLocal(dfa, containingMethod, containingContext, ie.getArg(param))) { callingContext.setParamLocal(param); } else {
walk_value(a, ie.getArg(i));