Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Instrumentation failure, Resolved Field is Null #19

Open
amordahl opened this issue Feb 11, 2022 · 4 comments
Open

Instrumentation failure, Resolved Field is Null #19

amordahl opened this issue Feb 11, 2022 · 4 comments

Comments

@amordahl
Copy link

amordahl commented Feb 11, 2022

When trying to run Slicer4J through the python script, the instrumentation fails. I am using JDK 9, on Mac OS. Here is the content of instr-debug.log.

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/austin/git/Slicer4J/Slicer4J/target/slicer4j-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/austin/git/Slicer4J/Slicer4J/target/lib/soot-infoflow-2.9.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/austin/git/Slicer4J/Slicer4J/target/lib/slf4j-simple-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
[main] INFO JimpleWriter - initialize (17): Initializing Instrumenter
[main] INFO JimpleWriter - initialize (30): Initialization done
[main] INFO JimpleWriter - start (37): Running packs ... 
[main] INFO JimpleWriter - start (39): Writing output ... 
[main] INFO JimpleWriter - start (41): Output written ... 
[main] INFO JavaInstrumenter - initialize (79): Initializing Instrumenter
[main] INFO JavaInstrumenter - initialize (98): Initialization done
[main] INFO JavaInstrumenter - start (252): Running packs ... 
[Thread-31] INFO InstrumenterUtils - addPrint (456): Statement: $stack6 = string.<java.lang.String: char[] value>
[Thread-31] ERROR heros.solver.CountingThreadPoolExecutor - Worker thread execution failed: Resolved field is null: string.<java.lang.String: char[] value>
Resolved field is null: string.<java.lang.String: char[] value>
in unit: $stack6 = string.<java.lang.String: char[] value>
in body: 
     public static boolean regionMatches(java.lang.String, int, java.lang.String, int, int)
    {
        int start, $stack7, length, $stack8, thisStart, $stack10, $stack11, $stack12, $stack14, i, $i0, $i1, hashCode;
        java.lang.String string, thisStr, tmpString, tmpString;
        char $stack16, $stack17;
        char[] $stack6, $stack9, $stack13, $stack15;
        java.lang.StringBuilder sb, sb;
        java.lang.Object tmpField;

        thisStr := @parameter0: java.lang.String;

        thisStart := @parameter1: int;

        string := @parameter2: java.lang.String;

        start := @parameter3: int;

        length := @parameter4: int;

        sb = new java.lang.StringBuilder;

        specialinvoke sb.<java.lang.StringBuilder: void <init>()>();

        hashCode = staticinvoke <java.lang.System: int identityHashCode(java.lang.Object)>(string);

        virtualinvoke sb.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("814193");

        tmpString = virtualinvoke sb.<java.lang.StringBuilder: java.lang.String toString()>();

        staticinvoke <DynamicSlicingLogger: void println(java.lang.String,int)>(tmpString, hashCode);

        $stack6 = string.<java.lang.String: char[] value>;

        $stack7 = lengthof $stack6;

        $stack8 = $stack7 - start;

        if $stack8 < length goto label1;

        if start >= 0 goto label2;

     label1:
        return 0;

     label2:
        if thisStart < 0 goto label3;

        $stack9 = thisStr.<java.lang.String: char[] value>;

        $stack10 = lengthof $stack9;

        $stack11 = $stack10 - thisStart;

        if $stack11 >= length goto label4;

     label3:
        return 0;

     label4:
        if length > 0 goto label5;

        return 1;

     label5:
        i = 0;

     label6:
        if i >= length goto label8;

        $stack13 = thisStr.<java.lang.String: char[] value>;

        $stack12 = thisStart + i;

        $stack17 = $stack13[$stack12];

        $stack15 = string.<java.lang.String: char[] value>;

        $stack14 = start + i;

        $stack16 = $stack15[$stack14];

        $i0 = (int) $stack17;

        $i1 = (int) $stack16;

        if $i0 == $i1 goto label7;

        return 0;

     label7:
        i = i + 1;

        goto label6;

     label8:
        return 1;
    }


	at soot.jimple.validation.FieldRefValidator.validate(FieldRefValidator.java:83)
	at soot.jimple.JimpleBody.validate(JimpleBody.java:124)
	at soot.jimple.JimpleBody.validate(JimpleBody.java:106)
	at ca.ubc.ece.resess.slicer.dynamic.core.instrumenter.InstrumenterUtils.addPrint(InstrumenterUtils.java:454)
	at ca.ubc.ece.resess.slicer.dynamic.core.instrumenter.InstrumenterUtils.basicBlockInstrument(InstrumenterUtils.java:70)
	at ca.ubc.ece.resess.slicer.dynamic.slicer4j.instrumenter.JavaInstrumenter$2.internalTransform(JavaInstrumenter.java:183)
	at soot.BodyTransformer.transform(BodyTransformer.java:47)
	at soot.Transform.apply(Transform.java:126)
	at soot.BodyPack.internalApply(BodyPack.java:49)
	at soot.Pack.apply(Pack.java:126)
	at soot.PackManager.runBodyPacks(PackManager.java:991)
	at soot.PackManager.lambda$runBodyPacks$0(PackManager.java:667)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.base/java.lang.Thread.run(Thread.java:844)
