Hva er DEX-filformatet?
En .dex-fil er en Dalvik Executable - en kompilert bytekode-beholder designet for å kjøre i Android-systemmiljøet. Den inneholder kompilert kode klar til å kjøres på Android, og ble opprinnelig tolket av den virtuelle maskinen Dalvik. Siden Android 5.0 (Lollipop) har det moderne ART (Android Runtime) kompilert .dex-bytekode på forhånd (ahead-of-time) i stedet for å tolke den, men formatet forblir standardformatet for kjørbare filer i Android.
DEX-filer i APK-pakker
.dex-filer finnes vanligvis inne i APK-pakker, som brukes til å installere ny programvare på Android. Historisk sett inneholdt hver APK en enkelt classes.dex-fil som lagret alle klasser og metoder brukt av applikasjonen. Større apper bruker nå «multidex» - der koden deles opp i classes.dex, classes2.dex, classes3.dex og så videre - for å overstige grensen på 65 536 metoder som er pålagt en enkelt fil.
Generering og inspeksjon av DEX-filer
En .dex-fil kan genereres automatisk som en del av Android-byggprosessen, eller manuelt. Den moderne verktøykjeden bruker d8-kompilatoren (en del av Android SDK build-tools) for å oversette Java- eller Kotlin-bytekode til .dex-format. Hver fil starter med den magiske signaturen dex\n etterfulgt av et 3-sifret formatversjonsnummer (som 035, 037, 038 eller 039) og en null-byte. Under installasjon kompilerer ART .dex videre til maskinkode, noe som produserer .odex- eller .vdex-filer som lagres på enheten.
Sikkerhet og trygghet
RISIKO: MEDIUMEn .dex i seg selv kjører ikke på PC-en din, så det er lav risiko å bare ha en. Den reelle konteksten er analyse av skadevare for Android: ondsinnede apper skjuler logikken sin i DEX (noen ganger lastet dynamisk ved kjøring), så en .dex du har pakket ut fra en upålitelig APK kan inneholde skadelig kode. Inspiser kun slike filer i et trygt miljø (dekompilator/sandkasse), aldri ved å installere foreldre-APK-en. Vær skeptisk til tvilsomme «dex to exe / dex opener»-nedlastingssider - de gjør ingenting legitimt og inneholder ofte reklameprogramvare.
Formatdetaljer
i et nøtteskallProgrammer som åpner DEX-filer
Tekniske detaljer
dyp spesifikasjon| VM-arkitektur | Register-basert (i motsetning til den stakk-baserte JVM; hver DEX-instruksjon navngir eksplisitt register-operander, noe som reduserer totalt antall instruksjoner) |
| Magiske bytes | 8 bytes ved fil-offset 0: ASCII «dex», linjeskift (0x0A), 3-sifret formatversjon (f.eks. 035, 037, 038, 039), null-byte (0x00) |
| Formatversjoner | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); versjonssifrene er innebygd i den magiske headeren |
| Grense for metodeindeks | 65 536 metoder per .dex-fil (16-biters metodereferanseindeks); apper som overstiger dette deler koden over classes2.dex, classes3.dex, osv. |
| Integritetsfelt | Headeren inneholder en Adler-32 sjekksum og en 20-byte SHA-1 signatur som sammen dekker resten av filen |
| Streng-pool | Alle streng-literaler lagres én gang i en delt, deduplisert streng-pool; bytekode refererer til strenger via heltallsindeks |
| Byterekkefølge | Little-endian som standard; headeren inneholder endianness-konstanten 0x12345678 for å tillate deteksjon av omvendt byterekkefølge |
| Kildespråk | Java og Kotlin (og alle språk som målretter seg mot JVM); d8-kompilatoren konverterer .class-bytekode eller .jar-arkiver til DEX |
| Kompilator ved bygging | d8 (Android SDK build-tools 28.0.1+) erstattet det eldre dx-verktøyet; tar JVM .class-filer eller .jar-arkiver som input |
| ART ahead-of-time kompilering | Ved installasjonstidspunkt konverterer ARTs dex2oat .dex til maskinkode, og lagrer resultatene som .odex / .oat-filer i /data/dalvik-cache |
| MIME-type | application/octet-stream (det finnes ingen dedikert registrert MIME-type for DEX-formatet) |
| Kjøringshistorikk | Tolket av Dalvik VM med JIT (Android 1.0-4.4); ahead-of-time + profilveiledet JIT-kompilert av ART (Android 5.0+) |
| Disassemblering og dekompilering | baksmali disassemblerer .dex til Smali-assembly; jadx og lignende verktøy dekompilerer .dex tilbake til lesbar Java-kildekode |
| Plassering i APK | Lagret ukomprimert inne i APK ZIP-arkivet; hovedoppføringen heter alltid classes.dex, med classes2.dex og utover for multidex-apper |
| Utgitt | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | source.android.com |
DEX-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om DEX-filer.