Vad är filformatet DEX?
En .dex-fil är en Dalvik Executable - en kompilerad bytecode-container utformad för att köras i Android-systemets miljö. Den innehåller kompilerad kod redo att köras på Android, och tolkades ursprungligen av den virtuella maskinen Dalvik. Sedan Android 5.0 (Lollipop) kompilerar den moderna ART (Android Runtime) .dex-bytecode i förväg (ahead-of-time) istället för att tolka den, men formatet förblir standardformatet för körbara filer i Android.
DEX-filer i APK-paket
.dex-filer hittas vanligtvis inuti APK-paket, vilka används för att installera ny programvara på Android. Historiskt sett innehöll varje APK en enda classes.dex-fil som lagrade alla klasser och metoder som användes av applikationen. Större appar använder nu multidex - vilket innebär att koden delas upp på classes.dex, classes2.dex, classes3.dex och så vidare - för att överskrida gränsen på 65 536 metoder som gäller för en enskild fil.
Generering och granskning av DEX-filer
En .dex-fil kan genereras automatiskt som en del av Androids byggprocess, eller manuellt. Den moderna verktygskedjan använder kompilatorn d8 (en del av Android SDK build-tools) för att översätta Java- eller Kotlin-bytecode till .dex-format. Varje fil inleds med den magiska signaturen dex\n följt av ett 3-siffrigt formatversionsnummer (såsom 035, 037, 038 eller 039) och en noll-byte. Under installationen kompilerar ART vidare .dex till maskinkod, vilket skapar .odex- eller .vdex-filer som lagras på enheten.
Säkerhet & trygghet
RISK: MEDIUMEn .dex i sig körs inte på din PC, så att bara ha en fil innebär låg risk. Det verkliga sammanhanget är analys av Android-skadeprogram: skadliga appar döljer sin logik i DEX (ibland laddad dynamiskt vid körning), så en .dex du extraherat från en osäker APK kan innehålla skadlig kod. Granska endast sådana filer i en säker miljö (dekompilator/sandbox), aldrig genom att installera ursprungs-APK:n. Var vaksam på skumma webbplatser som erbjuder nedladdning av «dex to exe / dex opener» - de gör inget legitimt och innehåller ofta adware.
Formatdetaljer
i ett nötskalProgram som öppnar DEX-filer
Tekniska detaljer
djup specifikation| VM-arkitektur | Registerbaserad (till skillnad från den stackbaserade JVM; varje DEX-instruktion namnger explicit registeroperander, vilket minskar det totala antalet instruktioner) |
| Magic bytes | 8 bytes vid filoffset 0: ASCII «dex», nyrad (0x0A), 3-siffrig formatversion (t.ex. 035, 037, 038, 039), noll-byte (0x00) |
| Formatversioner | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); versionssiffrorna är inbäddade i magic-headern |
| Gräns för metodindex | 65 536 metoder per .dex-fil (16-bitars metodreferensindex); appar som överskrider detta delar upp koden på classes2.dex, classes3.dex, etc. |
| Integritetsfält | Headern innehåller en Adler-32-kontrollsumma och en 20-byte SHA-1-signatur som tillsammans täcker resten av filen |
| String pool | Alla strängliteraler lagras en gång i en delad, deduplicerad strängpool; bytecode refererar till strängar via heltalsindex |
| Byte-ordning | Little-endian som standard; headern bäddar in endianness-konstanten 0x12345678 för att möjliggöra detektering av omvänd byte-ordning |
| Källspråk | Java och Kotlin (och alla språk som siktar på JVM); d8-kompilatorn konverterar .class-bytecode eller .jar-arkiv till DEX |
| Kompilator vid bygge | d8 (Android SDK build-tools 28.0.1+) ersatte det äldre dx-verktyget; tar JVM .class-filer eller .jar-arkiv som indata |
| ART ahead-of-time-kompilering | Vid installation konverterar ART:s dex2oat .dex till maskinkod och lagrar resultaten som .odex / .oat-filer i /data/dalvik-cache |
| MIME-typ | application/octet-stream (ingen dedikerad registrerad MIME-typ finns för DEX-formatet) |
| Exekveringshistorik | Tolkades av Dalvik VM med JIT (Android 1.0-4.4); ahead-of-time + profilguidad JIT-kompilerad av ART (Android 5.0+) |
| Disassemblering och dekompilering | baksmali disassemblerar .dex till Smali-assembler; jadx och liknande verktyg dekompilerar .dex tillbaka till läsbar Java-källkod |
| Plats inuti APK | Lagras okomprimerad inuti APK-filens ZIP-arkiv; huvudfilen heter alltid classes.dex, med classes2.dex och framåt för multidex-appar |
| Släppt | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Öppen standard | Ja · royaltyfri |
| Specifikation | source.android.com |
DEX-konverteringar
Frågor & svar
frågat av användareInga frågor än - bli den första att fråga om DEX-filer.