[Soot-list] Paddle: getting updated version of context sensitive call graph/points-to sets
Christophe Foket
christophe.foket at elis.ugent.be
Tue Mar 22 09:07:36 EDT 2011
For those of you who might be interested, I think I have found a
solution to my problem.
For Spark:
private static void runSpark(){
Scene.v().releaseCallGraph();
Scene.v().releasePointsToAnalysis();
Scene.v().releaseReachableMethods();
Scene.v().releaseFastHierarchy();
Scene.v().releaseActiveHierarchy();
G.v().MethodPAG_methodToPag = new HashMap<SootMethod, MethodPAG>();
SootBridge.removeTransform("wjap", "wjap.guards");
PackManager.v().getPack("cg").apply();
}
public static void removeTransform(String packName, String
transformName){
Pack pack = PackManager.v().getPack(packName);
Transform transform = pack.get(transformName);
pack.opts.remove(transform);
}
For Paddle:
private static void runPaddle(){
Scene.v().releaseCallGraph();
Scene.v().releasePointsToAnalysis();
Scene.v().releaseReachableMethods();
Scene.v().releaseFastHierarchy();
Scene.v().releaseActiveHierarchy();
SootBridge.nullifyContextNumberer();
PackManager.v().getPack("cg").apply();
}
public static void nullifyContextNumberer(){
Scene.v().contextNumberer = null;
}
(soot.SootBridge is a class I made to get access to some fields of Scene
and Pack)
At first sight, both methods seem to calculate an updated version of the
call graph and the points-to sets. However, I have not tested them
extensively.
Kind Regards,
Christophe
On 03/21/2011 06:11 PM, Christophe Foket wrote:
> This seems to work. However, G.reset() also removes the current Scene,
> which results in further problems. I've tried various things like
> copying the classes from the old Scene to the new Scene or even changing
> the new Scene back to the old Scene using
>
> Field sceneField =
> Singletons.class.getDeclaredField("instance_soot_Scene");
> sceneField.setAccessible(true);
> sceneField.set(G.v(), oldScene);
>
> However, none of these hacks seem to result in anything useful.
>
> Christophe
>
> On 03/18/2011 09:09 PM, Ondrej Lhotak wrote:
>> The only reliable way to clear the existing state of Soot (and Paddle)
>> that I'm aware of is with G.reset().
>>
>> Ondrej
>>
>> On Wed, Mar 16, 2011 at 11:28:03PM +0100, Christophe Foket wrote:
>>> Hello,
>>>
>>> I was wondering what the best way is to rerun Paddle to get an updated
>>> version of the context sensitive call graph/points to sets. I've tried using
>>>
>>> Scene.v().releaseReachableMethods();
>>> Scene.v().releaseCallGraph();
>>> Scene.v().releasePointsToAnalysis();
>>> Scene.v().contextNumberer = null;
>>>
>>> PaddleOptions options = new PaddleOptions(paddleOptions);
>>> PaddleTransformer paddleTransformer = PaddleTransformer.v();
>>> paddleTransformer.setup(options);
>>> paddleTransformer.solve(options);
>>>
>>> where paddleOptions is a HashMap containing the same key-value mapping
>>> as the options that were given to Soot.
>>>
>>> However, this does not seem to be working, as some of the points-to sets
>>> are empty after re-runing Paddle this way.
>>> For example, I have the following problem:
>>>
>>> Local local = ...
>>>
>>> System.out.println(Scene.v().getPointsToAnalysis().reachingObjects(local).possibleTypes().size());
>>> // prints "1"
>>>
>>> Scene.v().releaseReachableMethods();
>>> Scene.v().releaseCallGraph();
>>> Scene.v().releasePointsToAnalysis();
>>> Scene.v().contextNumberer = null;
>>>
>>> PaddleOptions options = new PaddleOptions(paddleOptions);
>>> PaddleTransformer paddleTransformer = PaddleTransformer.v();
>>> paddleTransformer.setup(options);
>>> paddleTransformer.solve(options);
>>>
>>>
>>> System.out.println(Scene.v().getPointsToAnalysis().reachingObjects(local).possibleTypes().size());
>>> // prints "0"
>>>
>>> Kind regards,
>>>
>>> Christophe
>>> _______________________________________________
>>> Soot-list mailing list
>>> Soot-list at sable.mcgill.ca
>>> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
>>>
> _______________________________________________
> Soot-list mailing list
> Soot-list at sable.mcgill.ca
> http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
More information about the Soot-list
mailing list