Exception in thread "main" Resolved field is null: string.<java.lang.String: char[] value>
in unit: $stack6 = string.<java.lang.String: char[] value>
in body: 
     public static boolean regionMatches(java.lang.String, int, java.lang.String, int, int)
    {
        int start, $stack7, length, $stack8, thisStart, $stack10, $stack11, $stack12, $stack14, i, $i0, $i1, hashCode;
        java.lang.String string, thisStr, tmpString, tmpString;
        char $stack16, $stack17;
        char[] $stack6, $stack9, $stack13, $stack15;
        java.lang.StringBuilder sb, sb;
        java.lang.Object tmpField;

        thisStr := @parameter0: java.lang.String;

        thisStart := @parameter1: int;

        string := @parameter2: java.lang.String;

        start := @parameter3: int;

        length := @parameter4: int;

        sb = new java.lang.StringBuilder;

        specialinvoke sb.<java.lang.StringBuilder: void <init>()>();

        hashCode = staticinvoke <java.lang.System: int identityHashCode(java.lang.Object)>(string);

        virtualinvoke sb.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("814193");

        tmpString = virtualinvoke sb.<java.lang.StringBuilder: java.lang.String toString()>();

        staticinvoke <DynamicSlicingLogger: void println(java.lang.String,int)>(tmpString, hashCode);

        $stack6 = string.<java.lang.String: char[] value>;

        $stack7 = lengthof $stack6;

        $stack8 = $stack7 - start;

        if $stack8 < length goto label1;

        if start >= 0 goto label2;

     label1:
        return 0;

     label2:
        if thisStart < 0 goto label3;

        $stack9 = thisStr.<java.lang.String: char[] value>;

        $stack10 = lengthof $stack9;

        $stack11 = $stack10 - thisStart;

        if $stack11 >= length goto label4;

     label3:
        return 0;

     label4:
        if length > 0 goto label5;

        return 1;

     label5:
        i = 0;

     label6:
        if i >= length goto label8;

        $stack13 = thisStr.<java.lang.String: char[] value>;

        $stack12 = thisStart + i;

        $stack17 = $stack13[$stack12];

        $stack15 = string.<java.lang.String: char[] value>;

        $stack14 = start + i;

        $stack16 = $stack15[$stack14];

        $i0 = (int) $stack17;

        $i1 = (int) $stack16;

        if $i0 == $i1 goto label7;

        return 0;

     label7:
        i = i + 1;

        goto label6;

     label8:
        return 1;
    }


	at soot.jimple.validation.FieldRefValidator.validate(FieldRefValidator.java:83)
	at soot.jimple.JimpleBody.validate(JimpleBody.java:124)
	at soot.jimple.JimpleBody.validate(JimpleBody.java:106)
	at ca.ubc.ece.resess.slicer.dynamic.core.instrumenter.InstrumenterUtils.addPrint(InstrumenterUtils.java:454)
	at ca.ubc.ece.resess.slicer.dynamic.core.instrumenter.InstrumenterUtils.basicBlockInstrument(InstrumenterUtils.java:70)
	at ca.ubc.ece.resess.slicer.dynamic.slicer4j.instrumenter.JavaInstrumenter$2.internalTransform(JavaInstrumenter.java:183)
	at soot.BodyTransformer.transform(BodyTransformer.java:47)
	at soot.Transform.apply(Transform.java:126)
	at soot.BodyPack.internalApply(BodyPack.java:49)
	at soot.Pack.apply(Pack.java:126)
	at soot.PackManager.runBodyPacks(PackManager.java:991)
	at soot.PackManager.lambda$runBodyPacks$0(PackManager.java:667)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.base/java.lang.Thread.run(Thread.java:844)
