public void finishClone() { List<String> cloned = m_classRemapping.getCloned(); for (String cls : cloned) { run(cls, true); } fixFields(); }
public ClassRemappingTransform(boolean map_runtime) { m_classRemapping = new ClassRemapping(); if (!map_runtime) { m_classRemapping.loadMap(); } m_fieldsToFix = new HashMap<SootField, List<FieldRef>>(); m_modified = new HashSet<String>(); m_addedMethods = new ArrayList<SootMethod>(); }
private boolean shouldMap(SootClass soot_class) { if (m_classRemapping.containsKey(soot_class.getName())) { String curr_class = m_currMethod.getDeclaringClass().toString(); if (m_modified.contains(curr_class) == false) { m_modified.add(curr_class); } return true; } else { return false; } }
private void visit(SootMethod method) { SootClass soot_class = method.getDeclaringClass(); if (m_classRemapping.containsKey(soot_class.getName())) { return; } if (method.isConcrete() == false) { return; } Body body = method.retrieveActiveBody(); if (body == null) return; m_currMethod = method; fixArguments(method); Iterator<Unit> iter = body.getUnits().iterator(); while (iter.hasNext()) { Unit curr = iter.next(); List<ValueBox> boxes = curr.getUseAndDefBoxes(); for (ValueBox box : boxes) { Value value = box.getValue(); value = mutate(value); box.setValue(value); } } }
public Set<String> getModifiedClasses() { Set<String> ret = new HashSet<String>(); ret.addAll(m_modified); ret.addAll(m_classRemapping.getValues()); return ret; }
public List<Type> getAddedTypes() { return m_classRemapping.getAddedTypes(); }
private SootClass getMapping(SootClass soot_class) { String new_class = m_classRemapping.get(soot_class.getName()); return Scene.v().getSootClass(new_class); }