Skip to content

java.lang.OutOfMemoryError and thread blocking #218

@xdek42

Description

@xdek42

Hello, I encountered two errors when converting Dalvik bytecode to Jimple using Soot, my code is as follows:

private void initSoot(String dexPath) {
        soot.G.reset();
        Options.v().set_src_prec(Options.src_prec_apk);
        Options.v().set_output_format(Options.output_format_jimple);
        String androidJarPath = Scene.v().getAndroidJarPath(platformDir, apkPath);
        List<String> pathList = new ArrayList<>();
        pathList.add(dexPath);
        Options.v().set_process_dir(pathList);
        Options.v().set_force_android_jar(androidJarPath);
        Options.v().set_process_multiple_dex(true);
        Options.v().set_no_bodies_for_excluded(true);
        Options.v().set_allow_phantom_refs(true);
        Scene.v().loadNecessaryClasses();
        PackManager.v().runPacks();
    }

1. java.lang.OutOfMemoryError: GC overhead limit exceeded

Sample Apk: https://drive.google.com/open?id=1IX323NMM0M3YKLWSVT2v-u7UNNwCUEXT
When I analyze this apk, FlowDroid will encounter OutOfMemoryError

Exception in thread "Thread-5" java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.util.HashMap.newNode(HashMap.java:1747)
	at java.util.HashMap.putVal(HashMap.java:631)
	at java.util.HashMap.putMapEntries(HashMap.java:515)
	at java.util.HashMap.<init>(HashMap.java:490)
	at soot.jimple.toolkits.typing.fast.Typing.<init>(Typing.java:50)
	at soot.jimple.toolkits.typing.fast.TypeResolver.applyAssignmentConstraints(TypeResolver.java:524)
	at soot.jimple.toolkits.typing.fast.TypeResolver.inferTypes(TypeResolver.java:144)
	at soot.jimple.toolkits.typing.TypeAssigner.internalTransform(TypeAssigner.java:121)
	at soot.BodyTransformer.transform(BodyTransformer.java:55)
	at soot.BodyTransformer.transform(BodyTransformer.java:59)
	at soot.dexpler.DexBody.jimplify(DexBody.java:660)
	at soot.dexpler.DexMethod$1.getBody(DexMethod.java:119)
	at soot.SootMethod.retrieveActiveBody(SootMethod.java:402)
	at soot.PackManager$3.run(PackManager.java:1293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
java.lang.RuntimeException: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at soot.PackManager.retrieveAllBodies(PackManager.java:1315)
	at soot.PackManager.runPacksNormally(PackManager.java:497)
	at soot.PackManager.runPacks(PackManager.java:419)
	at com.glider.vulscan.driver.CheckDriver.initSoot(CheckDriver.java:86)

2. Thread Blocking

Sample Apk: https://drive.google.com/open?id=1fJCSJchxoHhr5skvpAhANPI5l3UsFQ3Q
When I analyze this apk, all threads of FlowDroid will be blocked, except one thread. The program does not throw any exceptions, but it will not terminate
soot

How can i fix these two errors ?Look forward to your help

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions