tamiflex icon indicating copy to clipboard operation
tamiflex copied to clipboard

Error handling lambda expressions

Open nvvishnu opened this issue 3 years ago • 0 comments

I am trying to run the DACAPO benchmark using TamiFlex to handle reflective calls. I am following the instructions mentioned here: https://github.com/secure-software-engineering/tamiflex/wiki/DaCapoAndSoot

Dumped the class files and refl log for the batik-small benchmark using java -javaagent:poa-2.0.3.jar -jar dacapo-9.12-bach.jar batik -s small

When I try running Soot using the refl log generated and the dumped class files, I get the following error: Unknown method for signature: <java.awt.GraphicsEnvironment$$Lambda$1.2048834776: void ()>

To confirm the behaviour with lambda expressions, I wrote a simple program which uses lambda expressions: // A Java program to demonstrate simple lambda expressions import java.util.ArrayList; public class tamiflex_lambda { public static void main(String args[]) { // Creating an ArrayList with elements // {1, 2, 3, 4} ArrayList<Integer> arrL = new ArrayList<Integer>(); arrL.add(1); arrL.add(2); arrL.add(3); arrL.add(4);

	// Using lambda expression to print all elements
	// of arrL
	arrL.forEach(n -> System.out.println(n));

	// Using lambda expression to print even elements
	// of arrL
	arrL.forEach(n -> { if (n%2 == 0) System.out.println(n); });
}

} and dumped the refl.log and the class files. The contents of the refl.log: Constructor.newInstance;<tamiflex_lambda$$Lambda$1.2093631819: void ()>;java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite;215;isAccessible=true; Constructor.newInstance;<tamiflex_lambda$$Lambda$2.1480010240: void ()>;java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite;215;isAccessible=true;

When I try running it on soot.Main, I get the following error:

java -cp .:soot-4.3.0-jar-with-dependencies.jar:out followup.Followup_Main_test java.util.List.add -f J The soot arguments are [-v, -cp, .:out, -pp, -w, -app, -p, cg.spark, enabled:true, -p, cg, all-reachable:true, -p, cg, reflection-log:out/refl.log, -p, wjop.si, enabled:false, -verbose, -debug, -main-class, tamiflex_lambda, -f, J, -d, test, tamiflex_lambda] Soot starting Soot started on Tue May 24 17:08:37 IST 2022 java.lang.RuntimeException: Unknown method for signature: <tamiflex_lambda$$Lambda$1.2093631819: void ()> at soot.jimple.toolkits.reflection.ReflectionTraceInfo.(ReflectionTraceInfo.java:118) at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder$TraceBasedReflectionModel.(OnFlyCallGraphBuilder.java:1163) at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder$TraceBasedReflectionModel.(OnFlyCallGraphBuilder.java:1152) at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.(OnFlyCallGraphBuilder.java:234) at soot.jimple.spark.solver.OnFlyCallGraph.createOnFlyCallGraphBuilder(OnFlyCallGraph.java:101) at soot.jimple.spark.solver.OnFlyCallGraph.(OnFlyCallGraph.java:82) at soot.jimple.spark.builder.ContextInsensitiveBuilder.setup(ContextInsensitiveBuilder.java:87) at soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:100) at soot.SceneTransformer.transform(SceneTransformer.java:36) at soot.Transform.apply(Transform.java:105) at soot.RadioScenePack.internalApply(RadioScenePack.java:64) at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:61) at soot.Pack.apply(Pack.java:118) at soot.PackManager.runWholeProgramPacks(PackManager.java:619) at soot.PackManager.runPacksNormally(PackManager.java:500) at soot.PackManager.runPacks(PackManager.java:425) at soot.Main.run(Main.java:280) at soot.Main.main(Main.java:142) at followup.Followup_Main_test.main(Followup_Main_test.java:49)

When I decompile the tamiflex_lambda$$Lambda$1.class file using the command "javap -c tamiflex_lambda$$Lambda$1.class ", the contents are as follows:

final class tamiflex_lambda$$Lambda$1 implements java.util.function.Consumer { public void accept(java.lang.Object); Code: 0: aload_1 1: checkcast #15 // class java/lang/Integer 4: invokestatic #21 // Method tamiflex_lambda.lambda$main$0:(Ljava/lang/Integer;)V 7: return } It does not contain a constructor.

Is this to be expected? Can TamiFlex handle lambda expressions ?

nvvishnu avatar May 24 '22 11:05 nvvishnu