[Soot-list] IFDSReachingDefinitions

Steven Arzt Steven.Arzt at cased.de
Fri Apr 10 13:11:39 EDT 2015


This happens because Soot creates fake callgraph edges for certain methods such as Thread.run(). In this case, the assumption that the number of arguments inside the call site matches the number of formal parameters of the callee, does not hold. A client analysis must either take care of such cases or use a filter on the callgraph to not handle edges that have such special kinds. (There is actually a “kind” property on the edge that you can check).

 

The example analyses inside Soot presumably don’t handle this well.

 

Von: soot-list-bounces at CS.McGill.CA [mailto:soot-list-bounces at CS.McGill.CA] Im Auftrag von Octav Chipara
Gesendet: Freitag, 10. April 2015 19:02
An: soot-list at googlegroups.com
Cc: soot-list at CS.McGill.CA
Betreff: Re: [Soot-list] IFDSReachingDefinitions

 

Eric,

 

Thanks for the quick reply. The method is:

 

<sun.security.action.GetPropertyAction: java.lang.Object run()>

 

The exception is thrown in SootMethod:266 asking for argument 0 that does not exist. 

 

-- Octav

 

PS: I modified my -cp path to explicitly include the rt.jar and jce.jar from jdk7. Should I use it with jdk6?

 



On Friday, April 10, 2015 at 11:57:30 AM UTC-5, Bodden, Eric wrote:

Hmm, this is odd. 

This looks like you are processing a call site for which the call site itself has actually an argument while the resolved callee method does not. Can you set a breakpoint or add a println to see which method call Soot processes when throwing the exception? 

Cheers, 
Eric 

