يوضِّح هذا المستند تنسيق .dex
ومحتواه.
الملفات، والتي تُستخدم للاحتفاظ بمجموعة من تعريفات الفئة
البيانات الملحقة.
دليل الأنواع
الاسم | الوصف |
---|---|
بايت | تسجيل الدخول باستخدام نظام 8 بت |
بايت | تسجيل دخول بدون تسجيل دخول 8 بت |
فيديو قصير | إنترنت بتوقيع 16 بت، واجهة صغيرة |
قصير | 16 بت غير موقعة، بريد إلكتروني صغير |
تدخُّل دفاعي | اتصال داخلي بتوقيع 32 بت، واجهة صغيرة |
مهم | اتصال داخلي غير موقع 32 بت، واجهة صغيرة |
طويلة | إنترنت موقَّع بنظام 64 بت، واجهة صغيرة |
أولونغ | اتصال داخلي غير موقع 64 بت، واجهة صغيرة |
cannot translate | علامة LEB128 ذات طول متغيّر (انظر أدناه) |
يوليو 128 | LEB128 بدون توقيع، متغير الطول (انظر أدناه) |
uleb128p1 | LEB128 بدون توقيع بالإضافة إلى 1 ، متغير الطول (انظر أدناه) |
128 ليو روماني
LEB128 ("Little-Endian Base 128") هو
ترميز متغير الطول
الكميات الصحيحة العشوائية الموقعة أو غير الموقّعة. التنسيق كان
مستعارة من DWARF3
المواصفات. في ملف .dex
، لا يتم استخدام LEB128 إلا
ترميز كميات 32 بت.
تتألف كل قيمة LEB128 المشفرة من قيمة واحدة إلى خمس.
وحدات البايت، التي تمثل معًا قيمة 32 بت واحدة. على كل
للبايت مجموعة البت الأكثر أهمية باستثناء البايت الأخير في
والذي يكون أهم شيء واضح بعض الشيء. المتبقي
سبعة وحدات بت من كل بايت عبارة عن حمولة، بأقل أهمية سبعة
وحدات بت من الكمية في البايت الأول، والسبعة التالية في البايت الثاني
بايت وما إلى ذلك. في حال توقيع LEB128 (sleb128
):
أهم بيانات حمولة البيانات في البايت النهائي في التسلسل
علامات مدمَجة لإنتاج القيمة النهائية. في الحالة غير الموقعة
(uleb128
)، يتم التعامل مع أي وحدات بت لم يتم تمثيلها بشكل صريح
تم تفسيرها على أنها 0
.
رسم تخطيطي على مستوى البت لقيمة LEB128 ثنائية البايت | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
البايت الأول | البايت الثاني | ||||||||||||||
1 |
بت6 | بت5 | بت4 | بت3 | بت2 | بت1 | بت0 | 0 |
بت13 | بت12 | بت11 | بت10 | بت9 | بت8 | بت7 |
يتم استخدام الصيغة uleb128p1
لتمثيل علامة موقَّعة.
حيث يكون التمثيل بالقيمة plus one المشفرة
بصفتك uleb128
. سيجعل ذلك ترميز -1
(يمكن اعتبارها قيمة غير موقعة 0xffffffff
بدلاً من ذلك)
— ولكن لا يوجد رقم سالب آخر — أي بايت واحد
يكون مفيدًا في الحالات التي يجب فيها أن يكون الرقم الممثل إما
أن تكون غير سالبة أو -1
(أو 0xffffffff
)،
وحيث لا يُسمح بقيم سلبية أخرى (أو عندما يكون حجم كبير بدون توقيع
من غير المحتمل أن تكون هناك حاجة إليها).
في ما يلي بعض الأمثلة على التنسيقات:
تسلسل مشفر | باستخدام عنوان البريد الإلكتروني sleb128 |
باستخدام عنوان البريد الإلكتروني uleb128 |
باستخدام عنوان البريد الإلكتروني uleb128p1 |
---|---|---|---|
00 | 0 | 0 | -1 |
01 | 1 | 1 | 0 |
7f | -1 | 127 | 126 |
80 7f | -128 | 16256 | 16255 |
تنسيق الملف
الاسم | التنسيق | الوصف |
---|---|---|
عنوان | عنصر_رأس | الرأس |
معرّفات_السلاسل | سلسلة_معرّف_السلعة[] | قائمة معرفات السلاسل. هذه هي معرّفات لكل السلاسل يستخدمه هذا الملف، إما للتسمية الداخلية (مثل أدوات وصف الأنواع) أو ككائنات ثابتة يشار إليها بالرمز. يجب ترتيب هذه القائمة. حسب محتوى السلسلة، باستخدام قيم نقاط رمز UTF-16 (وليس في الحساسة باللغة المحلية)، ويجب ألا تحتوي على أي إدخالات مكررة. |
أرقام تعريف الأنواع | type_id_item[] | نوع قائمة معرفات المنتجات. وهي معرّفات لجميع الأنواع (الفئات
أو الصفائف أو الأنواع الأولية) التي يشير إليها هذا الملف، سواء تم تعريفها
في الملف أم لا. يجب ترتيب هذه القائمة حسب string_id .
الفهرس، ويجب ألا يحتوي على أي إدخالات مكررة.
|
معرّفات Proto | Proto_id_item[] | لمعرفات النماذج الأولية للطريقة. هذه معرّفات لكل
والنماذج الأولية المشار إليها بواسطة هذا الملف. يجب ترتيب هذه القائمة في
نوع الإرجاع (حسب فهرس type_id ) ترتيبًا رئيسيًا، ثم
حسب قائمة الوسيطات (الترتيب المعجم، الوسيطات الفردية)
مرتبة حسب فهرس type_id ). يجب ألّا يتم تضمين القائمة
تحتوي على أي إدخالات مكررة.
|
معرّف_حقل | حقل_معرّف_السلعة[] | معرفات الحقول. هذه أرقام تعريف لجميع الحقول.
الذين يشيرون إليه في هذا الملف، سواء تم تحديده فيه أم لا. هذا النمط
يجب ترتيب القائمة، حيث يكون النوع المحدَّد (حسب type_id )
الفهرس) هو الترتيب الرئيسي، اسم الحقل (حسب فهرس string_id )
تمثّل الترتيب المتوسط والنوع (حسب فهرس type_id )
هو الترتيب الثانوي. يجب ألا تحتوي القائمة على أي إدخالات مكررة.
|
معرفات_الطريقة | طريقة_معرّف_السلعة[] | معرفات طرق البحث. هذه معرّفات لجميع الطرق
الذين يشيرون إليه في هذا الملف، سواء تم تحديده فيه أم لا. هذا النمط
يجب ترتيب القائمة، حيث يكون النوع المحدَّد (حسب type_id )
الفهرس) هو الترتيب الرئيسي، اسم الطريقة (حسب string_id )
الفهرس) هو الترتيب المتوسط، وطريقة النموذج الأوّلي للطريقة (عن طريق
proto_id الفهرس) هو الترتيب الثانوي. يجب ألّا يتم تضمين القائمة
تحتوي على أي إدخالات مكررة.
|
تحديد_الفئة | class_def_item[] | قائمة تعريفات الفئات. ويجب ترتيب الفئات بحيث لا للفئة الفائقة والواجهات المنفذة في قائمة قبل فئة الإحالة. علاوة على ذلك، لا يمكن تعريفًا للفئة التي تحمل الاسم نفسه للظهور أكثر من مرة في من القائمة. |
أرقام تعريف_مواقع_الاتصال | call_site_id_item[] | قائمة معرفات المواقع للاتصال. هذه معرّفات لجميع المواقع الإلكترونية للاتصال
الذين يشيرون إليه في هذا الملف، سواء تم تحديده فيه أم لا. هذه القائمة
يجب الترتيب تصاعديًا بنسبة call_site_off .
|
الأسماء المعرِّفة للطرق | طريقة_المقبض_لعنصر[] | مقابض الطرق. قائمة بجميع الأسماء المعرِّفة للطرق المُشار إليها في هذا الملف، سواء تم تحديدها في الملف أم لا. لم يتم ترتيب هذه القائمة وقد تحتوي على التكرارات التي ستتجاوب منطقيًا مع حالات التعامل مع الطريقة المختلفة. |
بيانات | أوبايت[] | مساحة بيانات تحتوي على جميع بيانات الدعم للجداول الواردة أعلاه. العناصر المختلفة لها متطلبات محاذاة مختلفة، يتم إدراج وحدات البايت الخاصة بالمساحة المتروكة قبل كل عنصر إذا لزم الأمر لتحقيق المحاذاة الصحيحة. |
بيانات_الرابط | أوبايت[] | البيانات المستخدمة في الملفات المرتبطة بشكل ثابت. يُعد تنسيق البيانات في لم يتم تحديد هذا القسم في هذا المستند. هذا القسم فارغ في الملفات غير المرتبطة وعمليات تنفيذ بيئة التشغيل ويمكنهم استخدامه على النحو الذي تراه مناسبًا. |
تعريفات حقول Bitfield والسلسلة والثابت
ملف DEX_FILE_MAGIC
تم التضمين في header_item
الصفيفة/السلسلة الثابتة DEX_FILE_MAGIC
هي قائمة
وحدات البايت التي يجب أن تظهر في بداية الملف .dex
حتى يتم الاعتراف بها على أنها كذلك. تشير القيمة عن قصد
يحتوي على سطر جديد ("\n"
أو 0x0a
)
بايت خالية ("\0"
أو 0x00
) للمساعدة
في الكشف عن بعض أشكال التلف. تشير القيمة أيضًا
بترميز رقم إصدار التنسيق كثلاثة أرقام عشرية، وهي
من المتوقع أن يزداد بشكل رتيب بمرور الوقت مع تطور التنسيق.
ubyte[8] DEX_FILE_MAGIC = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x39 0x00 } = "dex\n039\0"
ملاحظة: دعم الإصدار 039
من
أُضيفت فيه الصيغة في إصدار Android 9.0، والذي قدّم نسختَين
رموز بايت جديدة، const-method-handle
و
const-method-type
(تم وصف كل منها في
ملخص مجموعة رموز البايت
). في Android 10، يوسّع الإصدار 039
تنسيق ملف DEX ليشمل الملفات المخفية.
معلومات واجهة برمجة التطبيقات التي لا تنطبق إلا على ملفات DEX على مسار فئة التشغيل.
ملاحظة: دعم الإصدار
تمت إضافة 038
من التنسيق في الإصدار 8.0 من Android.
. أضاف الإصدار 038
رموز بايت جديدة.
(invoke-polymorphic
وinvoke-custom
) بالإضافة إلى
بيانات مؤشرات الطرق.
ملاحظة: دعم الإصدار 037
من
تمت إضافة التنسيق في إصدار Android 7.0. قبل الإصدار 037
الأكثر
استخدمت إصدارات Android الإصدار 035
من التنسيق.
الفرق بين الإصدارين 035
و037
هو
إضافة الطرق التلقائية وتعديل invoke
.
ملاحظة: تحتوي نسختان سابقتان على الأقل من التنسيق على
تم استخدامها في إصدارات البرامج العامة المتاحة على نطاق واسع. على سبيل المثال:
تم استخدام الإصدار 009
في إصدارات M3 من
نظام Android الأساسي (من تشرين الثاني (نوفمبر) إلى كانون الأول (ديسمبر) 2007)
وتم استخدام الإصدار 013
في إصدارات M5 من Android
المنصة (فبراير - آذار (مارس) 2008). في العديد من الجوانب، كانت هذه
تختلف إصدارات التنسيق اختلافًا كبيرًا عن الإصدار الموضح في هذا
جلسة المراجعة.
ENDIAN_CONSTANT وREVERSE_ENDIAN_CONSTANT
تم التضمين في header_item
يُستخدم العدد الثابت ENDIAN_CONSTANT
للإشارة إلى
انتهاء صلاحية الملف الذي تم العثور عليه. وعلى الرغم من أن المعيار
تنسيق .dex
بسيط، وقد تحتاج عمليات التنفيذ إلى اختيار
لإجراء تبديل البايت. إذا صادفت عملية تنفيذ
عنوان يكون endian_tag
فيه REVERSE_ENDIAN_CONSTANT
بدلاً من ENDIAN_CONSTANT
، سيعرف أن الملف
تم استبداله بالبايت من النموذج المتوقع.
uint ENDIAN_CONSTANT = 0x12345678; uint REVERSE_ENDIAN_CONSTANT = 0x78563412;
NO_INDEX
تم تضمينها في class_def_item وdebug_info_item
يُستخدم العدد الثابت NO_INDEX
للإشارة إلى أنّ
عدم وجود قيمة فهرس.
ملاحظة: لم يتم تحديد قيمة هذه القيمة
0
، لأنّه في الواقع يكون فهرسًا صالحًا.
القيمة التي تم اختيارها لـ NO_INDEX
هي
يمكن تمثيلها كبايت واحد في ترميز uleb128p1
.
uint NO_INDEX = 0xffffffff; // == -1 if treated as a signed int
تعريفات Access_flags
وهي مضمّنة في class_def_item ومُستجدّ_حقل ومُشفَّر_method فئة InnerClass
تُستخدم الحقول البتية لهذه العلامات للإشارة إلى سهولة الوصول الخصائص العامة للفصول وأعضاء الفصل.
الاسم | القيمة | للصفوف (وInnerClass تعليقات توضيحية) |
للحقول | طرق |
---|---|---|---|---|
ACC_public | 1 x 0 | public : مرئي في كل مكان |
public : مرئي في كل مكان |
public : مرئي في كل مكان |
ACC_خاص | 0×2 | private : مرئي فقط للفئة المحدَّدة
|
private : مرئي فقط للفئة المحدَّدة |
private : مرئي فقط للفئة المحدَّدة |
ACC_PROTECTED | 0×4 | protected : مرئية للحزمة والفئات الفرعية
|
protected : مرئية للحزمة والفئات الفرعية |
protected : مرئية للحزمة والفئات الفرعية |
ACC_StatIC | 0×8 | static : لم يتم إنشاؤها باستخدام عنصر خارجي
مرجع this |
static : عامة إلى فئة محدّدة |
static : لا يمكن استخدام الوسيطة this |
التنسيق النهائي | 0x10 | final : غير قابلة للتصنيف الفرعي |
final : غير قابل للتغيير بعد الإنشاء |
final : لا يمكن إلغاءه |
ACC_SYNCHRONIZED | 0x20 | synchronized : تم تلقائيًا الحصول على القفل المرتبط
حول استدعاء هذه الطريقة. ملاحظة: لا يصلح هذا إلا لتحديد وقت
تم أيضًا ضبط |
||
ACC_VOLATILE | 0x40 | volatile : قواعد وصول خاصة للمساعدة في سلسلة المحادثات
الأمان |
||
ACC_BRIDGE | 0x40 | يتم إضافتها تلقائيًا بواسطة برنامج التحويل البرمجي كأسلوب آمن من حيث النوع جسر | ||
ACC_TRANSIENT | 0×80 | transient : عدم حفظه كتسلسل تلقائي |
||
ACC_VARARGS | 0×80 | يجب التعامل مع الوسيطة الأخيرة على أنها "استراحة" الوسيطة بواسطة برنامج التجميع | ||
محتوى أصلي | 0×100 | native : تم التنفيذ في الرمز البرمجي الأصلي |
||
ACC_INTERFACE | 0×200 | interface : فئة مجردة قابلة للتنفيذ |
||
ACC_ABSTRACT | 0×400 | abstract : غير قابل لإنشاء مثيل مباشرةً |
abstract : لم يتم التنفيذ من قِبل هذا الصف |
|
ACC_STRICT | 0×800 | strictfp : قواعد صارمة في حساب النقاط العائمة |
||
ترجمة | 0×1000 | لم يتم تحديده مباشرةً في رمز المصدر | لم يتم تحديده مباشرةً في رمز المصدر | لم يتم تحديده مباشرةً في رمز المصدر |
وصف | 0×2000 | تعريفها كفئة تعليق توضيحي | ||
ACC_ENUM | 0×4000 | تم الإعلان عنه كنوع تعداد. | تم الإعلان عنها كقيمة عددية | |
(غير مستخدم) | 0x8000 | |||
شهادة ACC_CONSTRUCTOR | 0×10000 | طريقة الدالة الإنشائية (مهيئ الفئة أو المثيل) | ||
ACC_decLARED_ متزامن |
0×20000 | التي تم الإعلان عنها في synchronized . ملاحظة: لن يكون لذلك أي تأثير في تنفيذ (بخلاف انعكاس هذه العلامة، في حد ذاتها). |
InnerClass
،
ويجب ألا يتم تفعيله مطلقًا في class_def_item
.
ترميز UTF-8 المعدَّل
لتسهيل الحصول على الدعم القديم، يجب استخدام تنسيق .dex
.
تعمل على ترميز بيانات سلسلتها بتنسيق UTF-8 القياسي المُعدَّل في الواقع، فيما يلي
باسم MUTF-8. هذا النموذج مماثل لمعيار UTF-8 القياسي، باستثناء:
- يتم استخدام الترميزات الأحادية وثنائية وثلاث بايت فقط.
- نقاط الرموز في النطاق
U+10000
... تم ترميزU+10ffff
كزوج بديل، لكل من والتي يتم تمثيلها كقيمة مشفرة ثلاثية البايت. - يتم ترميز نقطة الرمز
U+0000
بتنسيق ثنائي البايت. - تشير قيمة البايت الفارغة العادي (القيمة
0
) إلى نهاية سلسلة، كما هو الحال بالنسبة لتفسير لغة C.
يمكن تلخيص أول عنصرين أعلاه كما يلي: MUTF-8 هو تنسيق ترميز لـ UTF-16، بدلاً من أن يكون تنسيقًا مباشرًا أكثر لأحرف Unicode.
يتيح العنصران الأخيران أعلاه إمكانية تضمين
نقطة الرمز U+0000
في سلسلة مع معالجة
كسلسلة منتهية بقيمة فارغة على النمط C.
ومع ذلك، يعني الترميز الخاص لـ U+0000
أنه
UTF-8 العادي، نتيجة استدعاء الدالة C القياسية
السمة strcmp()
على زوج من سلاسل MUTF-8 لا تكون دائمًا
للإشارة إلى النتيجة الموقعة بشكل صحيح لمقارنة السلاسل غير المتساوية.
عندما يكون الطلب (وليس فقط المساواة) مصدر قلق، فإن الطريقة هي الأكثر وضوحًا
لمقارنة سلاسل MUTF-8 وهي فك ترميزها حرفًا بحرف،
والمقارنة بين القيم التي تم فك ترميزها (ومع ذلك، تتوفر عمليات تنفيذ أكثر
ممكن أيضًا).
يُرجى الرجوع إلى يونيكود المعيار لمزيد من المعلومات حول ترميز الأحرف. الترميز MUTF-8 أقرب إلى الترميز (الأقل شهرة نسبيًا) CESU-8 مقارنةً بـ UTF-8 في حد ذاته.
ترميز Encrypt_value
تم تضمينها في annotate_element وcoding_array_item
encoded_value
هو جزء مرمّز من (تقريبًا)
البيانات العشوائية الهيكلية. يهدف الترميز إلى
أن تكون مضغوطة ومباشرة في تحليلها.
الاسم | التنسيق | الوصف |
---|---|---|
(value_arg << 5) | نوع_القيمة | بايت | بايت يشير إلى نوع الحدث التالي مباشرةً
value على طول
مع وسيطة توضيحية اختيارية في ثلاث وحدات بت عالية الترتيب.
انظر أدناه للاطّلاع على تعريفات value المختلفة.
في معظم الحالات، تقوم value_arg بترميز طول
value التالي مباشرةً بالبايت، مثل
(size - 1) ، مثال: 0 تعني أن
تتطلب القيمة بايت واحد، ويعني 7 أنها تتطلب
ثمانية بايت مع ذلك، هناك استثناءات كما هو موضّح أدناه.
|
القيمة | أوبايت[] | وحدات بايت تمثل القيمة والمتغير في الطول ويتم تفسيرها
بشكل مختلف لمختلف value_type بايت، ومع ذلك
صغيرة دائمًا. اطّلِع على تعريفات القيم المختلفة أدناه
التفاصيل.
|
تنسيقات القيم
النوع: الاسم | value_type |
التنسيق value_arg |
التنسيق value |
الوصف |
---|---|---|---|---|
قيمة_القيمة_بايت | 0×00 | (بدون قيمة، يجب أن يكون 0 ) |
أوبايت[1] | قيمة عدد صحيح أحادي البايت بعلامة |
القيمة_SHORT_ | 0x02 | الحجم - 1 (0...1) | أو بايت[size] | قيمة عدد صحيح ثنائي البايت بعلامة، موسَّع |
قيمة_CHAR | 0x03 | الحجم - 1 (0...1) | أو بايت[size] | قيمة عدد صحيح ثنائي البايت غير موقعة، موسعَّة صفرية |
قيمة_INT | 0×04 | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت بعلامة، موسَّعة |
VALUE_long | 0×06 | الحجم - 1 (0...7) | أو بايت[size] | قيمة عدد صحيح ثمانية بايت بعلامة، موسَّعة |
القيمة_العددية_للعدد | 0x10 | الحجم - 1 (0...3) | أو بايت[size] | نمط بتات من أربعة بايت، ممتدًا صفرًا إلى اليمين، يتم تفسيرها على أنها قيمة نقطة عائمة 32 بت لـ IEEE754 |
قيمة_مضاعفة | 0×11 | الحجم - 1 (0...7) | أو بايت[size] | نمط بت من ثمانية بايت، ممتدًا صفرًا لليمين، و يتم تفسيرها على أنها قيمة نقطة عائمة تبلغ 64 بت لـ IEEE754 |
طريقة_VALUE_method_TYPE | 0×15 | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)،
على أنه فهرس إلى
القسم proto_ids ويمثل قيمة نوع الطريقة
|
قيمة_طريقة_الاسم_المعرِّف | 0×16 | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)،
على أنه فهرس إلى
القسم method_handles ويمثل قيمة مؤشر الطريقة
|
قيمة_STRING | 0x17 | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)،
على أنه فهرس إلى
القسم string_ids ويمثل قيمة سلسلة
|
نوع_القيمة | 0×18 | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)،
على أنه فهرس إلى
قسم type_ids ويمثل تمثيلاً
قيمة النوع/الفئة
|
VALUE_FIELD | 0×19 | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)،
على أنه فهرس إلى
قسم field_ids ويمثل تمثيلاً
قيمة الحقل
|
طريقة_VALUE_method | 0x1a | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)،
على أنه فهرس إلى
قسم method_ids ويمثل تمثيلاً
قيمة الطريقة
|
قيمة_القيمة_ENUM | 0x1b | الحجم - 1 (0...3) | أو بايت[size] | قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)،
على أنه فهرس إلى
القسم field_ids ويمثل قيمة
ثابت من نوع العدد
|
VALUE_ARRAY | 0x1c | (بدون قيمة، يجب أن يكون 0 ) |
مصفوفة_مشفّرة | صفيفة من القيم بالتنسيق المحدد بواسطة
"تنسيق encoded_array " أدناه. الحجم
من value ضمني في الترميز.
|
قيمة_الشرح | 0×1 يوم | (بدون قيمة، يجب أن يكون 0 ) |
ترميز_مشفّر | تعليقًا توضيحيًا فرعيًا، بالتنسيق المحدد
"تنسيق encoded_annotation " أدناه. الحجم
من value ضمني في الترميز.
|
قيمة_NULL | 0x1e | (بدون قيمة، يجب أن يكون 0 ) |
(بدون) | قيمة مرجعية واحدة (null ) |
القيمة_المنطقية | 0x1f | منطقي (0...1) | (بدون) | قيمة وحدة بت؛ 0 لمدة false
1 مقابل true يتم تمثيل البت في
value_arg
|
تنسيق Encrypt_array
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | يوليو 128 | عدد العناصر في الصفيفة |
القيم | القيمة_المشفّرة[size] | سلسلة من size encoded_value بايت
بالتنسيق المحدد في هذا القسم، مسلسل
بالتتابع.
|
تنسيق Encrypt_annotation
الاسم | التنسيق | الوصف |
---|---|---|
type_idx | يوليو 128 | ونوع التعليق التوضيحي. يجب أن تكون هذه فئة (ليست صفيفة أو قيمة أساسية) الكتابة. |
الحجم | يوليو 128 | عدد عمليات ربط الاسم والقيمة في هذا التعليق التوضيحي |
العناصر | عنصر_التعليق التوضيحي[size] | من عناصر التعليق التوضيحي، ويتم تمثيلها بشكل مباشر في سطر (وليس
الاعتمادات الرقمية). يجب فرز العناصر بترتيب متزايد حسب
فهرس string_id .
|
تنسيق عنصر_التعليق التوضيحي
الاسم | التنسيق | الوصف |
---|---|---|
رقم_تعريف_الاسم | يوليو 128 | اسم العنصر، ممثلًا كفهرس في
قسم "string_ids ". ويجب أن تتوافق السلسلة مع
لـ MemberName، المحددة أعلاه.
|
القيمة | قيمة_مشفّرة | قيمة العنصر |
بنية السلسلة
هناك عدة أنواع من العناصر في ملف .dex
والتي
يشيران في النهاية إلى سلسلة. تعريفات نمط BNF التالية
إلى الصيغة المقبولة لهذه السلاسل.
الاسم البسيط
SimpleName هي الأساس لبنية أسماء اللغات الأخرى
باستمرار. يسمح التنسيق .dex
بقدرٍ معقول من خطوط العرض.
هنا (أكثر بكثير من معظم لغات المصدر الشائعة). باختصار، يمكن اعتبار تطبيق
أي حرف أبجدي منخفض أو رقم ASCII منخفض، مثل
رموز ASCII المحددة المحددة ومعظم نقاط الرموز بخلاف ASCII التي
أو التحكم أو المسافة أو الأحرف الخاصة. بدءًا من الإصدار 040
يسمح التنسيق أيضًا باستخدام أحرف المسافات (Unicode Zs
)
) تجدر الإشارة إلى أنّ نقاط الرموز البديلة
(في النطاق U+d800
... U+dfff
) ليست
تُعتبر أحرف اسم صالحة في حد ذاتها، غير أنّ يونيكود تكميلي
الأحرف صالحة (التي يتم تمثيلها بالحروف النهائية
كبديل لقاعدة SimpleNameChar)، ويجب أن تكون
ويتم تمثيلها في ملف على شكل أزواج من نقاط الرموز البديلة في MUTF-8
الترميز.
SimpleName ← | ||
SimpleNameChar (SimpleNameChar)* | ||
SimpleNameChar → | ||
'A' ... 'Z' |
||
| | 'a' ... 'z' |
|
| | '0' ... '9' |
|
| | ' ' |
منذ الإصدار 040 من DEX |
| | '$' |
|
| | '-' |
|
| | '_' |
|
| | U+00a0 |
منذ الإصدار 040 من DEX |
| | U+00a1 ... U+1fff |
|
| | U+2000 ... U+200a |
منذ الإصدار 040 من DEX |
| | U+2010 ... U+2027 |
|
| | U+202f |
منذ الإصدار 040 من DEX |
| | U+2030 ... U+d7ff |
|
| | U+e000 ... U+ffef |
|
| | U+10000 ... U+10ffff |
اسم العضو
مُستخدَم بواسطة field_id_item وmethod_id_item
MemberName هو اسم أحد أعضاء الفصل الدراسي، حيث يتم تصنيف الأعضاء والحقول والأساليب والفئات الداخلية.
MemberName ← | |
SimpleName | |
| | '<' SimpleName '>' |
اسم الصف الكامل
FullClassName هو اسم فئة مؤهل بالكامل، بما في ذلك محدد حزمة اختياري متبوعًا باسم مطلوب.
FullClassName ← | |
OptionalPackagePrefix SimpleName | |
OptionalPackagePrefix → | |
(SimpleName '/' )* |
واصف النوع
يستخدِمه type_id_item
TypeDescriptor هو تمثيل أي نوع، بما في ذلك
الأساسيات والفئات والصفائف وvoid
. انظر أدناه
معنى الإصدارات المختلفة.
TypeDescriptor → | |
'V' |
|
| | FieldTypeDescriptor |
FieldTypeDescriptor → | |
NonArrayFieldTypeDescriptor | |
| | ('[' * 1...255)
NonArrayFieldTypeDescriptor |
NonArrayFieldTypeDescriptor→ | |
'Z' |
|
| | 'B' |
| | 'S' |
| | 'C' |
| | 'I' |
| | 'J' |
| | 'F' |
| | 'D' |
| | 'L' الاسم بالكامل ';' |
الواصف المختصر
يستخدِمه proto_id_item
ShortsyDescriptor هو التمثيل المختصر لطريقة ما
الأولية، بما في ذلك أنواع العائد والمعلمات، باستثناء أنه
عدم التمييز بين أنواع المراجع المختلفة (الفئة أو الصفائف). بدلاً من ذلك،
ويتم تمثيل كل أنواع المراجع بحرف 'L'
واحد.
ShortsyDescriptor ← | |
shortyReturnType (ShortyFieldType)* | |
ShortsyReturnType ← | |
'V' |
|
| | ShortsyFieldType |
ShortsyFieldType ← | |
'Z' |
|
| | 'B' |
| | 'S' |
| | 'C' |
| | 'I' |
| | 'J' |
| | 'F' |
| | 'D' |
| | 'L' |
دلالات TypeDescriptor
وهذا هو معنى كل متغيّر من صيغ TypeDescriptor.
بناء الجملة | المعنى |
---|---|
V | void ؛ صالح فقط لأنواع الإرجاع |
Z | boolean |
B | byte |
S | short |
C | char |
I | int |
J | long |
F | float |
D | double |
Lfull/eligibility/Name: | الفئة fully.qualified.Name |
[الوصف | مصفوفة descriptor ، قابلة للاستخدام بشكل متكرر
صفائف المصفوفات، على الرغم من أنه من غير الصالح أن يكون هناك أكثر من 255 صفائف
الأبعاد.
|
العناصر والبُنى ذات الصلة
يتضمن هذا القسم تعريفات لكل عنصر من عناصر المستوى الأعلى التي
في ملف .dex
.
عنصر_رأس
تظهر في قسم العنوان
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
سحر | uبايت[8] = DEX_FILE_MAGIC | والقيمة السحرية. راجِع المناقشة أعلاه ضمن "DEX_FILE_MAGIC "
لمزيد من التفاصيل.
|
مجموع اختباري | مهم | المجموع الاختباري adler32 لبقية الملف (كل شيء باستثناء
magic وهذا الحقل)؛ يُستخدم لاكتشاف تلف الملفات
|
التوقيع | أوبايت[20] | توقيع SHA-1 (تجزئة) لبقية الملف (كل شيء باستثناء
magic وchecksum وهذا الحقل) مستخدَمة
لتعريف الملفات بشكل فريد
|
حجم_الملف | مهم | حجم الملف بالكامل (بما في ذلك العنوان)، بالبايت |
حجم_الرأس | uint = 0x70 | حجم الرأس (هذا القسم بالكامل)، بالبايت. يتيح ذلك قدرًا محدودًا من التوافق مع الأنظمة القديمة/للأمام بدون إلغاء التنسيق. |
علامة_نهاية | uint = ENDIAN_CONSTANT | علامة الانتهاء. راجِع المناقشة أعلاه ضمن "ENDIAN_CONSTANT ".
وREVERSE_ENDIAN_CONSTANT بوصة لمزيد من التفاصيل.
|
حجم_الرابط | مهم | أو حجم قسم الروابط، أو 0 إذا لم يكن هذا الملف
مرتبطة بشكل ثابت |
link_off | مهم | إزاحة من بداية الملف إلى قسم الرابط، أو
0 إذا link_size == 0 . والمعادلة، إذا لم تكن صفرية،
يجب أن يكون إزاحة في القسم link_data . تشير رسالة الأشكال البيانية
عدم تحديد تنسيق البيانات المشار إليها في هذا المستند
حقل الرأس هذا (والسابق) كعناصر الجذب للاستخدام من خلال
عمليات تنفيذ بيئة التشغيل.
|
إيقاف الخريطة | مهم | الإزاحة من بداية الملف إلى عنصر الخريطة. الإزاحة التي يجب
بقيمة غير صفرية، ويجب أن يكون إزاحة في القسم data ،
ويجب أن تكون البيانات بالتنسيق المحدد بواسطة "map_list "
أدناه.
|
حجم_أرقام_السلاسل | مهم | عدد السلاسل في قائمة معرّفات السلاسل |
سلسلة_معرّفات_إيقاف | مهم | إزاحة من بداية الملف إلى قائمة معرفات السلسلة، أو
0 إذا كانت string_ids_size == 0 (من المفترض أن تكون
حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية،
في بداية القسم string_ids .
|
type_ids_size (حجم_معرّفات_النوع) | مهم | عدد العناصر في قائمة معرفات الأنواع، بحد أقصى 65535 |
type_ids_off | مهم | إزاحة من بداية الملف إلى قائمة معرفات النوع، أو
0 إذا كانت type_ids_size == 0 (من المفترض أن تكون
حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية،
يجب أن يبدأ في بداية type_ids
.
|
حجم_رقم تعريف_النموذج_الأوّلي | مهم | عدد العناصر في قائمة معرفات النموذج الأوّلي، 65535 كحد أقصى |
Proto_ids_متوقف | مهم | الإزاحة من بداية الملف إلى قائمة معرفات النموذج الأوّلي، أو
0 إذا كانت proto_ids_size == 0 (من المفترض أن تكون
حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية،
يجب أن يبدأ في بداية proto_ids
.
|
حجم_أرقام تعريف_الحقل | مهم | عدد العناصر في قائمة معرّفات الحقول |
إيقاف_بيانات_الحقول | مهم | معادلة من بداية الملف إلى قائمة معرفات الحقول، أو
0 إذا field_ids_size == 0 . الإزاحة، إذا
غير صفري، يجب أن تكون في بداية field_ids
. |
حجم_أرقام_تعريف_الطريقة | مهم | عدد العناصر في قائمة معرّفات الطريقة |
معرّف_إيقاف_الطريقة | مهم | معادلة من بداية الملف إلى قائمة معرفات الطريقة، أو
0 إذا method_ids_size == 0 . الإزاحة، إذا
غير صفري، يجب أن تكون في بداية method_ids
. |
class_defs_size (حجم_تعريف_الفئة) | مهم | عدد العناصر في قائمة تعريفات الفئة |
class_defs_off | مهم | إزاحة من بداية الملف إلى قائمة تعريفات الفئة، أو
0 إذا كانت class_defs_size == 0 (من المفترض أن تكون
حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية،
في بداية القسم class_defs .
|
حجم_البيانات | مهم | حجم قسم data بالبايت. يجب أن تكون القيمة زوجية
مضاعف sizeof(uint). |
إيقاف_البيانات | مهم | إزاحة من بداية الملف إلى بداية الملف
قسم "data ".
|
قائمة_الخريطة
تظهر في قسم البيانات
تمت الإشارة إليه من header_item
المحاذاة: 4 بايت
هذه قائمة بمحتويات الملف الكاملة بالترتيب. أُنشأها جون هنتر، الذي كان متخصصًا
يحتوي على بعض التكرار في ما يتعلق بـ header_item
ولكنها ستكون نموذجًا سهل الاستخدام للتكرار التحسيني على مستوى كامل
الملف. يجب أن يظهر نوع معين على الأكثر مرة واحدة في الخريطة، ولكن لا يوجد
المفروضة على أنواع الطلبات التي قد تظهر، بخلاف
وقيود متضمنة في بقية التنسيق (على سبيل المثال،
يجب أن يظهر القسم header
أولاً، متبوعًا
قسم "string_ids
" وغير ذلك). بالإضافة إلى ذلك، يجب أن تتضمن إدخالات الخريطة
مرتبة حسب الإزاحة الأولية ويجب ألا تتداخل.
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | مهم | حجم القائمة في الإدخالات |
قائمة | حجم_عنصر_الخريطة | عناصر القائمة |
تنسيق map_item
الاسم | التنسيق | الوصف |
---|---|---|
كتابة | قصير | ونوع العناصر انظر الجدول أدناه |
غير مستخدَمة | قصير | (غير مستخدم) |
الحجم | مهم | عدد العناصر التي يمكن العثور عليها عند الإزاحة المشار إليها |
اقتطاع | مهم | معادلة من بداية الملف إلى العناصر المعنية |
رموز الكتابة
نوع العنصر | ثابت | القيمة | حجم العنصر بالبايت |
---|---|---|---|
عنصر_رأس | TYPE_ROWS_ITEM | 0×0000 | 0×70 |
سلسلة_معرّف_السلعة | TYPE_STRING_ID_ITEM | 0×0001 | 0×04 |
type_id_item | TYPE_TYPE_ID_ITEM | 0×0002 | 0×04 |
معرّف_السلعة_الأوّلية | TYPE_PROTO_ID_ITEM | 0×0003 | 0x0c |
حقل_معرّف_السلعة | TYPE_FIELD_ID_ITEM | 0×0004 | 0×08 |
معرّف_السلعة | TYPE_Method_ID_ITEM | 0×0005 | 0×08 |
class_def_item | TYPE_Class_DEF_ITEM | 0×0006 | 0x20 |
call_site_id_item | TYPE_CALL_SITE_ID_ITEM | 0×0007 | 0×04 |
طريقة_تسجيل_السلعة | TYPE_method_HANDLE_ITEM | 0×0008 | 0×08 |
قائمة_الخريطة | TYPE_MAP_LIST | 0×1000 | 4 أو أكثر (item.size * 12) |
قائمة_النوع | TYPE_TYPE_LIST | 0×1001 | 4 أو أكثر (item.size * 2) |
تعليقات_مجموعة_ref_list | TYPE_تشكيلة/SET_REF_LIST | 0×1002 | 4 أو أكثر (item.size * 4) |
عنصر_مجموعة_التعليقات التوضيحية | نوع_التعليق | 0×1003 | 4 أو أكثر (item.size * 4) |
class_data_item | TYPE_Class_DATA_ITEM | 0×2000 | ضمني "يجب التحليل" |
رمز_السلعة | TYPE_CODE_ITEM | 0×2001 | ضمني "يجب التحليل" |
سلسلة_البيانات_السلعة | TYPE_STRING_DATA_ITEM | 0×2002 | ضمني "يجب التحليل" |
debug_info_item | TYPE_DEBUG_INFO_ITEM | 0×2003 | ضمني "يجب التحليل" |
عنصر_التعليق التوضيحي | TYPE_تشكيل_ITEM | 0×2004 | ضمني "يجب التحليل" |
عنصر_المصفوفة_المُشفَّرة | TYPE_ENCODED_ARRAY_ITEM | 0×2005 | ضمني "يجب التحليل" |
دليل_التعليقات التوضيحية_عنصر | TYPE_ لإدارة التعليقات مباشرة | 0×2006 | ضمني "يجب التحليل" |
إخفاء واجهة برمجة تطبيقات الصف البيانات | TYPE_HIDDENAPI_Class_DATA_ITEM | 0xF000 | ضمني "يجب التحليل" |
سلسلة_معرّف_السلعة
تظهر في قسم string_ids
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
سلسلة_بيانات_إيقاف | مهم | الإزاحة من بداية الملف إلى بيانات السلسلة لهذا
عنصر واحد. يجب أن تكون الإزاحة إلى موقع جغرافي.
في القسم data ، ويجب أن تكون البيانات في
التنسيق المحدد بواسطة "string_data_item " أدناه.
ليس هناك متطلبات محاذاة للإزاحة.
|
سلسلة_البيانات_السلعة
تظهر في قسم البيانات
المحاذاة: لا شيء (محاذاة بالبايت)
الاسم | التنسيق | الوصف |
---|---|---|
utf16_size | يوليو 128 | لهذه السلسلة بوحدات رمز UTF-16 (وهي "سلسلة
الطول" في العديد من الأنظمة). أي أن هذا هو الطول الذي تم فك ترميزه
السلسلة. (يشير مصطلح الطول المشفر إلى موضع
0 بايت). |
بيانات | أوبايت[] | سلسلة من وحدات الرمز MUTF-8 (المعروفة أيضًا باسم "ثُمانيات"، أي "بايت")
متبوعة ببايت من القيمة 0 . عرض
"ترميز MUTF-8 (المعدَّل UTF-8)" أعلاه للحصول على التفاصيل
والمناقشة حول تنسيق البيانات.
ملاحظة: من المقبول أن يكون لديك سلسلة تتضمن
(الشكل المشفّر لـ) وحدات الرمز البديل لـ UTF-16 (أي
|
type_id_item
تظهر في قسم type_ids
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
المعرّف_idx | مهم | الفهرس في قائمة "string_ids " للواصف
سلسلة من هذا النوع. ويجب أن تتوافق السلسلة مع بناء الجملة
TypeDescriptor، المحدّدة أعلاه.
|
معرّف_السلعة_الأوّلية
تظهر في قسم proto_ids
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
معرّف_مختصر | مهم | الفهرس في قائمة "string_ids " للصيغة القصيرة
سلسلة واصف لهذا النموذج الأوّلي. ويجب أن تتوافق السلسلة مع
لـ ShortyDescriptor، المحددة أعلاه، ويجب أن تتوافق
إلى نوع الإرجاع ومعلَمات هذه السلعة.
|
return_type_idx | مهم | الفهرس في القائمة "type_ids " لنوع الإرجاع
من هذا النموذج الأولي
|
المعلمات_off | مهم | من بداية الملف إلى قائمة أنواع المعلمات
لهذا النموذج الأولي، أو 0 إذا كان النموذج الأولي
المعلَمات. ويجب أن تكون قيمة الإزاحة هذه، إذا لم تكن صفرية، في
data ، ويجب أن تكون البيانات في
التنسيق المحدد بواسطة "type_list" أدناه. بالإضافة إلى ذلك، هناك
يجب ألا يكون أي إشارة إلى النوع void في القائمة.
|
حقل_معرّف_السلعة
تظهر في قسم field_ids
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
الفئة_idx | قصير | إلى قائمة type_ids لمُحدِّد هذا
. ويجب أن يكون نوع فئة، وليس مصفوفة أو نوعًا أساسيًا.
|
type_idx | قصير | إلى قائمة type_ids لنوع
هذا الحقل
|
رقم_تعريف_الاسم | مهم | في قائمة "string_ids " لاسم هذا الجهاز
. يجب أن تتوافق السلسلة مع بنية MemberName،
المحدد أعلاه.
|
معرّف_السلعة
تظهر في قسم method_ids
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
الفئة_idx | قصير | إلى قائمة type_ids لمُحدِّد هذا
. ويجب أن يكون نوع فئة أو مصفوفة، وليس نوعًا أساسيًا.
|
Proto_idx | قصير | إلى قائمة proto_ids للنموذج الأوّلي
هذه الطريقة
|
رقم_تعريف_الاسم | مهم | في قائمة "string_ids " لاسم هذا الجهاز
. يجب أن تتوافق السلسلة مع بنية MemberName،
المحدد أعلاه.
|
class_def_item
يظهر في القسم class_defs
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
الفئة_idx | مهم | إلى قائمة type_ids لهذه الفئة.
ويجب أن يكون نوع فئة، وليس مصفوفة أو نوعًا أساسيًا.
|
علامات_الوصول | مهم | علامات الوصول للفئة (public ، final ،
وما إلى ذلك). الاطّلاع على "تعريفات access_flags " لمزيد من التفاصيل.
|
Superclass_idx | مهم | في القائمة "type_ids " للفئة العليا أو
تكون القيمة الثابتة NO_INDEX إذا لم يكن لهذه الفئة أي
الفئة الفائقة (أي أنها فئة جذر مثل Object ).
وفي حال توفّره، يجب أن يكون نوع فئة وليس صفيفًا أو نوعًا أساسيًا.
|
إيقاف_واجهات | مهم | إزاحة من بداية الملف إلى قائمة الواجهات، أو
0 إذا لم تكن هناك عناصر. هذه الإزاحة
يجب أن يكون في القسم data ، وسيتم
يجب أن تكون بالتنسيق المحدد
"type_list " أدناه. كل عنصر من عناصر القائمة
أن يكون نوع فئة (ليس صفيفًا أو نوعًا أساسيًا)، ويوجد
يجب ألا يكون أي تكرار.
|
معرّف_ملف_المصدر_المصدر | مهم | إلى قائمة string_ids لاسم
يحتوي على المصدر الأصلي (على الأقل لمعظم) هذه الفئة،
أو القيمة الخاصة NO_INDEX لتمثيل نقص
هذه المعلومات. debug_info_item لأي طريقة معيّنة
أكثر من ملف المصدر هذا، ولكن يتوقع أن يكون معظم
ستأتي من ملف مصدر واحد فقط.
|
التعليقات التوضيحية_متوقفة | مهم | الإزاحة من بداية الملف إلى بنية التعليقات التوضيحية
لهذا الصف، أو 0 إذا لم تكن هناك تعليقات توضيحية على
هذا الفصل الدراسي. ويجب أن تكون قيمة الإزاحة هذه، إذا لم تكن صفرية، في
data ، والبيانات التي ينبغي أن تكون في
التنسيق الذي يحدده "annotations_directory_item " أدناه،
مع جميع العناصر التي تشير إلى هذه الفئة باعتبارها المُحدِّد.
|
class_data_off | مهم | إزاحة من بداية الملف إلى الملف المرتبط
بيانات الفئة لهذا العنصر، أو 0 إذا لم يكن هناك فئة
البيانات لهذه الفئة. (قد يكون الأمر كذلك، على سبيل المثال، إذا كانت الفئة
هي واجهة علامة). يجب أن تكون الإزاحة، إذا لم تكن صفرية، في
data ، ويجب أن تكون البيانات في
التنسيق المحدد بواسطة "class_data_item " أدناه، مع كل
العناصر التي تشير إلى هذه الفئة باعتبارها المُحدِّد.
|
قيمة_القيم_الثابتة_متوقفة | مهم | إزاحة من بداية الملف إلى قائمة الملفات الأولية
قيمة لحقول static ، أو 0 إذا كانت هناك
لا شيء (وسيتم إعداد جميع حقول static باستخدام
0 أو null ). يجب أن تكون هذه الإزاحة في
data ، ويجب أن تكون البيانات في القسم
التنسيق المحدد بواسطة "encoded_array_item " أدناه. الحجم
يجب ألا يكون عدد الصفيف أكبر من عدد static
التي تم تعريفها بواسطة هذه الفئة، وتتجاوب العناصر مع
static حقلاً بالترتيب نفسه كما هو موضّح في
field_list المقابلة. نوع كل صفيف
مع النوع المعلَن عنه للحقل المقابل له.
إذا كان عدد العناصر في الصفيف أقل من عدد
static حقلاً، ثم يتم إعداد الحقول المتبقية
مع 0 أو null مناسبَين للنوع
|
call_site_id_item
يظهر في قسم call_site_ids
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
إيقاف_اتصال_الموقع | مهم | إزاحة من بداية الملف لطلب تعريف الموقع. يجب أن في قسم البيانات، ويجب أن تكون البيانات بالتنسيق المحدد "call_site_item" أدناه. |
عنصر_موقع_الاتصال
تظهر في قسم البيانات
المحاذاة: لا شيء (محاذاة البايت)
Call_site_item هو Encrypt_array_item تتوافق عناصره مع الوسيطات المقدمة إلى طريقة رابط التمهيد. الوسيطات الثلاث الأولى هي:
- مؤشر طريقة يمثل طريقة ربط التمهيد (VALUE_Method_HANDLE).
- اسم طريقة يجب أن يحله رابط التمهيد (VALUE_STRING)
- نوع طريقة يتوافق مع نوع اسم الطريقة المطلوب حلها (VALUE_Method_TYPE).
أي وسيطات إضافية هي قيم ثابتة يتم تمريرها إلى طريقة رابط التمهيد. هذه الوسيطات هي تم تمريره بالترتيب وبدون أي نوع من التحويلات.
يجب أن يكون لمقبض الطريقة الذي يمثّل طريقة رابط التمهيد من نوع الرجوع java.lang.invoke.CallSite
. أنواع المَعلمات الثلاثة الأولى هي:
java.lang.invoke.Lookup
java.lang.String
java.lang.invoke.MethodType
يتم تحديد أنواع المعلمات لأي وسيطات إضافية من قيمها الثابتة.
طريقة_تسجيل_السلعة
تظهر في قسم Channel_handles.
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
نوع_الاسم_المعرِّف | قصير | ونوع مؤشر الطريقة انظر الجدول أدناه |
غير مستخدَمة | قصير | (غير مستخدم) |
الحقل_أو_method_id | قصير | يعتمد هذا الحقل أو معرّف الطريقة على ما إذا كان نوع مؤشر الطريقة موصّلًا أو استدعاء طريقة. |
غير مستخدَمة | قصير | (غير مستخدم) |
رموز أنواع الأسماء المعرِّفة للطريقة
ثابت | القيمة | الوصف |
---|---|---|
طريقة_HANDLE_TYPE_StatIC_PUT | 0×00 | مؤشر الطريقة هو أداة ضبط الحقول الثابتة (الملحق) |
طريقة_HANDLE_TYPE_StatIC_GET | 0x01 | مؤشر الطريقة هو دالة getter ثابتة للحقل الثابت (ملحق) |
طريقة_HANDLE_TYPE_INSTANCE_PUT | 0x02 | مؤشر الطريقة هو أداة تعيين حقل المثيل (الملحق) |
طريقة_HANDLE_TYPE_INSTANCE_GET | 0x03 | مؤشر الطريقة هو دالة getter لحقل المثيل (الملحق) |
طريقة_HANDLE_TYPE_INVOKE_PSTIC | 0×04 | مؤشر الطريقة هو استدعاء طريقة ثابتة |
طريقة_HANDLE_TYPE_INVOKE_INSTANCE | 0x05 | مؤشر الطريقة هو استدعاء طريقة المثيل |
طريقة_HANDLE_TYPE_INVOKE_CONSTRUCTOR | 0×06 | مؤشر الطريقة هو استدعاء طريقة إنشائية |
طريقة_HANDLE_TYPE_INVOKE_DIRECT | 0×07 | اسم الطريقة هو استدعاء طريقة مباشرة |
طريقة_HANDLE_TYPE_INVOKE_INTERFACE | 0×08 | مؤشر الطريقة هو استدعاء طريقة للواجهة |
class_data_item
تمت الإشارة إليه من class_def_item
تظهر في قسم البيانات
المحاذاة: لا شيء (محاذاة بالبايت)
الاسم | التنسيق | الوصف |
---|---|---|
حجم_الحقول_الثابتة | يوليو 128 | عدد الحقول الثابتة المحددة في هذا العنصر |
حجم_حقول_المثيل | يوليو 128 | عدد حقول المثيلات المحددة في هذا العنصر |
Direct_methods_size | يوليو 128 | عدد الطرق المباشرة المحددة في هذا العنصر |
Virtual_methods_size | يوليو 128 | عدد الطرق الافتراضية المحددة في هذا العنصر |
الحقول_الثابتة | الحقل_المشفّر[static_fields_size] | الحقول الثابتة المحددة، ممثلة في تسلسل
المشفرة. يجب ترتيب الحقول حسب
field_idx بترتيب متزايد.
|
حقول_المثيلات | الحقل_المشفّر[instance_fields_size] | حقول المثيل المحددة، ممثلة في تسلسل
المشفرة. يجب ترتيب الحقول حسب
field_idx بترتيب متزايد.
|
الطرق_المباشرة | Encrypt_method[direct_methods_size] | المباشر المحدد (أي من static أو private
أو الدالة الإنشائية)، ويتم تمثيلها في صورة تسلسل
المشفرة. يجب فرز الطرق حسب
method_idx بترتيب متزايد.
|
الطرق_الافتراضية | Encrypt_method[virtual_methods_size] | القيمة الافتراضية المحددة (لا شيء من static أو private أو
أو الدالة الإنشائية)، ويتم تمثيلها في صورة تسلسل
المشفرة. يجب ألا تتضمن هذه القائمة
ما لم يتم تجاوزها بواسطة الفئة التي يمثلها هذا العنصر. تشير رسالة الأشكال البيانية
يجب ترتيب الطرق حسب method_idx بترتيب متزايد.
يجب ألا تكون قيمة method_idx للطريقة الافتراضية متطابقة
لأي طريقة مباشرة.
|
ملاحظة: تظهر جميع العناصر field_id
و
يجب أن تشير مثيلات method_id
إلى الفئة التعريف نفسها.
تنسيق Encrypt_field
الاسم | التنسيق | الوصف |
---|---|---|
حقل_idx_الفرق | يوليو 128 | إلى قائمة field_ids الخاصة بهوية هذه الجهة الخارجية
(يشمل الاسم والوصف)، ويتم تمثيله كفرق
من فهرس العنصر السابق في القائمة. فهرس
يتم تمثيل العنصر الأول في القائمة بشكل مباشر.
|
علامات_الوصول | يوليو 128 | علامات الوصول للحقل (public وfinal
وما إلى ذلك). الاطّلاع على "تعريفات access_flags " لمزيد من التفاصيل.
|
تنسيق Encrypt_method
الاسم | التنسيق | الوصف |
---|---|---|
طريقة_idx_الفرق | يوليو 128 | إلى قائمة method_ids الخاصة بهوية هذه الجهة الخارجية
(تتضمن الاسم والواصف)، ويتم تمثيلها كفرق
من فهرس العنصر السابق في القائمة. فهرس
يتم تمثيل العنصر الأول في القائمة بشكل مباشر.
|
علامات_الوصول | يوليو 128 | علامات الوصول للطريقة (public ، final ،
وما إلى ذلك). الاطّلاع على "تعريفات access_flags " لمزيد من التفاصيل.
|
إيقاف الترميز | يوليو 128 | من بداية الملف إلى هيكل التعليمة البرمجية لهذا
أو 0 إذا كانت هذه الطريقة إما abstract
أو native . يجب أن تكون الإزاحة في موقع في
قسم "data ". يتم تحديد تنسيق البيانات من خلال
"code_item " أدناه.
|
قائمة_النوع
تمت الإشارة إليه من class_def_item وproto_id_item
تظهر في قسم البيانات
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | مهم | حجم القائمة في الإدخالات |
قائمة | نوع_السلعة [size] | عناصر القائمة |
تنسيق type_item
الاسم | التنسيق | الوصف |
---|---|---|
type_idx | قصير | الفهرس في قائمة type_ids |
رمز_السلعة
تمت الإشارة إليها من Encrypt_method
تظهر في قسم البيانات
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
حجم_التسجيل | قصير | عدد السجلات التي يستخدمها هذا الرمز |
ins_size | قصير | عدد كلمات الوسيطات الواردة إلى الطريقة التي الرمز لـ |
حجم_خارجي | قصير | عدد كلمات مساحة الوسيطة الصادرة التي يتطلبها هذا رمز لاستدعاء الطريقة |
تجربة_الحجم | قصير | عدد try_item لهذا المثيل. إذا لم تكن صفر،
ثم تظهر هذه كمصفوفة tries بعد
insns في هذه الحالة.
|
debug_info_off | مهم | الإزاحة من بداية الملف إلى معلومات تصحيح الأخطاء (أرقام الأسطر +
هذا الرمز، أو 0 إذا
ببساطة لا توجد معلومات. ويجب أن تكون الإزاحة، إذا لم تكن صفرية،
إلى موقع جغرافي في القسم data . تنسيق
يتم تحديد البيانات من خلال "debug_info_item " أدناه.
|
حجم_الشحن | مهم | حجم قائمة التعليمات في وحدة رموز 16 بت |
استراحة | ushort[insns_size] | الصفيفة الفعلية لرمز البايت. تنسيق الرمز في insns
يتم تحديد الصفيفة من خلال المستند المصاحب
رمز بايت Dalvik. ملاحظة
على الرغم من تعريفه على أنه مصفوفة ushort ، إلا أنه
هي بعض الهياكل الداخلية التي تفضل محاذاة أربعة بايت. كذلك،
فإذا حدث ذلك في ملف تم تبديله لدى النهاية، فإن عملية التبديل
يتم فقط على حالات ushort الفردية وليس على
هياكل داخلية أكبر.
|
padding | ushort (اختيارية) = 0 | 2 بايت من المساحة المتروكة لتتم محاذاة tries إلى أربعة بايت.
لا يتوفّر هذا العنصر إلا إذا كانت قيمة tries_size غير صفرية.
وinsns_size غريبة.
|
يحاول | test_item[tries_size] (اختيارية) | مصفوفة تشير إلى مكان اكتشاف استثناءات التعليمة البرمجية
وكيفية التعامل معها. يجب أن تكون عناصر الصفيفة غير متداخلة في
والترتيب من عنوان منخفض إلى مرتفع. هذا العنصر هو فقط
موجودة إذا كانت قيمة tries_size غير صفرية.
|
المعالجات | Encrypt_catch_handler_list (اختياري). | وحدات البايت التي تمثل قائمة بأنواع الصيد والمرتبطة
عناوين المعالج. كل try_item له إزاحة من ناحية البايت
في هذا الهيكل. لا يتوفّر هذا العنصر إلا إذا
قيمة tries_size ليست صفرية.
|
تنسيق تجربة_السلع
الاسم | التنسيق | الوصف |
---|---|---|
بدء_إضافة | مهم | عنوان بداية مجموعة الرموز التي يشملها هذا الإدخال. العنوان وهو عدد وحدات الرموز المكونة من 16 بت في بداية أول عملية التعليمات. |
عدد_ الأنشطة | قصير | عدد وحدات الرموز 16 بت التي يشملها هذا الإدخال. الرمز الأخير
الوحدة المشمولة (شاملة) هي start_addr + insn_count - 1 .
|
معالج_إيقاف | قصير | إزاحة بالبايت من بداية الملف المرتبط
في encoded_catch_hander_list
encoded_catch_handler لهذا الإدخال. يجب أن يكون هذا
محاذاة إلى بداية encoded_catch_handler .
|
تنسيق Encrypt_catch_handler_list
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | يوليو 128 | حجم هذه القائمة، في الإدخالات |
قائمة | Encrypt_catch_handler[handlers_size] | قائمة الفعلية لقوائم المعالجات، يتم تمثيلها بشكل مباشر (وليس كإزاحة)، ويتم تجميعها بشكل تسلسلي |
تنسيق Encrypt_catch_handler
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | cannot translate | عدد أنواع الصيد في هذه القائمة. إذا لم تكن إيجابية، فهذا يعني
يكون ناتج سالب عدد أنواع الصيد، ويتبع هذا الصيد
بواسطة معالج شامل. على سبيل المثال: size من 0
يشير ذلك إلى أنّه لا تتوفّر عبارات مكتوبة بأسلوب واضح.
تعني size لـ 2 أنّ هناك نوعَين من السلع
ما تم رصده بدون اصطيادات من مسافة بعيدة. وsize من -1
يعني أن هناك علامة صيد مكتوبة مع لقطة شاملة.
|
المعالجات | Encrypt_type_addr_pair[abs(size)] | مجموعة بث لـ abs(size) من العناصر المرمّزة، عنصر لكل عنصر تم التقاطه
نوعها، بالترتيب الذي ينبغي اختبار الأنواع به.
|
التقاط_الكل_للإضافة | uleb128 (اختياري) | عنوان رمز البايت لمعالج استقبال الرسائل الخاطئة. هذا العنصر هو فقط
موجودة إذا كانت size غير موجبة.
|
تنسيق Encrypt_type_addr_pair
الاسم | التنسيق | الوصف |
---|---|---|
type_idx | يوليو 128 | إلى القائمة type_ids لنوع
استثناء للالتقاط
|
العنوان | يوليو 128 | عنوان رمز البايت لمعالِج الاستثناء المرتبط |
debug_info_item
تمت الإشارة إليها من code_item
تظهر في قسم البيانات
المحاذاة: لا شيء (محاذاة بالبايت)
تحدّد كل debug_info_item
وحدة بايت مستندة إلى DWARF3
آلة محددة عند تفسيرها تنبعث من مواضعها
و (يحتمل) معلومات المتغير المحلي لإحدى
code_item
يبدأ التسلسل بمتغير طول
العنوان (يعتمد طوله على عدد الطريقة
متبوعة برموز بايت جهاز الدولة، وينتهي
بحجم DBG_END_SEQUENCE
بايت.
يتكون جهاز الولاية من خمسة سجلات. تشير رسالة الأشكال البيانية
يمثّل سجلّ address
معادلة التعليمات في
المرتبطة insns_item
بوحدات رموز 16 بت. تشير رسالة الأشكال البيانية
يبدأ تسجيل address
في 0
في بداية كل
debug_info
ويجب أن يزداد بشكل رتيب فقط.
يمثّل سجلّ line
رقم سطر المصدر
مرتبطًا بإدخالات جدول المواضع التالية الصادرة عن
جهاز الدولة. ويتم إعداده في عنوان التسلسل، وقد
التغيير في الاتجاهات الإيجابية أو السلبية ولكن يجب ألا يكون أقل من
1
يمثّل سجلّ "source_file
"
ملف المصدر الذي تشير إليه إدخالات أرقام الأسطر. يتم إعداده على
قيمة source_file_idx
في class_def_item
.
المتغيرين الآخرين، prologue_end
epilogue_begin
، هي علامات منطقية (مهيأة إلى
false
) التي تشير إلى ما إذا كان الموضع التالي قد انطلق أم لا
اعتباره مقدمة أو خاتمة طريقة. جهاز الحالة
أيضًا تتبع اسم ونوع آخر متغير محلي موجود في
كل جهاز تسجيل للرمز DBG_RESTART_LOCAL
.
العنوان على النحو التالي:
الاسم | التنسيق | الوصف |
---|---|---|
بداية_السطر | يوليو 128 | القيمة الأولية لسجل line في جهاز الولاية.
لا يمثل إدخالاً فعليًا لمواضع الإعلانات.
|
حجم_المعلمات | يوليو 128 | عدد أسماء المعلمات المشفرة. ينبغي أن يكون هناك
واحدة لكل معلمة طريقة، باستثناء this لطريقة المثيل،
إن وجدت.
|
اسم_المَعلمة | uleb128p1[parameters_size] | فهرس السلسلة لاسم معلمة الطريقة. قيمة مشفرة
يشير NO_INDEX إلى عدم توفّر اسم
متاحة للمعلمة المرتبطة. واصف النوع
والتوقيع مشمولين من واصف الطريقة والتوقيع.
|
قيم رمز البايت هي كما يلي:
الاسم | القيمة | التنسيق | الوسيطات | الوصف |
---|---|---|---|---|
دالة DBG_END_SEQUENCE | 0×00 | (بدون) | لإنهاء تسلسل معلومات تصحيح الأخطاء لـ code_item |
|
DBG_ADVANCE_PC | 0x01 | uleb128 addr_diff | addr_diff : المبلغ الذي ستتم إضافته إلى سجلّ العناوين |
حفظ سجل العناوين دون إصدار إدخال للوظائف |
خط DBG_ADVANCE_LINE | 0x02 | sleb128 line_diff | line_diff : المبلغ المطلوب تغيير سجل السطر بحلول |
تقدم سجل الخط دون إصدار إدخال مواضع |
DBG_START_LOCAL | 0x03 | uleb128 register_num uleb128p1 name_idx uleb128p1 type_idx |
register_num : سجلّ يتضمّن المحتوى المحليname_idx : فهرس السلسلة للاسمtype_idx : فهرس النوع من النوع
|
تقدم متغيرًا محليًا في العنوان الحالي. أيّ منهما
قد يكون name_idx أو type_idx
NO_INDEX للإشارة إلى أن هذه القيمة غير معروفة.
|
DBG_START_LOCAL_EXTENDED | 0×04 | uleb128 register_num uleb128p1 name_idx uleb128p1 type_idx uleb128p1 sig_idx |
register_num : سجلّ يتضمّن المحتوى المحليname_idx : فهرس السلسلة للاسمtype_idx : فهرس النوع من النوعsig_idx : فهرس سلسلة لنوع التوقيع
|
يقدّم محليًّا بتوقيع نوع في العنوان الحالي.
أي من name_idx أو type_idx أو
قد يكون "sig_idx " NO_INDEX
للإشارة إلى أن هذه القيمة غير معروفة. (إذا كانت sig_idx
-1 ، ومع ذلك، يمكن تمثيل نفس البيانات بشكل أكثر
بكفاءة باستخدام العملية DBG_START_LOCAL .)
ملاحظة: يمكنك الاطّلاع على المناقشة ضمن
" |
DBG_END_LOCAL | 0x05 | uleb128 register_num | register_num : السجلّ الذي يحتوي على دليل محلي |
تضع علامة على متغير محلي نشط حاليًا على أنه خارج النطاق في القيمة الحالية الْعِنْوَانْ |
DBG_RESTART_LOCAL | 0×06 | uleb128 register_num | register_num : سجِّل لإعادة التشغيل |
لإعادة تقديم متغير محلي في العنوان الحالي. الاسم والنوع هما نفسهما لآخر محلي كان موجودًا في النطاق المحدد لتسجيله. |
DBG_SET_PROLOGUE_END | 0×07 | (بدون) | لضبط سجل جهاز الحالة prologue_end ،
مما يشير إلى أن إدخال الموضع التالي الذي تتم إضافته يجب
تعتبر نهاية مقدمة الطريقة (مكان مناسب
نقطة إيقاف طريقة). ماكينة تسجيل prologue_end هي
محوها بأي برنامج تشغيل خاص (>= 0x0a ).
|
|
DBG_SET_EPILOGUE_BEGIN | 0×08 | (بدون) | لضبط سجل جهاز الحالة epilogue_begin ،
مما يشير إلى أن إدخال الموضع التالي الذي تتم إضافته يجب
تعتبر بداية خاتمة الطريقة (مكان مناسب
تعليق التنفيذ قبل الخروج من الطريقة).
يتم محو سجلّ epilogue_begin من خلال أي خاص
(>= 0x0a ).
|
|
ملف_DBG_SET | 0x09 | uleb128p1 name_idx | name_idx : فهرس السلسلة لاسم ملف المصدر؛
NO_INDEX إذا كان غير معروف
|
إلى أن جميع إدخالات أرقام الأسطر اللاحقة تشير إلى هذا
اسم ملف المصدر، بدلاً من الاسم الافتراضي المحدد في
code_item
|
رموز العمليات الخاصة | 0x0a...0xff | (بدون) | تحقيق تقدمًا في تسجيل line وaddress ،
وتُصدر إدخال موضع، وتمحو prologue_end
epilogue_begin انظر أدناه للاطّلاع على الوصف.
|
رموز العمليات الخاصة
الرموز البرمجية التي تتضمن قِيَمًا بين 0x0a
و0xff
(شاملًا) نقل كل من line
وaddress
بكمية صغيرة ثم يُصدر إدخالاً جديدًا لجدول المواضع.
في ما يلي صيغة الزيادات:
DBG_FIRST_SPECIAL = 0x0a // the smallest special opcode DBG_LINE_BASE = -4 // the smallest line number increment DBG_LINE_RANGE = 15 // the number of line increments represented adjusted_opcode = opcode - DBG_FIRST_SPECIAL line += DBG_LINE_BASE + (adjusted_opcode % DBG_LINE_RANGE) address += (adjusted_opcode / DBG_LINE_RANGE)
دليل_التعليقات التوضيحية_عنصر
تمت الإشارة إليه من class_def_item
تظهر في قسم البيانات
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
class_annotations_off | مهم | من بداية الملف إلى التعليقات التوضيحية التي تم إنشاؤها مباشرة
في الصف، أو 0 إذا لم يكن لدى الصف تعليقات توضيحية مباشرة.
إذا كانت الإزاحة غير صفرية، يجب أن تكون في موقع داخل
قسم "data ". تم تحديد تنسيق البيانات
من "annotation_set_item " أدناه.
|
حجم_الحقول | مهم | عدد الحقول التي تمت إضافة تعليقات توضيحية إليها بواسطة هذا العنصر |
طرق_حجم_التعليقات التوضيحية | مهم | عدد الطرق التي تمت إضافة تعليقات توضيحية إليها بواسطة هذا العنصر |
معلمات_حجم_تعليقات توضيحية | مهم | عدد قوائم مَعلمات الطريقة التي تمت إضافة تعليقات توضيحية إليها من خلال هذا العنصر |
التعليقات التوضيحية للحقل | field_annotation[fields_size] (اختياري) | قائمة التعليقات التوضيحية للحقول المرتبطة يجب أن تتضمن عناصر القائمة
ترتيب تصاعدي حسب field_idx .
|
طريقة_التعليقات التوضيحية | method_annotation[methods_size] (اختيارية) | قائمة بالتعليقات التوضيحية للطرق المرتبطة. يجب أن تتضمن عناصر القائمة
ترتيب تصاعدي حسب method_idx .
|
معلمة_annotations | معلمة_annotation[parameters_size] (اختيارية) | قائمة بالتعليقات التوضيحية لمعلمات الطرق المرتبطة. عناصر
يجب ترتيب القائمة بترتيب متزايد، حسب method_idx .
|
ملاحظة: تظهر جميع العناصر field_id
و
يجب أن تشير مثيلات method_id
إلى الفئة التعريف نفسها.
تنسيق field_annotation
الاسم | التنسيق | الوصف |
---|---|---|
معرف_الحقل | مهم | في القائمة field_ids لهوية
الحقل الذي تتم إضافة تعليقات توضيحية إليه
|
التعليقات التوضيحية_متوقفة | مهم | من بداية الملف إلى قائمة التعليقات التوضيحية
في هذا المجال. يجب أن تكون الإزاحة في موقع جغرافي في data .
. يتم تحديد تنسيق البيانات من خلال
"annotation_set_item " أدناه.
|
تنسيق method_annotation
الاسم | التنسيق | الوصف |
---|---|---|
معرّف_الطريقة | مهم | في القائمة method_ids لهوية
طريقة لإضافة تعليقات توضيحية
|
التعليقات التوضيحية_متوقفة | مهم | من بداية الملف إلى قائمة التعليقات التوضيحية
الطريقة. يجب أن تكون الإزاحة في موقع في
قسم "data ". يتم تحديد تنسيق البيانات من خلال
"annotation_set_item " أدناه.
|
تنسيق المَعلمة_annotation
الاسم | التنسيق | الوصف |
---|---|---|
معرّف_الطريقة | مهم | في القائمة method_ids لهوية
طريقة يتم وضع تعليقات توضيحية على معاملاتها
|
التعليقات التوضيحية_متوقفة | مهم | من بداية الملف إلى قائمة التعليقات التوضيحية
معلمات الطريقة. يجب أن تكون الإزاحة في موقع في
قسم "data ". يتم تحديد تنسيق البيانات من خلال
"annotation_set_ref_list " أدناه.
|
تعليقات_مجموعة_ref_list
تمت الإشارة إليه من parameters_annotations_item
تظهر في قسم البيانات
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | مهم | حجم القائمة في الإدخالات |
قائمة | Feedback_set_ref_item[size] | عناصر القائمة |
تنسيق التعليق التوضيحي مجموعة_ref_item
الاسم | التنسيق | الوصف |
---|---|---|
التعليقات التوضيحية_متوقفة | مهم | الإزاحة من بداية الملف إلى مجموعة التعليقات التوضيحية المشار إليها
أو 0 إذا لم تتوفّر تعليقات توضيحية لهذا العنصر.
إذا كانت الإزاحة غير صفرية، يجب أن تكون في موقع جغرافي في data .
. يتم تحديد تنسيق البيانات من خلال
"annotation_set_item " أدناه.
|
عنصر_مجموعة_التعليقات التوضيحية
تمت الإشارة إليها من annotate_directory_item، وfield_annotations_item، method_annotations_item و annotate_set_ref_item
تظهر في قسم البيانات
المحاذاة: 4 بايت
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | مهم | حجم المجموعة في الإدخالات |
الإدخالات | التعليق التوضيحي_خارج_السلعة[size] | وعناصر المجموعة. يجب فرز العناصر بترتيب متزايد،
من قناة "type_idx "
|
تنسيق_التعليقات التوضيحية_خارج_السلع
الاسم | التنسيق | الوصف |
---|---|---|
التعليق التوضيحي متوقف | مهم | الإزاحة من بداية الملف إلى التعليق التوضيحي.
يجب أن تكون الإزاحة إلى موقع جغرافي في القسم data ،
ويتم تحديد تنسيق البيانات في هذا الموقع من خلال
"annotation_item " أدناه.
|
عنصر_التعليق التوضيحي
تمت الإشارة إليها من annotate_set_item
تظهر في قسم البيانات
المحاذاة: لا شيء (محاذاة بالبايت)
الاسم | التنسيق | الوصف |
---|---|---|
الظهور | بايت | مستوى الرؤية المقصود لهذا التعليق التوضيحي (انظر أدناه) |
تعليق توضيحي | ترميز_مشفّر | بترميز محتويات التعليقات التوضيحية المشفرة، بالتنسيق الموضح من خلال
"تنسيق encoded_annotation " أقل من
"ترميز encoded_value " أعلاه.
|
قيم مستوى الرؤية
هذه هي الخيارات للحقل visibility
في
annotation_item
:
الاسم | القيمة | الوصف |
---|---|---|
VISIBILITY_BUILD | 0×00 | تكون مرئية فقط في وقت الإنشاء (على سبيل المثال، أثناء استخدام التحويل البرمجي) من التعليمات البرمجية الأخرى) |
VISIBILITY_RUNTIME | 0x01 | يهدف إلى إظهاره في وقت التشغيل |
نظام VISIBILITY_SYSTEM | 0x02 | تكون مرئية في وقت التشغيل، ولكن للنظام الأساسي فقط (وليس لرمز المستخدم العادي) |
عنصر_المصفوفة_المُشفَّرة
تمت الإشارة إليه من class_def_item
تظهر في قسم البيانات
المحاذاة: لا شيء (محاذاة بالبايت)
الاسم | التنسيق | الوصف |
---|---|---|
القيمة | مصفوفة_مشفّرة | وحدات بايت تمثل قيمة الصفيفة المشفَّرة بالتنسيق المحدّد
بواسطة "تنسيق encoded_array " ضمن "encoded_value "
الترميز" أعلاه.
|
إخفاء واجهة برمجة تطبيقات الصف البيانات
يتضمّن هذا القسم بيانات عن الواجهات المحظورة التي يستخدمها كل فئة.
ملاحظة: تم طرح ميزة واجهة برمجة التطبيقات المخفية في الإصدار 10.0 من نظام التشغيل Android. وينطبق فقط على ملفات DEX للفئات في مسار فئة التمهيد. قد يتم توسيع قائمة العلامات الموضّحة أدناه في الإصدارات المستقبلية. من Android. لمزيد من المعلومات، يُرجى مراجعة القيود المفروضة على الواجهات غير المستندة إلى حزمة تطوير البرامج (SDK):
الاسم | التنسيق | الوصف |
---|---|---|
الحجم | مهم | الحجم الإجمالي للقسم |
علامات إزاحة | uint[] | مصفوفة من إزاحة تمت فهرستها بواسطة class_idx .
يعني إدخال الصفيفة صفر في الفهرس class_idx أن
ما مِن بيانات لواجهة برمجة التطبيقات class_idx هذه أو كل واجهات برمجة التطبيقات المخفية
العلامات صفر.
وبخلاف ذلك، يكون إدخال الصفيفة غير صفري ويحتوي على إزاحة من
بداية القسم إلى مصفوفة من علامات واجهة برمجة التطبيقات المخفية
لهذا class_idx .
|
العلامة | uleb128[] | الصفائف المتسلسلة من علامات واجهة برمجة التطبيقات المخفية لكل فئة. ويتم توضيح قيم العلامات المحتملة في الجدول أدناه. يتم ترميز العلامات بنفس ترتيب الحقول والطرق. مُشفّرة في بيانات الفئة. |
أنواع علامات التقييد:
الاسم | القيمة | الوصف |
---|---|---|
القائمة البيضاء | 0 | واجهات يمكن استخدامها بحرية ودعمها كجزء من إطار عمل Android الموثَّق رسميًا فهرس الحزم: |
القائمة الرمادية | 1 | الواجهات غير المتوفرة في حزمة SDK التي يمكن استخدامها بغض النظر عن واجهات برمجة التطبيقات لمستوى واجهة برمجة التطبيقات المستهدَف. |
وضع في القائمة السوداء | 2 | الواجهات غير المتوفرة في حزمة SDK التي لا يمكن استخدامها بغض النظر عن وظائف التطبيق لمستوى واجهة برمجة التطبيقات المستهدَف. يؤدي الوصول إلى إحدى هذه الواجهات إلى خطأ في وقت التشغيل. |
القائمة الرمادية-max-o | 3 | الواجهات غير المتوفرة في حزمة تطوير البرامج (SDK) التي يمكن استخدامها لنظام التشغيل Android 8.x والإصدارات الأقدم إلا إذا كانت محظورة. |
القائمة الرمادية-max-p | 4 | واجهات غير متوفرة في حزمة SDK يمكن استخدامها لنظام التشغيل Android 9.x إلا إذا كانت محظورة. |
القائمة الرمادية-max-q | 5 | واجهات غير متوفرة في حزمة SDK يمكن استخدامها لنظام التشغيل Android 10.x إلا إذا كانت محظورة. |
القائمة الرمادية-max-r | 6 | واجهات غير متوفرة في حزمة SDK يمكن استخدامها لنظام التشغيل Android 11.x إلا إذا كانت محظورة. |
التعليقات التوضيحية للنظام
تُستخدم التعليقات التوضيحية للنظام لتمثيل أجزاء مختلفة من ومعلومات حول الفئات (والطرق والحقول). هذه المعلومات وعادةً ما يتم الوصول إليها بشكل غير مباشر بشكل غير مباشر فقط من خلال رمز العميل (غير النظام).
يتم تمثيل التعليقات التوضيحية للنظام في .dex
من الملفات بتنسيق
التعليقات التوضيحية التي تم ضبط مستوى الرؤية لها على VISIBILITY_SYSTEM
dalvik.annotation.AnnotationDefault
تظهر على الطرق في واجهات التعليقات التوضيحية
تم إرفاق تعليق توضيحي AnnotationDefault
بكلٍّ من هذه الخيارات.
للتعليقات التوضيحية التي تريد الإشارة إلى الروابط الافتراضية.
الاسم | التنسيق | الوصف |
---|---|---|
القيمة | تعليق توضيحي | الروابط التلقائية لهذا التعليق التوضيحي، ويتم تمثيلها كتعليق توضيحي من هذا النوع. يجب ألا يتضمن التعليق التوضيحي كل الأسماء التي يتم تحديدها بواسطة التعليق التوضيحي الأسماء المفقودة ببساطة ليس لها إعدادات افتراضية. |
Dalvik.annotation.EnclosingClass
يظهر في الصفوف
تم إرفاق تعليق توضيحي بالسمة EnclosingClass
بكل صف.
الذي يتم تعريفه كعضو في فئة أخرى في حد ذاته أو
مجهول ولكن لم يتم تعريفه ضمن نص طريقة (على سبيل المثال، وصف اصطناعي
الفئة الداخلية). يجب أن تحتوي كل فئة تتضمن هذا التعليق التوضيحي أيضًا على
تعليق توضيحي واحد (InnerClass
) بالإضافة إلى ذلك، يجب ألا يكون للفئة
كل من EnclosingClass
و
تعليق توضيحي واحد (EnclosingMethod
)
الاسم | التنسيق | الوصف |
---|---|---|
القيمة | الفئة | الفئة التي تتناول هذه الفئة من الناحية المعجمية |
dalvik.annotation.EnclosingMethod
يظهر في الصفوف
تم إرفاق تعليق توضيحي بالسمة EnclosingMethod
بكل صف.
والذي يتم تحديده داخل نص الطريقة. كل صف لديه هذا
يجب أن يتضمّن التعليق التوضيحي أيضًا التعليق التوضيحي InnerClass
.
بالإضافة إلى ذلك، يجب ألا يحتوي الصف على كل من EnclosingClass
والتعليق التوضيحي EnclosingMethod
.
الاسم | التنسيق | الوصف |
---|---|---|
القيمة | الطريقة | هو الطريقة الأكثر تحديدًا لهذه الفئة من الناحية اللغوية |
Dalvik.annotation.InnerClass
يظهر في الصفوف
تم إرفاق تعليق توضيحي بالسمة InnerClass
بكل صف.
والذي يتم تعريفه في النطاق المعجم لتعريف فئة أخرى.
يجب أن تحتوي أي فئة تشتمل على هذا التعليق التوضيحي أيضًا على أي
التعليق التوضيحي EnclosingClass
أو
تعليق توضيحي EnclosingMethod
الاسم | التنسيق | الوصف |
---|---|---|
اسم | سلسلة | الاسم البسيط المُعلَن عنه في الأصل لهذه الفئة (لا يتضمن أي
بادئة الحزمة). إذا كانت هذه الفئة مجهولة، فسيكون الاسم
null
|
علامات الوصول | تدخُّل دفاعي | علامات الوصول المُعلن عنها في الأصل للفئة (والتي قد تختلف من العلامات الفعالة بسبب عدم التطابق بين التنفيذ النماذج للغة المصدر والجهاز الافتراضي المستهدف) |
Dalvik.annotation.MemberClasses
يظهر في الصفوف
تم إرفاق تعليق توضيحي بالسمة MemberClasses
بكل صف.
التي تعلن عن فئات الأعضاء. (فئة الأعضاء هي فئة داخلية مباشرة
له اسم).
الاسم | التنسيق | الوصف |
---|---|---|
القيمة | الصف[] | مصفوفة فئات الأعضاء |
dalvik.annotation.Methodparams
يظهر مع طرق الدفع
ملاحظة: تمت إضافة هذا التعليق التوضيحي بعد Android 7.1. وسيتم تجاهله في إصدارات Android السابقة.
إنّ التعليق التوضيحي MethodParameters
اختياري ويمكن استخدامه
توفير البيانات الوصفية للمعلَمات مثل أسماء المعلَمات والمعدِّلات.
ويمكن حذف التعليق التوضيحي من طريقة أو دالة إنشائية بأمان عند
البيانات الوصفية للمعلمات ليست مطلوبة في وقت التشغيل.
يمكن استخدام java.lang.reflect.Parameter.isNamePresent()
للتحقّق من
ما إذا كانت البيانات الوصفية موجودة لمعلمة ما والانعكاس المرتبط بها
سيتم تطبيق طرق مثل java.lang.reflect.Parameter.getName()
الرجوع إلى السلوك التلقائي في وقت التشغيل في حال عدم توفّر المعلومات
عند تضمين البيانات الوصفية للمعلمات، يجب أن تتضمن برامج التحويل البرمجي معلومات للفئات التي تم إنشاؤها مثل التعدادات، نظرًا لأن البيانات الوصفية للمعلمة تتضمّن ما إذا كانت المَعلمة اصطناعية أو إلزامية أم لا.
يصف التعليق التوضيحي MethodParameters
طريقة فردية فقط
المعلَمات. لذلك، قد تحذف برامج التجميع التعليق التوضيحي تمامًا.
للإنشاءات والطرق التي لا تحتوي على معلَمات، لأغراض حجم الرمز البرمجي
وكفاءة وقت التشغيل.
يجب أن تكون الصفائف الموثقة أدناه بنفس حجم
بنية مؤشر method_id_item
المرتبطة بالطريقة
سيتم رمي java.lang.reflect.MalformedParametersException
وقت التشغيل.
وهي: method_id_item.proto_idx
->
proto_id_item.parameters_off
->
يجب أن تكون type_list.size
هي نفسها names().length
accessFlags().length
لأنّ MethodParameters
تصف كل الطرق الرسمية
والمعلَمات، حتى تلك التي لم يتم تعريفها بشكل صريح أو ضمني في رمز المصدر
قد يختلف حجم الصفائف عن التوقيع أو البيانات الوصفية الأخرى
المعلومات التي تستند فقط إلى المعلمات الصريحة المعلنة في المصدر
الرمز. لن تتضمّن "MethodParameters
" أيضًا أي معلومات عن
كتابة معلمات مستلم التعليقات التوضيحية غير الموجودة في الطريقة الفعلية
التوقيع.
الاسم | التنسيق | الوصف |
---|---|---|
الأسماء | String[] | أسماء المعاملات الرسمية للطريقة المرتبطة. الصفيفة
يجب ألا تكون قيمة خالية ولكن يجب أن تكون فارغة إذا لم تكن هناك معلمات رسمية. قيمة في
يجب أن تكون الصفيفة خالية إذا كانت المعلمة الرسمية التي تتضمن هذا الفهرس بدون اسم. إذا كانت سلاسل اسم المَعلمة فارغة أو تحتوي على '.' أو ';' أو '[' أو '/' ثم a سيتم رمي java.lang.reflect.MalformedParametersException
وقت التشغيل.
|
علامات الوصول | int[] | علامات الوصول للمعلَمات الرسمية للطريقة المرتبطة. تشير رسالة الأشكال البيانية
يجب ألا تكون الصفيفة فارغة ولكن يجب أن تكون فارغة إذا لم تكن هناك معلَمات رسمية. القيمة هي قناع بت بالقيم التالية:
java.lang.reflect.MalformedParametersException في وقت التشغيل.
|
dalvik.annotation.Signature
تظهر في الفئات والحقول والطرق
يتم إرفاق تعليق توضيحي بالسمة Signature
بكل صف.
أو حقل أو طريقة يتم تعريفها من حيث نوع أكثر تعقيدًا
عن القيمة التي يمكن تمثيلها باستخدام type_id_item
. تشير رسالة الأشكال البيانية
لا يحدد التنسيق .dex
تنسيق التوقيعات، هو/هي
هي القدرة على تمثيل أي توقيع مصدر
من أجل تنفيذ ناجح لهذه اللغة
الدلالة. وبناءً على ذلك، لا يتم تحليل التوقيعات أو التحقق منها بشكل عام.
من خلال عمليات تنفيذ الأجهزة الافتراضية. يتم تسليم التوقيعات ببساطة
واجهات برمجة التطبيقات والأدوات ذات المستوى الأعلى (مثل برامج تصحيح الأخطاء). يُعد أي استخدام
فينبغي كتابة توقيع حتى لا يحدث أي
افتراضات حول تلقي توقيعات صالحة فقط، وحماية صريحة
نفسها ضد احتمال المصادفة عبر جملة
توقيع غير صالح.
نظرًا لأن سلاسل التوقيع تميل إلى أن تحتوي على الكثير من المحتوى المكرر،
يتم تعريف تعليق Signature
التوضيحي بأنّه مصفوفة من
حيث تشير العناصر المكررة بشكل طبيعي إلى نفس
البيانات الأساسية، ويؤخذ التوقيع على أنه سلسلة
جميع السلاسل في الصفيفة. لا توجد قواعد حول كيفية سحب
وفصل التوقيع إلى سلاسل منفصلة؛ يعود تمامًا إلى
الأدوات التي تنشئ ملفات .dex
.
الاسم | التنسيق | الوصف |
---|---|---|
القيمة | String[] | توقيع هذه الفئة أو العضو، كمصفوفة من السلاسل التي هو أن يتم تسلسله معًا |
دالفيك.annotation.Throws
يظهر مع طرق الدفع
يتم إرفاق تعليق توضيحي Throws
بكل طريقة
الإعلان عن طرح نوع أو أكثر من أنواع الاستثناءات.
الاسم | التنسيق | الوصف |
---|---|---|
القيمة | الصف[] | طرح صفيفة أنواع الاستثناءات |