ملف .dex هو تنسيق النقل لرمز Dalvik البرمجي. هناك قيود نحوية ودلالية معيّنة لكي يكون الملف صالحًا بتنسيق .dex، ويجب استخدام وقت تشغيل لتفعيل ملفات  .dex الصالحة فقط.
القيود العامة لسلامة ملفات  .dex
ترتبط قيود السلامة العامة بالبنية الأكبر لملف
    .dex، كما هو موضّح بالتفصيل في تنسيق .dex.
| المعرّف | الوصف | 
|---|---|
| G1 | يجب أن يكون رقم magicلملف.dexهوdex\n035\0للإصدار 35 أو رقم مشابه للإصدارات الأحدث. | 
| G2 | يجب أن يكون الملخّص هو ملخّص Adler-32 لمحتوى الملف بالكامل
          باستثناء حقلَي magicوchecksum. | 
| G3 | يجب أن يكون التوقيع عبارة عن تجزئة SHA-1 لمحتوى الملف بالكامل باستثناء magicchecksumوsignature. | 
| G4 | يجب أن يتطابق  يجب أن يشير الرمز  | 
| G5 | يجب أن تكون قيمة  يجب أن تكون قيمة  | 
| G6 | يجب أن يكون endian_tagإمّا بالقيمة:ENDIAN_CONSTANTأوREVERSE_ENDIAN_CONSTANT | 
| G7 | في كلّ من الأقسام  
            يجب أن يكون الحقلان  | 
| G8 | يجب أن تكون جميع حقول البادئة في العنوان باستثناء map_offمحاذية بأربعة بايت. | 
| G9 | يجب أن يكون حقل map_offإما صفرًا أو يشير إلى قسم data. في الحالة الأخيرة، يجب أن يكون قسمdataمتوفّرًا. | 
| G10 | يجب ألا يتداخل أيّ من أقسام linkوstring_idstype_idsوproto_idsوfield_idsmethod_idsوclass_defsوdataمع بعضها أو مع العنوان. | 
| G11 | إذا كانت الخريطة متوفّرة، يجب أن يكون لكل إدخال في الخريطة نوع صالح. يمكن أن يظهر كل نوع مرة واحدة على الأكثر. | 
| G12 | إذا كانت الخريطة متوفّرة، يجب أن يحتوي كل إدخال في الخريطة على إزاحة و
          حجم غير صفريَين. يجب أن يشير البادئة إلى القسم المقابل في الملف (أي أنّه يجب أن يشير الرمز string_id_itemإلى القسمstring_ids) ويجب أن يتطابق الحجم الصريح أو
          الضمني للعنصر مع المحتوى الفعلي للقسم
          وحجمه. | 
| G13 | إذا كانت الخريطة متوفّرة، يجب أن تكون إزاحة إدخال الخريطة n+1أكبر من أو
          تساوي إزاحة إدخال الخريطةn plus than size of map entry n. ويشير ذلك إلى
          إدخالات غير متداخلة وترتيب من الأدنى إلى الأعلى. | 
| G14 | يجب أن تحتوي الأنواع التالية من الإدخالات على بدء
          مُحاذاة لأربعة بايت: string_id_item،type_id_item،proto_id_item،field_id_item،method_id_item،class_def_item،type_list،code_item،annotations_directory_item. | 
| G15 | لكل  يجب أن يكون الحقل   بالنسبة إلى  | 
| G16 | يجب أن يحتوي الحقل descriptor_idxعلى مرجع
          صالح في قائمةstring_idsلكلtype_id_item. يجب أن تكون السلسلة المُشار إليها وصفًا صالحًا لنوع
          معيّن. | 
| G17 | يجب أن يحتوي الحقل shorty_idxعلى مرجع
          صالح في قائمةstring_idsلكلproto_id_item. يجب أن تكون السلسلة المُشار إليها وصفًا مختصًا
          وصالحًا لرابط Shorty. يجب أيضًا أن يكون الحقلreturn_type_idxفهرسًا صالحًا في
          القسمtype_ids، ويجب أن يكون الحقلparameters_offإما صفرًا أو
          إزاحة صالحة تشير إلى القسمdata. إذا كانت غير صفرية، يجب ألّا تحتوي قائمة المَعلمات
          على أي إدخالات غير صالحة. | 
