Hvad er DEX-filformatet?
En .dex-fil er en Dalvik Executable - en kompileret bytecode-container designet til at køre i Android-systemmiljøet. Den indeholder kompileret kode, der er klar til at blive eksekveret på Android, og blev oprindeligt fortolket af den virtuelle Dalvik-maskine. Siden Android 5.0 (Lollipop) har den moderne ART (Android Runtime) kompileret .dex-bytecode «ahead-of-time» i stedet for at fortolke den, men formatet forbliver standardformatet for eksekverbare filer på Android.
DEX-filer i APK-pakker
.dex-filer findes almindeligvis inde i APK-pakker, som bruges til at installere ny software på Android. Historisk set indeholdt hver APK en enkelt classes.dex-fil, der gemte alle klasser og metoder, som applikationen brugte. Større apps bruger nu «multidex» - hvor koden opdeles i classes.dex, classes2.dex, classes3.dex og så videre - for at overskride grænsen på 65.536 metoder, som en enkelt fil pålægger.
Generering og inspektion af DEX-filer
En .dex-fil kan genereres automatisk som en del af Android-build-processen eller manuelt. Den moderne værktøjskæde bruger d8-compileren (en del af Android SDK build-tools) til at oversætte Java- eller Kotlin-bytecode til .dex-format. Hver fil starter med den magiske signatur dex\n efterfulgt af et 3-cifret formatversionsnummer (såsom 035, 037, 038 eller 039) og en null-byte. Under installationen kompilerer ART yderligere .dex til maskinkode, hvilket producerer .odex- eller .vdex-filer, der gemmes på enheden.
Sikkerhed og tryghed
RISIKO: MEDIUMEn .dex i sig selv kører ikke på din PC, så det er lavrisiko blot at have en liggende. Den reelle kontekst er analyse af Android-malware: ondsindede apps skjuler deres logik i DEX (nogle gange indlæst dynamisk under kørsel), så en .dex, du har udtrukket fra en upålidelig APK, kan indeholde skadelig kode. Inspicer kun sådanne filer i et sikkert miljø (decompiler/sandbox), aldrig ved at installere den overordnede APK. Vær påpasselig med tvivlsomme «dex to exe / dex opener» download-sider - de gør intet legitimt og indeholder ofte adware.
Formatdetaljer
kort fortaltProgrammer der åbner DEX-filer
Tekniske detaljer
dyb specifikation| VM-arkitektur | Register-baseret (i modsætning til den stak-baserede JVM; hver DEX-instruktion navngiver eksplicit register-operander, hvilket reducerer det samlede antal instruktioner) |
| Magic bytes | 8 bytes ved fil-offset 0: ASCII «dex», linjeskift (0x0A), 3-cifret formatversion (f.eks. 035, 037, 038, 039), null-byte (0x00) |
| Formatversioner | 035 (Android 2.2), 037 (Android 7.0), 038 (Android 8.0), 039 (Android 9+); versionscifre er indlejret i den magiske header |
| Grænse for metodeindeks | 65.536 metoder pr. .dex-fil (16-bit metodereferenceindeks); apps, der overskrider dette, opdeler koden i classes2.dex, classes3.dex osv. |
| Integritetsfelter | Headeren indeholder en Adler-32-tjeksum og en 20-byte SHA-1-signatur, der tilsammen dækker resten af filen |
| String pool | Alle streng-literaler gemmes én gang i en delt, deduplikeret streng-pool; bytecode refererer til strenge via heltalsindeks |
| Byte-orden | Little-endian som standard; headeren indlejrer endianness-konstanten 0x12345678 for at muliggøre detektering af omvendt byte-orden |
| Kildesprog | Java og Kotlin (og ethvert sprog målrettet JVM); d8-compileren konverterer .class-bytecode eller .jar-arkiver til DEX |
| Build-time compiler | d8 (Android SDK build-tools 28.0.1+) erstattede det forældede dx-værktøj; tager JVM .class-filer eller .jar-arkiver som input |
| ART ahead-of-time kompilation | Ved installationstidspunktet konverterer ART's dex2oat .dex til maskinkode og gemmer resultaterne som .odex / .oat-filer i /data/dalvik-cache |
| MIME-type | application/octet-stream (der findes ingen dedikeret registreret MIME-type for DEX-formatet) |
| Eksekveringshistorik | Fortolket af Dalvik VM med JIT (Android 1.0-4.4); ahead-of-time + profil-guidet JIT kompileret af ART (Android 5.0+) |
| Disassemblering og dekompilering | baksmali disassemblerer .dex til Smali-assembly; jadx og lignende værktøjer dekompilerer .dex tilbage til læsbar Java-kildekode |
| Placering inde i APK | Gemt ukomprimeret inde i APK ZIP-arkivet; den primære indgang hedder altid classes.dex, med classes2.dex og fremad for multidex-apps |
| Udgivet | 2008 (Android 1.0; Dalvik VM, executed by ART since Android 5.0) |
| Åben standard | Ja · royaltyfri |
| Specifikation | source.android.com |
DEX-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om DEX-filer.