> On 10.04.2015, at 18:37, ochi... at gmail.com <javascript:>  wrote: 
> 
> Hi, 
> 
> I am trying to run the IFDSReachingDefinitions analysis on a trivial example. However, I am getting the exception included below. I suspect that this is an issue with how I configure soot. I have to apologize if the question is naive, I am just getting started with soot. 
> 
> Thanks, 
> — Octav 
> 
> [Thread-1] ERROR heros.solver.IDESolver - Worker thread execution failed: Index: 0, Size: 0 
> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
>         at java.util.ArrayList.rangeCheck(ArrayList.java:635) 
>         at java.util.ArrayList.get(ArrayList.java:411) 
>         at java.util.Collections$UnmodifiableList.get(Collections.java:1211) 
>         at soot.SootMethod.getParameterType(SootMethod.java:266) 
>         at soot.jimple.toolkits.ide.exampleproblems.IFDSReachingDefinitions$1$2.computeTargets(IFDSReachingDefinitions.java:111) 
>         at soot.jimple.toolkits.ide.exampleproblems.IFDSReachingDefinitions$1$2.computeTargets(IFDSReachingDefinitions.java:1) 
>         at heros.ZeroedFlowFunctions$ZeroedFlowFunction.computeTargets(ZeroedFlowFunctions.java:58) 
>         at heros.solver.IDESolver.computeCallFlowFunction(IDESolver.java:397) 
>         at heros.solver.IDESolver.processCall(IDESolver.java:330) 
>         at heros.solver.IDESolver.access$0(IDESolver.java:313) 
>         at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:856) 
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
>         at java.lang.Thread.run(Thread.java:744) 
> Exception in thread "Thread-1" java.lang.InterruptedException 
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:996) 
>         at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303) 
>         at heros.solver.CountLatch.awaitZero(CountLatch.java:75) 
>         at heros.solver.CountingThreadPoolExecutor.awaitCompletion(CountingThreadPoolExecutor.java:79) 
>         at heros.solver.IDESolver.runExecutorAndAwaitCompletion(IDESolver.java:258) 
>         at heros.solver.IDESolver.awaitCompletionComputeValuesAndShutdown(IDESolver.java:233) 
>         at heros.solver.IDESolver.solve(IDESolver.java:207) 
>         at soot.jimple.toolkits.ide.JimpleIFDSSolver.solve(JimpleIFDSSolver.java:54) 
>         at ReachingDefinitions$1.internalTransform(ReachingDefinitions.java:40) 
>         at soot.SceneTransformer.transform(SceneTransformer.java:39) 
>         at soot.Transform.apply(Transform.java:90) 
>         at soot.ScenePack.internalApply(ScenePack.java:40) 
>         at soot.Pack.apply(Pack.java:116) 
>         at soot.PackManager.runWholeProgramPacks(PackManager.java:564) 
>         at soot.PackManager.runPacksNormally(PackManager.java:456) 
>         at soot.PackManager.runPacks(PackManager.java:391) 
>         at soot.Main.run(Main.java:244) 
>         at soot.Main.main(Main.java:152) 
>         at ReachingDefinitions.main(ReachingDefinitions.java:46) 
> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
>         at java.util.ArrayList.rangeCheck(ArrayList.java:635) 
>         at java.util.ArrayList.get(ArrayList.java:411) 
>         at java.util.Collections$UnmodifiableList.get(Collections.java:1211) 
>         at soot.SootMethod.getParameterType(SootMethod.java:266) 
>         at soot.jimple.toolkits.ide.exampleproblems.IFDSReachingDefinitions$1$2.computeTargets(IFDSReachingDefinitions.java:111) 
>         at soot.jimple.toolkits.ide.exampleproblems.IFDSReachingDefinitions$1$2.computeTargets(IFDSReachingDefinitions.java:1) 
>         at heros.ZeroedFlowFunctions$ZeroedFlowFunction.computeTargets(ZeroedFlowFunctions.java:58) 
>         at heros.solver.IDESolver.computeCallFlowFunction(IDESolver.java:397) 
>         at heros.solver.IDESolver.processCall(IDESolver.java:330) 
>         at heros.solver.IDESolver.access$0(IDESolver.java:313) 
>         at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:856) 
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
>         at java.lang.Thread.run(Thread.java:744) 
> java.lang.RuntimeException: There were exceptions during IDE analysis. Exiting. 
>         at heros.solver.IDESolver.runExecutorAndAwaitCompletion(IDESolver.java:264) 
>         at heros.solver.IDESolver.awaitCompletionComputeValuesAndShutdown(IDESolver.java:233) 
>         at heros.solver.IDESolver.solve(IDESolver.java:207) 
>         at soot.jimple.toolkits.ide.JimpleIFDSSolver.solve(JimpleIFDSSolver.java:54) 
>         at ReachingDefinitions$1.internalTransform(ReachingDefinitions.java:40) 
>         at soot.SceneTransformer.transform(SceneTransformer.java:39) 
>         at soot.Transform.apply(Transform.java:90) 
>         at soot.ScenePack.internalApply(ScenePack.java:40) 
>         at soot.Pack.apply(Pack.java:116) 
>         at soot.PackManager.runWholeProgramPacks(PackManager.java:564) 
>         at soot.PackManager.runPacksNormally(PackManager.java:456) 
>         at soot.PackManager.runPacks(PackManager.java:391) 
>         at soot.Main.run(Main.java:244) 
>         at soot.Main.main(Main.java:152) 
>         at ReachingDefinitions.main(ReachingDefinitions.java:46) 
> Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
>         at java.util.ArrayList.rangeCheck(ArrayList.java:635) 
>         at java.util.ArrayList.get(ArrayList.java:411) 
>         at java.util.Collections$UnmodifiableList.get(Collections.java:1211) 
>         at soot.SootMethod.getParameterType(SootMethod.java:266) 
>         at soot.jimple.toolkits.ide.exampleproblems.IFDSReachingDefinitions$1$2.computeTargets(IFDSReachingDefinitions.java:111) 
>         at soot.jimple.toolkits.ide.exampleproblems.IFDSReachingDefinitions$1$2.computeTargets(IFDSReachingDefinitions.java:1) 
>         at heros.ZeroedFlowFunctions$ZeroedFlowFunction.computeTargets(ZeroedFlowFunctions.java:58) 
>         at heros.solver.IDESolver.computeCallFlowFunction(IDESolver.java:397) 
>         at heros.solver.IDESolver.processCall(IDESolver.java:330) 
>         at heros.solver.IDESolver.access$0(IDESolver.java:313) 
>         at heros.solver.IDESolver$PathEdgeProcessingTask.run(IDESolver.java:856) 
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
>         at java.lang.Thread.run(Thread.java:744) 
> 
> 
> _______________________________________________ 
> Soot-list mailing list 
> Soot... at CS.McGill.CA <javascript:>  
> https://mailman.CS.McGill.CA/mailman/listinfo/soot-list 

-- 
Prof. Eric Bodden, Ph.D., http://sse.ec-spride.de/ http://bodden.de/ 
Head of Secure Software Engineering at Fraunhofer SIT, TU Darmstadt and EC SPRIDE 
Tel: +49 6151 16-75422    Fax: +49 6151 869-127 
Room B5.11, Fraunhofer SIT, Rheinstraße 75, 64295 Darmstadt 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20150410/31d35cb9/attachment-0001.html 


More information about the Soot-list mailing list