| G18 | لكل field_id_item، يجب أن يكون الحقلانclass_idxوtype_idxفهرسَين صالحَين في قائمةtype_ids. يجب أن يكون الإدخال الذي يشير إليهclass_idxمن النوع "مرجع غير مصفوفة". بالإضافة إلى ذلك، يجب أن يكون الحقلname_idxمرجعًا صالحًا إلى قسمstring_ids، ويجب أن تكون محتويات الإدخال المُشار إليه
          متوافقة مع مواصفاتMemberName. | 
| G19 | بالنسبة إلى كل method_id_item، يجب أن يكون الحقلclass_idxفهرسًا صالحًا
          في قسمtype_ids، ويجب أن يكون الإدخال المُشار إليه من النوع
          غير مصفوفة. يجب أن يكون الحقلproto_idمرجعًا صالحًا في قائمةproto_ids. يجب أن يكون الحقلname_idxمرجعًا صالحًا إلى قسمstring_ids،
          ويجب أن تكون محتويات الإدخال المُشار إليه متوافقة مع مواصفاتMemberName. | 
| مجموعة العشرين | يجب أن يكون الحقل class_idxفهرسًا صالحًا
          في قائمةtype_idsلكلfield_id_item. يجب أن يكون الإدخال المُشار إليه من نوع مرجع
          غير مصفوفة. | 
قيود الرمز البرمجي الثابت
القيود الثابتة هي قيود مفروضة على عناصر فردية من الرمز الثنائي. ويمكن عادةً التحقّق منها بدون استخدام أساليب التحكّم أو تحليل تدفق البيانات.
| المعرّف | الوصف | 
|---|---|
| الإكسسوار 1 | يجب ألا تكون صفيف insnsفارغًا. | 
| الإكسسوار 2 | يجب أن يكون فهرس الأوامر البرمجية الأولى في مصفوفة insnsهو صفر. | 
| الإكسسوار 3 | يجب أن تحتوي مصفوفة insnsعلى أوامر التشغيل الصالحة فقط لنظام Dalvik. | 
| الإكسسوار 4 | يجب أن يكون فهرس التعليمة n+1مساويًا لفهرس
          التعليمةnبالإضافة إلى طول التعليمةn، مع الأخذ في الاعتبار المُعامِلات المحتمَلة. | 
| الإكسسوار 5 | يجب أن تنتهي التعليمة الأخيرة في صفيف insnsعند الفهرسinsns_size-1. | 
| الإكسسوار 6 | يجب أن تكون جميع استهدافات gotoوif-<kind>رموزًا تشغيلية ضمن الطريقة نفسها. | 
| الإكسسوار 7 | يجب أن تكون جميع استهدافات تعليمات packed-switchهي
          أوامر تشغيل ضمن الطريقة نفسها. يجب أن يكون حجم الاستهدافات وقائمة الاستهدافات
          متّسقَين. | 
| الإكسسوار 8 | يجب أن تكون جميع استهدافات تعليمات sparse-switchهي
          أوامر تشغيل ضمن الطريقة نفسها. يجب أن يكون الجدول المقابل
          متسقًا ومُرتَّبًا من الأدنى إلى الأعلى. | 
| الإكسسوار 9 | يجب أن يكون الم Operand Bلتعليماتconst-stringوconst-string/jumboفهرسًا صالحًا
          في مجموعة الثوابت السلاسل. | 
| الإكسسوار 10 | يجب أن يكون المُشغِّل Cلتعليماتiget<kind>وiput<kind>فهرسًا صالحًا في
          مجموعة الثوابت للحقول. يجب أن يمثّل الإدخال المُشار إليه حقل مثيل. | 
| الإكسسوار 11 | يجب أن يكون المُشغِّل Cلتعليماتsget<kind>وsput<kind>فهرسًا صالحًا في
          مجموعة الثوابت للحقول. يجب أن يمثّل الإدخال المُشار إليه حقلًا ثابتًا. | 
