protected Invoke(int instLoc, String clazzName, String methodName, String descriptor, int [] args, Opcode opcode, DexIMethod method) { super(instLoc, opcode, method); this.clazzName = clazzName; this.methodName = methodName; this.descriptor = descriptor; this.args = args; assert Descriptor.findOrCreateUTF8(descriptor) != null; }
public static Descriptor findOrCreate(ImmutableByteArray b) throws IllegalArgumentException { return findOrCreate(Language.JAVA, b); }
private Collection<IMethod> lookupMethods(IClass c) { Collection<IMethod> matching = new LinkedList<>(); Atom atom = Atom.findOrCreateUnicodeAtom(memberName); Descriptor desc = descriptor == null ? null : Descriptor.findOrCreateUTF8(descriptor); Collection<? extends IMethod> allMethods = c.getAllMethods(); for(IMethod m: allMethods) { if(m.getName().equals(atom) && (desc == null || m.getDescriptor().equals(desc))) { matching.add(m); } } return matching; }
@Override public boolean equals(Object obj) { // using instanceof is OK because Selector is final if (obj instanceof Selector) { Selector other = (Selector) obj; return name.equals(other.name) && descriptor.equals(other.descriptor); } else { return false; } }
final TypeName[] othersA = miniModel.getDescriptor().getParameters(); final Set<TypeName> others; if (othersA != null) { others.addAll(Arrays.asList(externalModel.getDescriptor().getParameters())); descr = Descriptor.findOrCreate(others.toArray(new TypeName[] {}), TypeReference.VoidName); // Return the intent of external? TODO } else { descr = Descriptor.findOrCreate(externalModel.getDescriptor().getParameters(), TypeReference.VoidName);
@Override public String toString() { return name.toString() + descriptor.toString(); }
MethodReference(Key key) { super(key.type, key.name, key.hashCode()); selector = new Selector(key.name, key.descriptor); TypeName[] parameterNames = key.descriptor.getParameters(); if (parameterNames != null) { parameterTypes = new TypeReference[parameterNames.length]; } else { parameterTypes = null; } ClassLoaderReference loader = getDeclaringClass().getClassLoader(); if (parameterNames != null) { for (int i = 0; i < parameterNames.length; i++) { parameterTypes[i] = TypeReference.findOrCreate(loader, parameterNames[i]); } } TypeName r = key.descriptor.getReturnType(); returnType = TypeReference.findOrCreate(getDeclaringClass().getClassLoader(), r); }
/** * Check if an Entrypoint takes an object. */ public boolean checkNoObjectInEntryPoints() { boolean pass = true; final List <AndroidEntryPoint> entrypoits = AndroidEntryPointManager.ENTRIES; for (AndroidEntryPoint ep : entrypoits) { final TypeName[] params = ep.getMethod().getDescriptor().getParameters(); if (params == null) continue; for (final TypeName type : params) { if (type.equals(TypeReference.JavaLangObject.getName())) { // Why if JavaLangObjectName private? .. narf pass = false; } } } return pass; } }
/** * @param parameters the parameters for a descriptor * @param returnType the return type * @return the canonical representative for this descriptor value */ public static Descriptor findOrCreate(TypeName[] parameters, TypeName returnType) { if (returnType == null) { throw new IllegalArgumentException("null returnType"); } if (parameters != null && parameters.length == 0) { parameters = null; } Key k = new Key(returnType, parameters); Descriptor result = map.get(k); if (result == null) { result = new Descriptor(k); map.put(k, result); } return result; }
@Override public boolean equals(Object obj) { // using instanceof is OK because Selector is final if (obj instanceof Selector) { Selector other = (Selector) obj; return name.equals(other.name) && descriptor.equals(other.descriptor); } else { return false; } }
final TypeName[] othersA = miniModel.getDescriptor().getParameters(); final Set<TypeName> others; if (othersA != null) { others.addAll(Arrays.asList(externalModel.getDescriptor().getParameters())); descr = Descriptor.findOrCreate(others.toArray(new TypeName[] {}), TypeReference.VoidName); // Return the intent of external? TODO } else { descr = Descriptor.findOrCreate(externalModel.getDescriptor().getParameters(), TypeReference.VoidName);
@Override public String toString() { return name.toString() + descriptor.toString(); }
MethodReference(Key key) { super(key.type, key.name, key.hashCode()); selector = new Selector(key.name, key.descriptor); TypeName[] parameterNames = key.descriptor.getParameters(); if (parameterNames != null) { parameterTypes = new TypeReference[parameterNames.length]; } else { parameterTypes = null; } ClassLoaderReference loader = getDeclaringClass().getClassLoader(); if (parameterNames != null) { for (int i = 0; i < parameterNames.length; i++) { parameterTypes[i] = TypeReference.findOrCreate(loader, parameterNames[i]); } } TypeName r = key.descriptor.getReturnType(); returnType = TypeReference.findOrCreate(getDeclaringClass().getClassLoader(), r); }
/** * Check if an Entrypoint takes an object. */ public boolean checkNoObjectInEntryPoints() { boolean pass = true; final List <AndroidEntryPoint> entrypoits = AndroidEntryPointManager.ENTRIES; for (AndroidEntryPoint ep : entrypoits) { final TypeName[] params = ep.getMethod().getDescriptor().getParameters(); if (params == null) continue; for (final TypeName type : params) { if (type.equals(TypeReference.JavaLangObject.getName())) { // Why if JavaLangObjectName private? .. narf pass = false; } } } return pass; } }
/** * @param parameters the parameters for a descriptor * @param returnType the return type * @return the canonical representative for this descriptor value */ public static Descriptor findOrCreate(TypeName[] parameters, TypeName returnType) { if (returnType == null) { throw new IllegalArgumentException("null returnType"); } if (parameters != null && parameters.length == 0) { parameters = null; } Key k = new Key(returnType, parameters); Descriptor result = map.get(k); if (result == null) { result = new Descriptor(k); map.put(k, result); } return result; }
/** * @param s string representation of this descriptor * @return the canonical representative for this descriptor value */ public static Descriptor findOrCreateUTF8(String s) throws IllegalArgumentException { return findOrCreateUTF8(Language.JAVA, s); }
public static Descriptor findOrCreate(ImmutableByteArray b) throws IllegalArgumentException { return findOrCreate(Language.JAVA, b); }
public static CGNode findMainMethod(CallGraph cg) { Descriptor d = Descriptor.findOrCreateUTF8("([Ljava/lang/String;)V"); Atom name = Atom.findOrCreateUnicodeAtom("main"); for (CGNode n : Iterator2Iterable.make(cg.getSuccNodes(cg.getFakeRootNode()))) { if (n.getMethod().getName().equals(name) && n.getMethod().getDescriptor().equals(d)) { return n; } } Assertions.UNREACHABLE("failed to find method"); return null; }
protected boolean filterFunction(IMethod function) { return function.getDescriptor().equals(AstMethodReference.fnDesc); }
logger.trace("[getFuzzyDescriptor]"); logger.trace("- signature: " + m.getSignature()); logger.trace("- descriptor: " + m.getDescriptor().toString());