[Soot-list] Erroneous array dimensions in Dex output?

Julian Schütte julian.schuette at gmx.net
Sat Jan 4 17:37:11 EST 2014


Hi all,

I am quite new to Soot, so I don't know if I'm running into a bug in
Soot/dexpler or if I'm doing sth wrong.
When creating an array of Strings in Soot, Dexpler seems to add one more
dimension than requested. As creating a 0-dimensional array results in a
RuntimeException in soot, this prevents me from creating a 1-dimensional
array in dex.

Usage:
   ArrayType arrayType = ArrayType.v(soot.RefType.v("java.lang.String"),
1);    // EXPECTING: One-dimensional array String[]
   Local array = Jimple.v().newLocal("myArray", arrayType);
   body.getLocals().add(array);
   NewArrayExpr newArrayExpr = Jimple.v().newNewArrayExpr(arrayType,
IntConstant.v(0));
   AssignStmt assignStmt = Jimple.v().newAssignStmt(array, newArrayExpr);
   generated.add(assignStmt);
   ...
   body.getUnits().insertBefore(generated, u);

Jimple output looks good:
   myArray = newarray (java.lang.String[])[0];

Dex output does not look good:
    new-array v0, v8, [[Ljava/lang/String;     // GOT: Two-dimensional
array String[][]
    move-object/from16 v18, v0                  // ??
    move-object/from16 v0, v18


Thanks for your help!
Julian



More information about the Soot-list mailing list