| الإكسسوار 12 | يجب أن يكون الم Operand Cلتعليماتinvoke-virtualوinvoke-superوinvoke-directوinvoke-staticفهرسًا صالحًا في
          مجموعة الثوابت الخاصة بالطريقة. | 
| الإكسسوار 13 | يجب أن يكون الم Operand Bلتعليماتinvoke-virtual/rangeinvoke-super/rangeوinvoke-direct/rangeinvoke-static/rangeفهرسًا صالحًا
          في مجموعة الثوابت الخاصة بالطريقة. | 
| الإكسسوار 14 | يجب ألا يتم استدعاء أسلوب يبدأ اسمه بـ '<' إلا
          بشكل ضمني من خلال الآلة الافتراضية، وليس من خلال رمز برمجي مصدره ملف .dex. الوحيد
          هو مثبّت المثيل الذي يمكن استدعاؤه باستخدامinvoke-direct. | 
| الإكسسوار 15 | يجب أن يكون الم Operand Cلتعليماتinvoke-interfaceفهرسًا صالحًا في مجموعة الثوابت الخاصة بالطريقة. يجب أن ينتمي الرمز المرجعيmethod_idإلى واجهة (وليس إلى صف). | 
| الإكسسوار 16 | يجب أن يكون الم Operand Bلتعليماتinvoke-interface/rangeفهرسًا صالحًا في مجموعة الثوابت الخاصة بالطريقة.
          يجب أن ينتمي العنصرmethod_idالمُشار إليه إلى واجهة (وليس
          فئة). | 
| الإكسسوار 17 | يجب أن يكون المعامل Bلتعليماتconst-classcheck-castوnew-instancefilled-new-array/rangeفهرسًا صالحًا
          في مجموعة الثابتة للأنواع. | 
| الإكسسوار 18 | يجب أن يكون المعامل Cلتعليماتinstance-ofnew-arrayوfilled-new-arrayفهرسًا صالحًا في مجموعة الثابتة للأنواع. | 
| الإكسسوار 19 | يجب أن تكون أبعاد الصفيف الذي تم إنشاؤه باستخدام new-arrayأقل من256. | 
| الإكسسوار 20 | يجب ألا يشير newإلى فئات المصفوفات
          أو الواجهات أو الفئات المجردة. | 
| A21 | يجب أن يكون النوع المُشار إليه في تعليمات new-arrayنوعًا صالحًا غير مرجعي. | 
| A22 | يجب أن تكون جميع السجلات التي تشير إليها التعليمات بعرض واحد
          (غير زوجي) صالحة للطريقة الحالية. وهذا يعني أنّه
          يجب أن تكون فهارسها غير سالبة وأصغر من registers_size. | 
| A23 | يجب أن تكون جميع السجلات التي يشير إليها أحد التعليمات بعرض مزدوج (زوج)
          صالحة للطريقة الحالية. وهذا يعني أنّ فهارسها
          يجب أن تكون غير سالبة وأصغر من registers_size-1. | 
| A24 | يجب أن ينتمي عامل التشغيل method_idلتعليماتinvoke-virtualوinvoke-directإلى فئة
          (وليس واجهة). في ملفات Dex قبل الإصدار037يجب أن يكون الأمر نفسه صحيحًا بشأن تعليماتinvoke-superinvoke-static. | 
| A25 | يجب أن ينتمي عامل التشغيل method_idلتعليماتinvoke-virtual/rangeوinvoke-direct/rangeإلى فئة
          (وليس واجهة). في ملفات Dex قبل الإصدار037يجب أن يكون الأمر نفسه صحيحًا بشأن تعليماتinvoke-super/rangeوinvoke-static/range. | 
قيود الرمز البرمجي الهيكلي
القيود الهيكلية هي قيود على العلاقات بين عدة عناصر من الرمز البرمجي. ولا يمكن عادةً التحقّق منها بدون استخدام أساليب التحكّم أو تحليل تدفق البيانات.
| المعرّف | الوصف | 
|---|---|
| B1 | يجب أن يتطابق عدد الوسيطات وأنواعها (السجلات والقيم الفورية) دائمًا مع التعليمات. | 
| B2 | يجب عدم تقسيم أزواج السجلات مطلقًا. | 
| B3 | يجب تحديد سجلّ (أو زوج) أولاً قبل أن تتم قراءة القيمة. | 
| B4 | يجب أن يستدعي invoke-directتعليمات مثبِّت
          قيمة أو طريقة في الصف الحالي أو أحد
          الصفوف العليا فقط. | 