Exception in thread "Thread-31" Resolved field is null: string.<java.lang.String: char[] value>
in unit: $stack6 = string.<java.lang.String: char[] value>
in body: 
     public static boolean regionMatches(java.lang.String, int, java.lang.String, int, int)
    {
        int start, $stack7, length, $stack8, thisStart, $stack10, $stack11, $stack12, $stack14, i, $i0, $i1, hashCode;
        java.lang.String string, thisStr, tmpString, tmpString;
        char $stack16, $stack17;
        char[] $stack6, $stack9, $stack13, $stack15;
        java.lang.StringBuilder sb, sb;
        java.lang.Object tmpField;

        thisStr := @parameter0: java.lang.String;

        thisStart := @parameter1: int;

        string := @parameter2: java.lang.String;

        start := @parameter3: int;

        length := @parameter4: int;

        sb = new java.lang.StringBuilder;

        specialinvoke sb.<java.lang.StringBuilder: void <init>()>();

        hashCode = staticinvoke <java.lang.System: int identityHashCode(java.lang.Object)>(string);

        virtualinvoke sb.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("814193");

        tmpString = virtualinvoke sb.<java.lang.StringBuilder: java.lang.String toString()>();

        staticinvoke <DynamicSlicingLogger: void println(java.lang.String,int)>(tmpString, hashCode);

        $stack6 = string.<java.lang.String: char[] value>;

        $stack7 = lengthof $stack6;

        $stack8 = $stack7 - start;

        if $stack8 < length goto label1;

        if start >= 0 goto label2;

     label1:
        return 0;

     label2:
        if thisStart < 0 goto label3;

        $stack9 = thisStr.<java.lang.String: char[] value>;

        $stack10 = lengthof $stack9;

        $stack11 = $stack10 - thisStart;

        if $stack11 >= length goto label4;

     label3:
        return 0;

     label4:
        if length > 0 goto label5;

        return 1;

     label5:
        i = 0;

     label6:
        if i >= length goto label8;

        $stack13 = thisStr.<java.lang.String: char[] value>;

        $stack12 = thisStart + i;

        $stack17 = $stack13[$stack12];

        $stack15 = string.<java.lang.String: char[] value>;

        $stack14 = start + i;

        $stack16 = $stack15[$stack14];

        $i0 = (int) $stack17;

        $i1 = (int) $stack16;

        if $i0 == $i1 goto label7;

        return 0;

     label7:
        i = i + 1;

        goto label6;

     label8:
        return 1;
    }


	at soot.jimple.validation.FieldRefValidator.validate(FieldRefValidator.java:83)
	at soot.jimple.JimpleBody.validate(JimpleBody.java:124)
	at soot.jimple.JimpleBody.validate(JimpleBody.java:106)
	at ca.ubc.ece.resess.slicer.dynamic.core.instrumenter.InstrumenterUtils.addPrint(InstrumenterUtils.java:454)
	at ca.ubc.ece.resess.slicer.dynamic.core.instrumenter.InstrumenterUtils.basicBlockInstrument(InstrumenterUtils.java:70)
	at ca.ubc.ece.resess.slicer.dynamic.slicer4j.instrumenter.JavaInstrumenter$2.internalTransform(JavaInstrumenter.java:183)
	at soot.BodyTransformer.transform(BodyTransformer.java:47)
	at soot.Transform.apply(Transform.java:126)
	at soot.BodyPack.internalApply(BodyPack.java:49)
	at soot.Pack.apply(Pack.java:126)
	at soot.PackManager.runBodyPacks(PackManager.java:991)
	at soot.PackManager.lambda$runBodyPacks$0(PackManager.java:667)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.base/java.lang.Thread.run(Thread.java:844)
@amordahl amordahl changed the title Instrumentation failure, ArrayIndexOutOfBoundsException Instrumentation failure, Resolved Field is Null Feb 11, 2022
@khaled-e-a
Copy link
Collaborator

Thank you for submitting the issue.
Can you please attach the jar file and the command you used to run the slicer?

@amordahl
Copy link
Author

Sure. I am trying to run Slicer4J on FlowDroid; I've attached the jar. The command I used to run is

python slicer4j.py -j ~/git/FlowDroid/soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar -b soot/jimple/infoflow/Infoflow:711 -o ~/test -m "soot/jimple/infoflow/cmd/MainClass -a ~/Downloads/DroidBench30/benchmark/apks/Aliasing/FlowSensitivity1.apk -p ~/Library/Android/sdk/platforms -s ~/git/FlowDroid/soot-infoflow-android/SourcesAndSinks.txt "

soot-infoflow-cmd-jar-with-dependencies.jar.zip

@amordahl
Copy link
Author

Hi Khaled, just following up on this issue. Let me know if there's anything else you need. Thanks!

@khaled-e-a
Copy link
Collaborator

Hi @amordahl , I am still working on this, I am facing a different issue
[Thread-40] ERROR heros.solver.CountingThreadPoolExecutor - Worker thread execution failed: 1
java.lang.ArrayIndexOutOfBoundsException: 1
at org.objectweb.asm.MethodWriter.visitParameterAnnotation(MethodWriter.java:697)

I am currently working on it, but have other projects to work on so the progress maybe slow. May I know are you able to slice other programs? is your work blocked by this issue?
Thank you for your patience

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants