Dalvik çalıştırılabilir talimat formatları

Bu sayfa, Dalvik çalıştırılabilir (DEX) formatı ve Dalvik bayt kodu tarafından kullanılan talimat formatlarını listeler. Bayt kodu referans belgesiyle birlikte kullanılması amaçlanmıştır.

Bit bazında açıklamalar

Biçim tablosundaki ilk sütun, biçimin bit düzeyinde düzenini listeler. Her biri 16 bitlik bir kod birimini tanımlayan bir veya daha fazla boşlukla ayrılmış "kelimeden" oluşur. Bir sözcükteki her karakter, okumaya yardımcı olmak için serpiştirilmiş dikey çubuklarla (" | ") yüksek bitlerden düşüğe doğru okunan dört biti temsil eder. " A " harfinden itibaren sıralanan büyük harfler, format içindeki alanları belirtmek için kullanılır (bunlar daha sonra sözdizimi sütunu tarafından daha ayrıntılı olarak tanımlanır). " op " terimi, sekiz bitlik bir işlem kodunun format içindeki konumunu belirtmek için kullanılır. Belirtilen konumda tüm bitlerin sıfır olması gerektiğini belirtmek için kesikli sıfır (" Ø ") kullanılır.

Çoğunlukla, harflendirme önceki kod birimlerinden sonraki kod birimlerine ve bir kod birimi içinde düşük düzeyden yüksek düzeye doğru ilerler. Ancak bu genel kuralın birkaç istisnası vardır ve bunlar, benzer anlamdaki parçaların isimlendirilmesinin farklı talimat formatlarında aynı olmasını sağlamak için yapılır. Bu durumlar format açıklamalarında açıkça belirtilmiştir.

Örneğin, " B|A| op CCCC " formatı, formatın iki adet 16 bitlik kod biriminden oluştuğunu belirtir. İlk kelime, düşük sekiz bitteki işlem kodundan ve yüksek sekiz bitteki bir çift dört bitlik değerden oluşur; ve ikinci kelime 16 bitlik tek bir değerden oluşur.

Kimlikleri biçimlendir

Format tablosundaki ikinci sütun, diğer belgelerde ve kodda formatı tanımlamak için kullanılan formatın kısa tanımlayıcısını gösterir.

Çoğu format kimliği üç karakterden, iki rakamdan ve ardından bir harften oluşur. İlk hane, formattaki 16 bitlik kod birimlerinin sayısını gösterir. İkinci hane, formatın içerdiği maksimum kayıt sayısını belirtir (bazı formatlar değişken sayıda kayıt barındırabildiğinden maksimum), " r " özel tanımı, bir kayıt aralığının kodlandığını belirtir. Son harf, format tarafından kodlanan herhangi bir ekstra verinin türünü yarı anımsatıcı olarak belirtir. Örneğin, " 21t " formatı iki uzunluktadır, bir kayıt referansı içerir ve ayrıca bir dal hedefi içerir.

Önerilen statik bağlantı formatlarında ek bir " s " son eki bulunur, bu da onları toplamda dört karakter yapar. Benzer şekilde, önerilen "satır içi" bağlantı formatlarında ek bir " i " son eki bulunur. (Bu bağlamda, satır içi bağlantı, bir makinenin uygulamasına daha doğrudan bağlantıların olması dışında statik bağlantıya benzer.) Son olarak, önerilen birkaç tuhaf format (örneğin, " 20bc "), her ikisi de format kimliğinde temsil edilen iki veri parçasını içerir. .

Typecode harflerinin tam listesi aşağıdaki gibidir. Bazı formların formata bağlı olarak farklı boyutları olduğunu unutmayın:

anımsatıcı Bit Boyutları Anlam
B 8 anında imzalanmış bayt
C 16, 32 sabit havuz indeksi
F 16 arayüz sabitleri (yalnızca statik olarak bağlantılı formatlarda kullanılır)
H 16 anında imzalı h at (32 veya 64 bitlik bir değerin yüksek dereceli bitleri; düşük dereceli bitlerin tümü 0 )
Ben 32 anında imzalı i nt veya 32 bit kayan nokta
ben 64 anında imzalı uzun veya 64 bit çift
M 16 yöntem sabitleri (yalnızca statik olarak bağlantılı formatlarda kullanılır)
N 4 hemen imzalı n ibble
S 16 hemen imzalandı kısa
T 8, 16, 32 şube hedefi
X 0 ek veri yok

Sözdizimi

Format tablosunun üçüncü sütunu, belirtilen formatı kullanan talimatlar için insan odaklı sözdizimini gösterir. Her talimat, adlandırılmış işlem koduyla başlar ve isteğe bağlı olarak, kendileri de virgülle ayrılmış bir veya daha fazla bağımsız değişkenle takip edilir.

Bir argümanın ilk sütundaki bir alana gönderme yaptığı her yerde, o alanın harfi sözdiziminde belirtilir ve alanın her dört biti için bir kez tekrarlanır. Örneğin, ilk sütunda " BB " olarak etiketlenen sekiz bitlik bir alan, sözdizimi sütununda da " BB " olarak etiketlenecektir.

Bir kaydı adlandıran argümanlar " v X " biçimindedir. Daha yaygın olan " v " yerine " r " ön eki, Dalvik Yürütülebilir formatının uygulanabileceği (sanal olmayan) mimarilerle çakışmayı önlemek için seçildi; bu mimariler, kendi kayıtları için " r " ön ekini kullanıyordu. (Yani bu karar, dolaylı anlatımlara gerek kalmadan hem sanal hem de gerçek kayıtlardan bir arada bahsetmeyi mümkün kılmaktadır.)

Bir değişmez değeri belirten bağımsız değişkenler " #+ X " biçimindedir. Bazı formatlar, yüksek dereceli bitlerinde yalnızca sıfır olmayan bitlere sahip olan değişmez değerleri belirtir; bunlar için sıfırlar, bit düzeyinde gösterimde görünmeseler bile sözdiziminde açıkça temsil edilir.

Göreceli talimat adresi uzaklığını gösteren bağımsız değişkenler " + X " biçimindedir.

Gerçek bir sabit havuz indeksini belirten bağımsız değişkenler " kind @ X " biçimindedir; burada " kind " hangi sabit havuza atıfta bulunulduğunu belirtir. Böyle bir formatı kullanan her işlem kodu açıkça yalnızca bir tür sabite izin verir; yazışmayı anlamak için işlem kodu referansına bakın. Sabit havuz türleri şunlardır: " string " (dize havuzu dizini), " type " (tür havuzu dizini), " field " (alan havuzu dizini), " meth " (yöntem havuzu dizini) ve " site " (çağrı sitesi dizini) ).

Sabit havuz endekslerinin temsiline benzer şekilde, önceden bağlantılı ofsetleri veya endeksleri gösteren önerilen (isteğe bağlı) formlar da vardır. Önerilen önceden bağlantılı değerin iki türü vardır: vtable uzaklıkları (" vtaboff " olarak gösterilir) ve alan uzaklıkları (" fieldoff " olarak gösterilir).

Bir biçim değerinin açıkça sözdiziminin bir parçası olmadığı ancak bunun yerine bir değişken seçtiği durumlarda, her değişken, yazışmayı belirtmek için " [ X = N ] " (örneğin, " [A=2] ") önekiyle listelenir. .

Formatlar

Biçim İD Sözdizimi Kapsanan Önemli Opcode'lar
Yok 00x N/A kullanılmayan işlem kodları için kullanılan sözde format; kesme noktası işlem kodu için nominal format olarak kullanılması önerilir
ØØ| operasyon 10x op
B|A| operasyon 12x op vA, vB
11n op vA, #+B
AA| operasyon 11x op vAA
10 ton op +AA git
ØØ| op AAAA 20 ton op +AAAA git/16
AA| BBBB'den MÖ 20 op AA, tür@BBBB Statik olarak belirlenen doğrulama hataları için önerilen format; A, hatanın türüdür ve B, türe uygun bir tablonun indeksidir (örneğin, böyle bir yöntem olmayan hata için yöntem referansları)
AA| BBBB'den 22x op vAA, vBBBB
21.00 op vAA, +BBBB
21'ler op vAA, #+BBBB
21 saat op vAA, #+BBBB0000
op vAA, #+BBBB000000000000
21c op vAA, @BBBB yazın
op vAA, field@BBBB
op vAA, method_handle@BBBB
op vAA, proto@BBBB
op vAA, string@BBBB
kontrol dökümü
const sınıfı
const-yöntem-tanıtıcı
const-yöntem türü
const-string
AA| op CC|BB 23x op vAA, vBB, vCC
22b op vAA, vBB, #+CC
B|A| CCCC'nin kullanımı 22 ton op vA, vB, +CCCC
22'li yaşlar op vA, vB, #+CCCC
22c op vA, vB, type@CCCC
op vA, vB, alan@CCCC
örneği
22cs op vA, vB, fieldoff@CCCC 22c formatındaki statik olarak bağlantılı alan erişim talimatları için önerilen format
ØØ| op AAAA lo AAAA merhaba 30 ton op +AAAAAAAA git/32
ØØ| op AAAA BBBB 32x op vAAAA, vBBBB
AA| op BBBB ve BBBB merhaba 31i op vAA, #+BBBBBBBB
31 ton op vAA, +BBBBBBBB
31c op vAA, string@BBBBBBBB const-string/jumbo
A|G| BBBB F|E|D|C'de 35c [ A=5 ] op {vC, vD, vE, vF, vG}, meth@BBBB
[ A=5 ] op {vC, vD, vE, vF, vG}, site@BBBB
[ A=5 ] op {vC, vD, vE, vF, vG}, type@BBBB
[ A=4 ] op {vC, vD, vE, vF}, kind @BBBB
[ A=3 ] op {vC, vD, vE}, kind @BBBB
[ A=2 ] op {vC, vD}, kind @BBBB
[ A=1 ] op {vC}, kind @BBBB
[ A=0 ] op {}, kind @BBBB