| B5 | يجب عدم استدعاء عنصر تنشيط العنصر إلا على مثيل لم يتم إعداده. | 
| ب6 | لا يمكن استدعاء طرق المثيل إلا على حقول المثيل، ولا يمكن الوصول إليها إلا على المثيلات التي سبق بدء تشغيلها. | 
| B7 | يجب عدم استخدام السجلّ الذي يحتوي على نتيجة new-instanceإذا تم تنفيذnew-instanceالتوجيه نفسه مرة أخرى قبل
          بدء تشغيل المثيل. | 
| B8 | يجب أن يستدعي مُنشئ مثيل مُنشئ مثيل آخر (النوع
           نفسه أو الفئة الفائقة) قبل الوصول إلى أيٍّ من أعضاء المثيل.
           الاستثناءات هي حقول المثيل غير المُكتسَبة، والتي يمكن تعيينها
           قبل استدعاء أداة إعداد أخرى، و Objectclass
           بشكل عام. | 
| B9 | يجب أن تكون جميع وسيطات الطريقة الفعلية متوافقة مع عملية التحديد مع الوسائط الرسمية المقابلة لها. | 
| B10 | في كلّ استدعاء لطريقة مثيل، يجب أن يكون المثيل الفعلي متوافقًا مع القيمة المحدّدة في العبارة في عملية الربط بالفئة أو الواجهة. | 
| B11 | يجب أن تتطابق تعليمات return<kind>مع نوع القيمة المعروضة
           في طريقة الإجراء. | 
| ب12 | عند الوصول إلى الأعضاء المحمية في فئة رئيسية، يجب أن يكون النوع الفعلي للمثيل الذي يتم الوصول إليه هو إما الفئة الحالية أو أحد الفئات الفرعية لها. | 
| B13 | يجب أن يكون نوع القيمة المخزّنة في حقل ثابت متوافقًا مع نوع الحقل أو قابلاً للتحويل إليه. | 
| B14 | يجب أن يكون نوع القيمة المخزّنة في حقل متوافقًا مع عملية التحديد أو قابلاً للتحويل إلى نوع الحقل. | 
| B15 | يجب أن يكون نوع كل قيمة مخزّنة في مصفوفة متوافقًا مع نوع مكوّنات المصفوفة من حيث التخصيص. | 
| B16 | يجب أن يكون الم Operand Aلتعليماتthrowمتوافقًا معjava.lang.Throwableمن حيث التخصيص. | 
| B17 | يجب أن يكون آخر تعليمات يمكن الوصول إليها في إحدى الطرق إما تعليمات gotoأو فرعreturnأوthrow. يجب ألا يكون من الممكن ترك صفيفinsnsفي أسفل الصفحة. | 
| B18 | قد لا تتم قراءة النصف غير المحدَّد من زوج السجلّ السابق (يُعتبَر غير صالح) إلى أن تتم إعادة تحديده من خلال بعض التعليمات الأخرى. | 
| ب19 | يجب أن يسبق move-result<kind>مباشرةً (في صفيفinsns)invoke-<kind>(في صفيفinsns). الاستثناء الوحيد هو
          الأمرmove-result-object، الذي قد يسبقه أيضًا
          الأمرfilled-new-array. | 
| B20 | يجب أن يسبق move-result<kind>مباشرةً (في تدفّق التحكّم الفعلي)return-<kind>مطابق (يجب عدم الانتقال إليه). الاستثناء الوحيد هو الأمرmove-result-objectالذي قد يسبقه أيضًا الأمرfilled-new-array. | 
| B21 | يجب ألا يظهر move-exceptionإلا كأول تعليمات
          في معالج استثناء. | 
| B22 | يجب ألا يكون بإمكان تدفّق التحكّم الوصول إلى التعليمات الزائفة packed-switch-dataوsparse-switch-dataوfill-array-data. |