DexFileFactory.writeDexFile produces invalid files
- Dominant language
- Java
- Stars
- 400
- Forks
- 67
- Avg merge
- 1d 2h
- Merged PRs (30d)
- 1
Description
Compile and run sample program that uses `DexRewriter` without any passes:
```java
import com.android.tools.smali.dexlib2.DexFileFactory;
import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile;
import com.android.tools.smali.dexlib2.iface.DexFile;
import com.android.tools.smali.dexlib2.rewriter.DexRewriter;
import com.android.tools.smali.dexlib2.rewriter.RewriterModule;
public class Main {
public static void main(String[] args) {
try {
DexBackedDexFile dexFile = DexFileFactory.loadDexFile("classes_original.dex", null);
DexRewriter rewriter = new DexRewriter(new RewriterModule());
DexFile newDexFile = rewriter.getDexFileRewriter().rewrite(dexFile);
DexFileFactory.writeDexFile("classes_rewritten.dex", newDexFile);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
```
Using smali library 3.0.7:
```shell
$ ls lib
smali-3.0.7.jar smali-baksmali-3.0.7.jar smali-dexlib2-3.0.7.jar smali-util-3.0.7.jar guava-33.2.1-jre.jar jcommander-1.64.jar
```
Try to disassemble `classes_original.dex` (success):
```shell
$ java -cp "lib\*" com.android.tools.smali.baksmali.Main dis -o classes_original_out classes_original.dex
```
Try to disassemble `classes_rewritten.dex` (failure):
```shell
$ java -cp "lib\*" com.android.tools.smali.baksmali.Main dis -o classes_rewritten_out classes_rewritten.dex
Error occurred while disassembling class LFC0; - skipping class
com.android.tools.smali.util.ExceptionWithContext: Invalid uleb128 integer encountered at offset 0x110642
at com.android.tools.smali.dexlib2.dexbacked.DexReader.readUleb128(DexReader.java:147)
at com.android.tools.smali.dexlib2.dexbacked.DexReader.readSmallUleb128(DexReader.java:118)
...
Error occurred while disassembling class LVL1; - skipping class
com.android.tools.smali.util.ExceptionWithContext: Invalid string index 1237382, not in [0, 19974)
at com.android.tools.smali.util.ExceptionWithContext.withContext(ExceptionWithContext.java:54)
at com.android.tools.smali.baksmali.Adaptors.MethodDefinition.(MethodDefinition.java:168)
...
Error occurred while disassembling class Landroidx.appcompat.widget.AppCompatTextView; - skipping class
com.android.tools.smali.util.ExceptionWithContext: Invalid string index 157401990, not in [0, 19974)
at com.android.tools.smali.util.ExceptionWithContext.withContext(ExceptionWithContext.java:54)
at com.android.tools.smali.baksmali.Adaptors.MethodDefinition.(MethodDefinition.java:168)
...
```
Download: [classes_original.dex](https://github.com/user-attachments/files/16130928/classes_original.zip)
Contributor guide
Assessment
This issue has not been assessed yet.