Buradaki harflerdeki alışılmadık seçim, sayım ve referans indeksinin 3rc formatındakiyle aynı etikete sahip olması isteğini yansıtıyor.

35ms [ A=5 ] op {vC, vD, vE, vF, vG}, vtaboff@BBBB
[ A=4 ] op {vC, vD, vE, vF}, vtaboff@BBBB
[ A=3 ] op {vC, vD, vE}, vtaboff@BBBB
[ A=2 ] op {vC, vD}, vtaboff@BBBB
[ A=1 ] op {vC}, vtaboff@BBBB

Buradaki harflerdeki olağandışı seçim, sayım ve referans indeksinin 3rms formatındakiyle aynı etikete sahip olması isteğini yansıtıyor.

35c biçimindeki statik olarak bağlantılı invoke-virtual ve invoke-super talimatları için önerilen format
35 mil [ A=5 ] op {vC, vD, vE, vF, vG}, inline@BBBB
[ A=4 ] op {vC, vD, vE, vF}, inline@BBBB
[ A=3 ] op {vC, vD, vE}, inline@BBBB
[ A=2 ] op {vC, vD}, inline@BBBB
[ A=1 ] op {vC}, satır içi@BBBB

Buradaki harflerdeki alışılmadık seçim, sayım ve referans indeksinin 3rmi formatındakiyle aynı etikete sahip olması isteğini yansıtıyor.

35c biçiminin satır içi bağlantılı invoke-static ve invoke-virtual talimatları için önerilen format
AA| BBBB CCCC'den 3rc op {vCCCC .. vNNNN}, meth@BBBB
op {vCCCC .. vNNNN}, site@BBBB
op {vCCCC .. vNNNN}, @BBBB yazın

burada NNNN = CCCC+AA-1 , yani A 0..255 sayısını belirler ve C ilk kaydı belirler

3rms op {vCCCC .. vNNNN}, vtaboff@BBBB

burada NNNN = CCCC+AA-1 , yani A 0..255 sayısını belirler ve C ilk kaydı belirler

3rc formatındaki statik olarak bağlantılı invoke-virtual ve invoke-super talimatları için önerilen format
3rmi op {vCCCC .. vNNNN}, satır içi@BBBB

burada NNNN = CCCC+AA-1 , yani A 0..255 sayısını belirler ve C ilk kaydı belirler

3rc biçimindeki satır içi bağlantılı invoke-static ve invoke-virtual talimatları için önerilen format
A|G| BBBB F|E|D|C HHHH'de 45cc [ A=5 ] op {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH
[ A=4 ] op {vC, vD, vE, vF}, meth@BBBB, proto@HHHH
[ A=3 ] op {vC, vD, vE}, meth@BBBB, proto@HHHH
[ A=2 ] op {vC, vD}, meth@BBBB, proto@HHHH
[ A=1 ] op {vC}, meth@BBBB, proto@HHHH
çağırma-polimorfik
AA| BBBB CCCC'den HHHH 4rcc op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH

burada NNNN = CCCC+AA-1 , yani A 0..255 sayısını belirler ve C ilk kaydı belirler

çağırma-polimorfik/aralık
AA| BBBB ve BBBB BBBB BBBB merhaba 51 litre op vAA, #+BBBBBBBBBBBBBBBB yapı çapında