এই ডকুমেন্টটি .dex
ফাইলের লেআউট এবং বিষয়বস্তু বর্ণনা করে, যেগুলি ক্লাস সংজ্ঞা এবং তাদের সংশ্লিষ্ট উপাত্তের একটি সেট রাখতে ব্যবহৃত হয়।
প্রকারের নির্দেশিকা
নাম | বর্ণনা |
---|---|
বাইট | 8-বিট স্বাক্ষরিত int |
ubyte | 8-বিট স্বাক্ষরবিহীন int |
সংক্ষিপ্ত | 16-বিট স্বাক্ষরিত int, সামান্য-এন্ডিয়ান |
ছোট | 16-বিট স্বাক্ষরবিহীন int, সামান্য-এন্ডিয়ান |
int | 32-বিট স্বাক্ষরিত int, সামান্য-এন্ডিয়ান |
uint | 32-বিট স্বাক্ষরবিহীন int, সামান্য-এন্ডিয়ান |
দীর্ঘ | 64-বিট স্বাক্ষরিত int, সামান্য-এন্ডিয়ান |
ulong | 64-বিট স্বাক্ষরবিহীন int, সামান্য-এন্ডিয়ান |
sleb128 | স্বাক্ষরিত LEB128, পরিবর্তনশীল-দৈর্ঘ্য (নীচে দেখুন) |
uleb128 | স্বাক্ষরবিহীন LEB128, পরিবর্তনশীল-দৈর্ঘ্য (নীচে দেখুন) |
uleb128p1 | স্বাক্ষরবিহীন LEB128 প্লাস 1 , পরিবর্তনশীল-দৈর্ঘ্য (নীচে দেখুন) |
LEB128
LEB128 (" L ittle- E ndian B ase 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
একটি স্বাক্ষরিত মানকে উপস্থাপন করতে ব্যবহৃত হয়, যেখানে উপস্থাপনাটি মান এবং একটি 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_ids | টাইপ_আইডি_আইটেম[] | টাইপ শনাক্তকারী তালিকা. ফাইলে সংজ্ঞায়িত হোক বা না হোক এই ফাইলের দ্বারা উল্লেখ করা সমস্ত প্রকারের (শ্রেণী, অ্যারে, বা আদিম প্রকার) জন্য এইগুলি শনাক্তকারী৷ এই তালিকাটি string_id সূচী অনুসারে বাছাই করা আবশ্যক, এবং এটিতে অবশ্যই কোনো ডুপ্লিকেট এন্ট্রি থাকবে না। |
proto_ids | প্রোটো_আইডি_আইটেম[] | পদ্ধতি প্রোটোটাইপ শনাক্তকারী তালিকা. এই ফাইলের দ্বারা উল্লেখ করা সমস্ত প্রোটোটাইপের জন্য এইগুলি শনাক্তকারী৷ এই তালিকাটি অবশ্যই রিটার্ন-টাইপ ( type_id সূচক অনুসারে) প্রধান ক্রম অনুসারে সাজাতে হবে এবং তারপরে আর্গুমেন্ট তালিকা (লেক্সিকোগ্রাফিক ক্রম, type_id সূচক অনুসারে পৃথক আর্গুমেন্ট) অনুসারে সাজাতে হবে। তালিকায় কোনো ডুপ্লিকেট এন্ট্রি থাকা উচিত নয়। |
field_ids | ক্ষেত্র_আইডি_আইটেম[] | ক্ষেত্র শনাক্তকারী তালিকা। ফাইলে সংজ্ঞায়িত হোক বা না হোক এই ফাইলের দ্বারা উল্লেখ করা সমস্ত ক্ষেত্রের জন্য এগুলি শনাক্তকারী৷ এই তালিকাটি অবশ্যই সাজাতে হবে, যেখানে সংজ্ঞায়িত প্রকার ( type_id সূচক দ্বারা) প্রধান ক্রম, ক্ষেত্রের নাম ( string_id সূচক দ্বারা) মধ্যবর্তী ক্রম, এবং টাইপ ( type_id সূচক দ্বারা) হল ছোট ক্রম। তালিকায় কোনো ডুপ্লিকেট এন্ট্রি থাকা উচিত নয়। |
পদ্ধতি_আইডি | পদ্ধতি_আইডি_আইটেম[] | পদ্ধতি শনাক্তকারী তালিকা। ফাইলে সংজ্ঞায়িত হোক বা না হোক এই ফাইলের দ্বারা উল্লেখ করা সমস্ত পদ্ধতির জন্য এগুলি শনাক্তকারী। এই তালিকাটি অবশ্যই সাজাতে হবে, যেখানে সংজ্ঞায়িত প্রকার ( type_id সূচক দ্বারা) প্রধান ক্রম, পদ্ধতির নাম ( string_id সূচক দ্বারা) হল মধ্যবর্তী ক্রম এবং পদ্ধতির প্রোটোটাইপ ( proto_id সূচক দ্বারা) হল ছোট ক্রম। তালিকায় কোনো ডুপ্লিকেট এন্ট্রি থাকা উচিত নয়। |
class_defs | class_def_item[] | শ্রেণীর সংজ্ঞা তালিকা। ক্লাসগুলিকে এমনভাবে অর্ডার করতে হবে যাতে প্রদত্ত ক্লাসের সুপারক্লাস এবং বাস্তবায়িত ইন্টারফেসগুলি রেফারিং ক্লাসের আগে তালিকায় উপস্থিত হয়। তদ্ব্যতীত, তালিকায় একাধিকবার উপস্থিত হওয়া একই নামের ক্লাসের জন্য একটি সংজ্ঞার জন্য এটি অবৈধ। |
কল_সাইট_আইডি | কল_সাইট_আইডি_আইটেম[] | কল সাইট শনাক্তকারী তালিকা. ফাইলে সংজ্ঞায়িত হোক বা না হোক এই ফাইলের দ্বারা উল্লেখ করা সমস্ত কল সাইটের জন্য এগুলি শনাক্তকারী৷ এই তালিকাটি অবশ্যই call_site_off ঊর্ধ্বক্রম অনুসারে সাজাতে হবে। |
পদ্ধতি_হ্যান্ডল | পদ্ধতি_হ্যান্ডেল_আইটেম[] | পদ্ধতি হ্যান্ডেল তালিকা। এই ফাইলের দ্বারা উল্লেখ করা সমস্ত পদ্ধতির হ্যান্ডেলগুলির একটি তালিকা, ফাইলে সংজ্ঞায়িত হোক বা না হোক। এই তালিকাটি সাজানো হয়নি এবং এতে ডুপ্লিকেট থাকতে পারে যা যৌক্তিকভাবে বিভিন্ন পদ্ধতি হ্যান্ডেল উদাহরণের সাথে মিলে যাবে। |
তথ্য | ubyte[] | ডেটা এলাকা, উপরে তালিকাভুক্ত টেবিলের জন্য সমস্ত সমর্থন ডেটা রয়েছে। বিভিন্ন আইটেমের বিভিন্ন প্রান্তিককরণের প্রয়োজনীয়তা রয়েছে এবং যথাযথ প্রান্তিককরণ অর্জনের জন্য প্রয়োজন হলে প্রতিটি আইটেমের আগে প্যাডিং বাইট ঢোকানো হয়। |
লিঙ্ক_ডেটা | ubyte[] | স্ট্যাটিকভাবে লিঙ্ক করা ফাইলে ব্যবহৃত ডেটা। এই বিভাগে তথ্য বিন্যাস এই নথি দ্বারা অনির্দিষ্ট রেখে গেছে. এই বিভাগটি আনলিঙ্ক করা ফাইলগুলিতে খালি, এবং রানটাইম বাস্তবায়নগুলি উপযুক্ত হিসাবে এটি ব্যবহার করতে পারে। |
বিটফিল্ড, স্ট্রিং এবং ধ্রুবক সংজ্ঞা
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"
দ্রষ্টব্য: Android 9.0 রিলিজে ফর্ম্যাটের 039
সংস্করণের জন্য সমর্থন যোগ করা হয়েছিল, যা দুটি নতুন বাইটকোড, const-method-handle
এবং const-method-type
চালু করেছে। (এগুলি প্রতিটি বাইটকোড সেট টেবিলের সারাংশে বর্ণিত হয়েছে।) Android 10-এ, সংস্করণ 039
লুকানো API তথ্য অন্তর্ভুক্ত করার জন্য DEX ফাইল বিন্যাসকে প্রসারিত করে যা শুধুমাত্র বুট ক্লাস পাথের DEX ফাইলগুলির জন্য প্রযোজ্য।
দ্রষ্টব্য: Android 8.0 রিলিজে ফর্ম্যাটের 038
সংস্করণের জন্য সমর্থন যোগ করা হয়েছে। সংস্করণ 038
নতুন বাইটকোড যুক্ত করেছে ( invoke-polymorphic
এবং invoke-custom
) এবং পদ্ধতি হ্যান্ডেলগুলির জন্য ডেটা।
দ্রষ্টব্য: Android 7.0 রিলিজে ফর্ম্যাটের 037
সংস্করণের জন্য সমর্থন যোগ করা হয়েছে। সংস্করণ 037
এর আগে অ্যান্ড্রয়েডের বেশিরভাগ সংস্করণ ফরম্যাটের সংস্করণ 035
ব্যবহার করেছে। সংস্করণ 035
এবং 037
মধ্যে একমাত্র পার্থক্য হল ডিফল্ট পদ্ধতির সংযোজন এবং invoke
সমন্বয়।
দ্রষ্টব্য: সর্বজনীন সফ্টওয়্যার প্রকাশগুলিতে বিন্যাসের অন্তত কয়েকটি পূর্ববর্তী সংস্করণ ব্যবহার করা হয়েছে। উদাহরণস্বরূপ, সংস্করণ 009
অ্যান্ড্রয়েড প্ল্যাটফর্মের M3 রিলিজের জন্য ব্যবহার করা হয়েছিল (নভেম্বর-ডিসেম্বর 2007), এবং সংস্করণ 013
ব্যবহার করা হয়েছিল অ্যান্ড্রয়েড প্ল্যাটফর্মের M5 রিলিজের জন্য (ফেব্রুয়ারি-মার্চ 2008)। বিভিন্ন দিক থেকে, বিন্যাসের এই আগের সংস্করণগুলি এই নথিতে বর্ণিত সংস্করণ থেকে উল্লেখযোগ্যভাবে পৃথক।
ENDIAN_CONSTANT এবং REVERSE_ENDIAN_CONSTANT৷
header_item এ এমবেড করা হয়েছে
ধ্রুবক ENDIAN_CONSTANT
যে ফাইলটিতে এটি পাওয়া যায় তার শেষতা নির্দেশ করতে ব্যবহৃত হয়। যদিও স্ট্যান্ডার্ড .dex
ফরম্যাট সামান্য-এন্ডিয়ান, বাস্তবায়নগুলি বাইট-অদলবদল করতে বেছে নিতে পারে। যদি একটি ইমপ্লিমেন্টেশন একটি হেডারে আসে যার endian_tag
ENDIAN_CONSTANT
এর পরিবর্তে REVERSE_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
অ্যাক্সেস_ফ্ল্যাগ সংজ্ঞা
class_def_item, encoded_field, encoded_method এবং InnerClas এ এমবেড করা হয়েছে
এই পতাকার বিটফিল্ডগুলি ক্লাস এবং ক্লাস সদস্যদের অ্যাক্সেসযোগ্যতা এবং সামগ্রিক বৈশিষ্ট্যগুলি নির্দেশ করতে ব্যবহৃত হয়।
নাম | মান | ক্লাসের জন্য (এবং InnerClass টীকা) | ক্ষেত্রগুলির জন্য | পদ্ধতির জন্য |
---|---|---|---|---|
ACC_Public | 0x1 | public : সর্বত্র দৃশ্যমান | public : সর্বত্র দৃশ্যমান | public : সর্বত্র দৃশ্যমান |
ACC_PRIVATE | 0x2 | private : শুধুমাত্র ক্লাস সংজ্ঞায়িত করার জন্য দৃশ্যমান | private : শুধুমাত্র ক্লাস সংজ্ঞায়িত করার জন্য দৃশ্যমান | private : শুধুমাত্র ক্লাস সংজ্ঞায়িত করার জন্য দৃশ্যমান |
ACC_PROTECTED | 0x4 | protected : প্যাকেজ এবং সাবক্লাসে দৃশ্যমান | protected : প্যাকেজ এবং সাবক্লাসে দৃশ্যমান | protected : প্যাকেজ এবং সাবক্লাসে দৃশ্যমান |
ACC_STATIC | 0x8 | static : this রেফারেন্সের বাইরের দিয়ে তৈরি করা হয় না | static : গ্লোবাল থেকে ডিফাইনিং ক্লাস | static : this যুক্তি গ্রহণ করে না |
ACC_FINAL | 0x10 | final : সাবক্লাসেবল নয় | final : নির্মাণের পরে অপরিবর্তনীয় | final : ওভাররিডেবল নয় |
ACC_SYNCHRONIZED | 0x20 | synchronized : যুক্ত লক স্বয়ংক্রিয়ভাবে এই পদ্ধতিতে কলের চারপাশে অর্জিত। দ্রষ্টব্য: এটি শুধুমাত্র সেট করার জন্য বৈধ যখন | ||
ACC_VOLATILE | 0x40 | volatile : থ্রেড নিরাপত্তার জন্য সাহায্য করার জন্য বিশেষ অ্যাক্সেসের নিয়ম | ||
ACC_BRIDGE | 0x40 | সেতু পদ্ধতি, একটি টাইপ-নিরাপদ সেতু হিসাবে কম্পাইলার দ্বারা স্বয়ংক্রিয়ভাবে যোগ করা হয়েছে | ||
ACC_TRANSIENT | 0x80 | transient : ডিফল্ট সিরিয়ালাইজেশন দ্বারা সংরক্ষণ করা যাবে না | ||
ACC_VARARGS | 0x80 | শেষ যুক্তিকে কম্পাইলার দ্বারা একটি "বিশ্রাম" যুক্তি হিসাবে বিবেচনা করা উচিত | ||
ACC_NATIVE | 0x100 | native : নেটিভ কোডে প্রয়োগ করা হয়েছে | ||
ACC_INTERFACE | 0x200 | interface : গুন-বাস্তবায়নযোগ্য বিমূর্ত শ্রেণী | ||
ACC_ABSTRACT | 0x400 | abstract : সরাসরি তাত্ক্ষণিক নয় | abstract : এই শ্রেণীর দ্বারা অবাস্তব | |
ACC_STRICT | 0x800 | strictfp : ফ্লোটিং-পয়েন্ট পাটিগণিতের জন্য কঠোর নিয়ম | ||
ACC_SYNTHETIC | 0x1000 | সোর্স কোডে সরাসরি সংজ্ঞায়িত নয় | সোর্স কোডে সরাসরি সংজ্ঞায়িত নয় | সোর্স কোডে সরাসরি সংজ্ঞায়িত নয় |
ACC_ANNOTATION | 0x2000 | একটি টীকা ক্লাস হিসাবে ঘোষিত | ||
ACC_ENUM | 0x4000 | একটি গণনাকৃত প্রকার হিসাবে ঘোষিত | একটি গণনাকৃত মান হিসাবে ঘোষিত | |
(অব্যবহৃত) | 0x8000 | |||
ACC_CONSTRUCTOR | 0x10000 | কনস্ট্রাক্টর পদ্ধতি (ক্লাস বা ইনস্ট্যান্স ইনিশিয়ালাইজার) | ||
ACC_DECLARED_ সিঙ্ক্রোনাইজড | 0x20000 | synchronized ঘোষণা করা হয়েছে।দ্রষ্টব্য: এটি কার্যকর করার উপর কোন প্রভাব ফেলে না (এই পতাকার প্রতিফলন ব্যতীত, প্রতি সে)। |
InnerClass
টীকাগুলির জন্য অনুমোদিত, এবং কখনই একটি class_def_item
এ চালু করা উচিত নয়।
পরিবর্তিত UTF-8 এনকোডিং
সহজ উত্তরাধিকার সমর্থনের জন্য ছাড় হিসাবে, .dex
ফরম্যাট তার স্ট্রিং ডেটাকে একটি ডি ফ্যাক্টো স্ট্যান্ডার্ড পরিবর্তিত UTF-8 ফর্মে এনকোড করে, যা পরবর্তীতে MUTF-8 হিসাবে উল্লেখ করা হয়। এই ফর্মটি স্ট্যান্ডার্ড UTF-8 এর মতো, ছাড়া:
- শুধুমাত্র এক-, দুই- এবং তিন-বাইট এনকোডিং ব্যবহার করা হয়।
-
U+10000
রেঞ্জের কোড পয়েন্ট …U+10ffff
একটি সারোগেট জোড়া হিসাবে এনকোড করা হয়, যার প্রত্যেকটি একটি তিন-বাইট এনকোডেড মান হিসাবে উপস্থাপিত হয়। - কোড পয়েন্ট
U+0000
দুই-বাইট আকারে এনকোড করা হয়েছে। - একটি সাধারণ নাল বাইট (মান
0
) একটি স্ট্রিংয়ের শেষ নির্দেশ করে, যেমনটি স্ট্যান্ডার্ড সি ভাষার ব্যাখ্যা।
উপরের প্রথম দুটি আইটেম সংক্ষিপ্ত করা যেতে পারে এইভাবে: MUTF-8 হল UTF-16 এর জন্য একটি এনকোডিং বিন্যাস, ইউনিকোড অক্ষরের জন্য আরও সরাসরি এনকোডিং বিন্যাস না হয়ে।
উপরের চূড়ান্ত দুটি আইটেম একটি স্ট্রিং-এ কোড পয়েন্ট U+0000
অন্তর্ভুক্ত করা এবং এখনও এটিকে C-স্টাইলের নাল-টার্মিনেটেড স্ট্রিং হিসাবে ব্যবহার করা সম্ভব করে তোলে।
যাইহোক, U+0000
এর বিশেষ এনকোডিং এর অর্থ হল, সাধারণ UTF-8 এর বিপরীতে, MUTF-8 স্ট্রিংগুলির একটি জোড়ায় স্ট্যান্ডার্ড C ফাংশন strcmp()
কল করার ফলাফল সবসময় অসম স্ট্রিংগুলির তুলনার সঠিকভাবে স্বাক্ষরিত ফলাফল নির্দেশ করে না। . যখন অর্ডার করা (শুধু সমতা নয়) একটি উদ্বেগের বিষয়, তখন MUTF-8 স্ট্রিংগুলির তুলনা করার সবচেয়ে সহজ উপায় হল তাদের অক্ষর অনুসারে অক্ষর ডিকোড করা এবং ডিকোড করা মানগুলির তুলনা করা। (তবে, আরও চতুর বাস্তবায়নও সম্ভব।)
অক্ষর এনকোডিং সম্পর্কে আরও তথ্যের জন্য অনুগ্রহ করে ইউনিকোড স্ট্যান্ডার্ড দেখুন। MUTF-8 প্রকৃতপক্ষে (অপেক্ষাকৃত কম সুপরিচিত) এনকোডিং CESU-8- এর থেকে UTF-8 প্রতি সে-এর কাছাকাছি।
encoded_value এনকোডিং
annotation_element এবং encoded_array_item এ এমবেড করা হয়েছে
একটি encoded_value
হল (প্রায়) নির্বিচারে শ্রেণীবদ্ধভাবে কাঠামোবদ্ধ ডেটার একটি এনকোড করা অংশ। এনকোডিংটি কম্প্যাক্ট এবং পার্স করার জন্য সহজবোধ্য উভয়ই বোঝানো হয়েছে।
নাম | বিন্যাস | বর্ণনা |
---|---|---|
(মান_আর্গ << 5) | মান_প্রকার | ubyte | উচ্চ-ক্রম তিনটি বিটে একটি ঐচ্ছিক স্পষ্টীকরণ যুক্তি সহ অবিলম্বে পরবর্তী value প্রকার নির্দেশ করে বাইট। বিভিন্ন value সংজ্ঞা জন্য নীচে দেখুন. বেশীরভাগ ক্ষেত্রে, value_arg অবিলম্বে-পরবর্তী value দৈর্ঘ্যকে বাইটে এনকোড করে, যেমন (size - 1) , যেমন, 0 মানে মানের একটি বাইট প্রয়োজন এবং 7 মানে আট বাইট প্রয়োজন; যাইহোক, নীচে উল্লিখিত হিসাবে ব্যতিক্রম আছে. |
মান | ubyte[] | বাইট মানের প্রতিনিধিত্ব করে, দৈর্ঘ্যে পরিবর্তনশীল এবং বিভিন্ন value_type বাইটের জন্য ভিন্নভাবে ব্যাখ্যা করা হয়, যদিও সর্বদা সামান্য-এন্ডিয়ান। বিস্তারিত জানার জন্য নীচের বিভিন্ন মান সংজ্ঞা দেখুন. |
মান বিন্যাস
নাম টাইপ করুন | value_type | value_arg বিন্যাস | value বিন্যাস | বর্ণনা |
---|---|---|---|---|
VALUE_BYTE | 0x00 | (কোনটিই নয়; 0 হতে হবে) | ubyte[1] | স্বাক্ষরিত এক-বাইট পূর্ণসংখ্যার মান |
VALUE_SHORT | 0x02 | আকার - 1 (0…1) | ubyte[আকার] | স্বাক্ষরিত দুই-বাইট পূর্ণসংখ্যা মান, সাইন-বর্ধিত |
VALUE_CHAR | 0x03 | আকার - 1 (0…1) | ubyte[আকার] | স্বাক্ষরবিহীন দুই-বাইট পূর্ণসংখ্যা মান, শূন্য-বর্ধিত |
VALUE_INT | 0x04 | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরিত চার-বাইট পূর্ণসংখ্যা মান, সাইন-বর্ধিত |
VALUE_LONG | 0x06 | আকার - 1 (0…7) | ubyte[আকার] | স্বাক্ষরিত আট-বাইট পূর্ণসংখ্যা মান, সাইন-বর্ধিত |
VALUE_FLOAT | 0x10 | আকার - 1 (0…3) | ubyte[আকার] | চার-বাইট বিট প্যাটার্ন, ডানদিকে শূন্য-প্রসারিত এবং IEEE754 32-বিট ফ্লোটিং পয়েন্ট মান হিসাবে ব্যাখ্যা করা হয়েছে |
VALUE_DOUBLE | 0x11 | আকার - 1 (0…7) | ubyte[আকার] | আট-বাইট বিট প্যাটার্ন, ডানদিকে শূন্য-প্রসারিত এবং IEEE754 64-বিট ফ্লোটিং পয়েন্ট মান হিসাবে ব্যাখ্যা করা হয়েছে |
VALUE_METHOD_TYPE | 0x15 | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরবিহীন (শূন্য-বর্ধিত) চার-বাইট পূর্ণসংখ্যার মান, proto_ids বিভাগে একটি সূচক হিসাবে ব্যাখ্যা করা হয় এবং একটি পদ্ধতি প্রকারের মান উপস্থাপন করে |
VALUE_METHOD_HANDLE | 0x16 | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরবিহীন (শূন্য-বর্ধিত) চার-বাইট পূর্ণসংখ্যা মান, method_handles বিভাগে একটি সূচক হিসাবে ব্যাখ্যা করা হয়েছে এবং একটি পদ্ধতি হ্যান্ডেল মান উপস্থাপন করে |
VALUE_STRING | 0x17 | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরবিহীন (শূন্য-বর্ধিত) চার-বাইট পূর্ণসংখ্যা মান, string_ids বিভাগে একটি সূচক হিসাবে ব্যাখ্যা করা হয় এবং একটি স্ট্রিং মান উপস্থাপন করে |
VALUE_TYPE | 0x18 | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরবিহীন (শূন্য-বর্ধিত) চার-বাইট পূর্ণসংখ্যা মান, type_ids বিভাগে একটি সূচক হিসাবে ব্যাখ্যা করা হয় এবং একটি প্রতিফলিত প্রকার/শ্রেণী মান উপস্থাপন করে |
VALUE_FIELD | 0x19 | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরবিহীন (শূন্য-বর্ধিত) চার-বাইট পূর্ণসংখ্যা মান, field_ids বিভাগে একটি সূচক হিসাবে ব্যাখ্যা করা হয়েছে এবং একটি প্রতিফলিত ক্ষেত্র মান উপস্থাপন করে |
VALUE_METHOD | 0x1a | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরবিহীন (শূন্য-বর্ধিত) চার-বাইট পূর্ণসংখ্যার মান, method_ids বিভাগে একটি সূচক হিসাবে ব্যাখ্যা করা হয়েছে এবং একটি প্রতিফলিত পদ্ধতির মান উপস্থাপন করে |
VALUE_ENUM | 0x1 খ | আকার - 1 (0…3) | ubyte[আকার] | স্বাক্ষরবিহীন (শূন্য-বর্ধিত) চার-বাইট পূর্ণসংখ্যার মান, field_ids বিভাগে একটি সূচক হিসাবে ব্যাখ্যা করা হয় এবং একটি গণনাকৃত টাইপ ধ্রুবকের মান উপস্থাপন করে |
VALUE_ARRAY | 0x1c | (কোনটিই নয়; 0 হতে হবে) | encoded_array | মানগুলির একটি বিন্যাস, নীচে " encoded_array বিন্যাস" দ্বারা নির্দিষ্ট করা বিন্যাসে। value আকার এনকোডিং এর মধ্যে নিহিত। |
VALUE_ANNOTATION | 0x1d | (কোনটিই নয়; 0 হতে হবে) | এনকোডেড_টীকা | একটি উপ-টীকা, নীচের " encoded_annotation বিন্যাস" দ্বারা নির্দিষ্ট করা বিন্যাসে। value আকার এনকোডিং এর মধ্যে নিহিত। |
VALUE_NULL | 0x1e | (কোনটিই নয়; 0 হতে হবে) | (কোনটিই নয়) | null রেফারেন্স মান |
VALUE_BOOLEAN | 0x1f | বুলিয়ান (0…1) | (কোনটিই নয়) | এক-বিট মান; false জন্য 0 এবং true জন্য 1 । বিট value_arg উপস্থাপন করা হয়। |
encoded_array বিন্যাস
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | uleb128 | অ্যারের উপাদানের সংখ্যা |
মান | encoded_value[আকার] | এই বিভাগ দ্বারা নির্দিষ্ট বিন্যাসে size encoded_value বাইট ক্রমগুলির একটি সিরিজ, ক্রমানুসারে সংযুক্ত। |
এনকোডেড_টীকা বিন্যাস
নাম | বিন্যাস | বর্ণনা |
---|---|---|
type_idx | uleb128 | টীকা প্রকার। এটি অবশ্যই একটি ক্লাস (অ্যারে বা আদিম নয়) টাইপ হতে হবে। |
আকার | uleb128 | এই টীকাটিতে নাম-মানের ম্যাপিংয়ের সংখ্যা |
উপাদান | টীকা_উপাদান[আকার] | টীকাটির উপাদান, সরাসরি ইন-লাইনে প্রতিনিধিত্ব করে (অফসেট হিসাবে নয়)। উপাদানগুলিকে string_id সূচক দ্বারা ক্রমবর্ধমান ক্রমে সাজাতে হবে৷ |
টীকা_এলিমেন্ট বিন্যাস
নাম | বিন্যাস | বর্ণনা |
---|---|---|
name_idx | uleb128 | উপাদানের নাম, string_ids বিভাগে একটি সূচক হিসাবে উপস্থাপিত। স্ট্রিংটি অবশ্যই উপরে সংজ্ঞায়িত MemberName এর জন্য সিনট্যাক্সের সাথে সঙ্গতিপূর্ণ হতে হবে। |
মান | encoded_value | উপাদান মান |
স্ট্রিং সিনট্যাক্স
একটি .dex
ফাইলে বিভিন্ন ধরণের আইটেম রয়েছে যা শেষ পর্যন্ত একটি স্ট্রিংকে উল্লেখ করে। নিম্নলিখিত BNF-শৈলী সংজ্ঞাগুলি এই স্ট্রিংগুলির জন্য গ্রহণযোগ্য সিনট্যাক্স নির্দেশ করে৷
সরল নাম
একটি সরলনাম হল অন্যান্য জিনিসের নামের সিনট্যাক্সের ভিত্তি। .dex
বিন্যাস এখানে ন্যায্য পরিমাণ অক্ষাংশের অনুমতি দেয় (সবচেয়ে সাধারণ উৎস ভাষার চেয়ে অনেক বেশি)। সংক্ষেপে, একটি সাধারণ নাম যে কোনো নিম্ন-ASCII বর্ণানুক্রমিক অক্ষর বা অঙ্ক, কয়েকটি নির্দিষ্ট নিম্ন-ASCII চিহ্ন এবং বেশিরভাগ নন-ASCII কোড পয়েন্ট যা নিয়ন্ত্রণ, স্থান বা বিশেষ অক্ষর নয়। সংস্করণ 040
থেকে শুরু করে বিন্যাসটি অতিরিক্তভাবে স্থান অক্ষর (ইউনিকোড Zs
বিভাগ) অনুমোদন করে। মনে রাখবেন যে সারোগেট কোড পয়েন্টগুলি (ব্যপ্তি U+d800
… U+dfff
) হিসাবে বৈধ নামের অক্ষর হিসাবে বিবেচিত হয় না, তবে ইউনিকোড সম্পূরক অক্ষরগুলি বৈধ (যা SimpleNameChar এর নিয়মের চূড়ান্ত বিকল্প দ্বারা উপস্থাপিত হয়), এবং তারা MUTF-8 এনকোডিং-এ সারোগেট কোড পয়েন্টের জোড়া হিসাবে একটি ফাইলে উপস্থাপন করা উচিত।
সরল নাম → | ||
সরলনামচর ( সিম্পলনেমচার )* | ||
সরলনামচর → | ||
'A' … 'Z' | ||
| | 'a' … 'z' | |
| | '0' … '9' | |
| | ' ' | DEX সংস্করণ 040 থেকে |
| | '$' | |
| | '-' | |
| | '_' | |
| | U+00a0 | DEX সংস্করণ 040 থেকে |
| | U+00a1 … U+1fff | |
| | U+2000 … U+200a | DEX সংস্করণ 040 থেকে |
| | U+2010 … U+2027 | |
| | U+202f | DEX সংস্করণ 040 থেকে |
| | U+2030 … U+d7ff | |
| | U+e000 … U+ffef | |
| | U+10000 … U+10ffff |
সদস্যের নাম
field_id_item এবং method_id_item দ্বারা ব্যবহৃত
একটি সদস্য নাম হল একটি শ্রেণীর সদস্যের নাম, সদস্যরা ক্ষেত্র, পদ্ধতি এবং অভ্যন্তরীণ ক্লাস।
সদস্যের নাম → | |
সরল নাম | |
| | '<' SimpleName '>' |
ফুলক্লাস নাম
একটি FullClassName হল একটি সম্পূর্ণ যোগ্য শ্রেণির নাম, একটি ঐচ্ছিক প্যাকেজ স্পেসিফায়ার সহ একটি প্রয়োজনীয় নাম অনুসরণ করে৷
সম্পূর্ণ ক্লাসের নাম → | |
ঐচ্ছিক প্যাকেজ প্রিফিক্স সরলনাম | |
ঐচ্ছিক প্যাকেজ উপসর্গ → | |
( সরল নাম '/' )* |
TypeDescriptor
type_id_item দ্বারা ব্যবহৃত
একটি TypeDescriptor হল আদিম, শ্রেণী, অ্যারে এবং void
সহ যেকোন প্রকারের উপস্থাপনা। বিভিন্ন সংস্করণের অর্থের জন্য নীচে দেখুন।
TypeDescriptor → | |
'V' | |
| | FieldTypeDescriptor |
FieldTypeDescriptor → | |
NonArrayFieldTypeDescriptor | |
| | ( '[' * 1…255) NonArrayFieldTypeDescriptor |
NonArrayFieldTypeDescriptor → | |
'Z' | |
| | 'B' |
| | 'S' |
| | 'C' |
| | 'I' |
| | 'J' |
| | 'F' |
| | 'D' |
| | 'L' FullClassName ';' |
সংক্ষিপ্ত বর্ণনাকারী
proto_id_item দ্বারা ব্যবহৃত
একটি শর্টডিসক্রিপ্টর হল রিটার্ন এবং প্যারামিটারের ধরন সহ একটি পদ্ধতির প্রোটোটাইপের সংক্ষিপ্ত ফর্ম উপস্থাপনা, বিভিন্ন রেফারেন্স (শ্রেণী বা অ্যারে) প্রকারের মধ্যে কোন পার্থক্য নেই। পরিবর্তে, সমস্ত রেফারেন্স প্রকার একটি একক 'L'
অক্ষর দ্বারা উপস্থাপিত হয়।
সংক্ষিপ্ত বর্ণনাকারী → | |
ShortyReturnType ( ShortyFieldType )* | |
ছোট রিটার্ন টাইপ → | |
'V' | |
| | শর্টফিল্ড টাইপ |
শর্টফিল্ড টাইপ → | |
'Z' | |
| | 'B' |
| | 'S' |
| | 'C' |
| | 'I' |
| | 'J' |
| | 'F' |
| | 'D' |
| | 'L' |
TypeDescriptor শব্দার্থবিদ্যা
এটি TypeDescriptor এর প্রতিটি রূপের অর্থ।
সিনট্যাক্স | অর্থ |
---|---|
ভি | void শুধুমাত্র রিটার্ন ধরনের জন্য বৈধ |
জেড | boolean |
খ | byte |
এস | short |
গ | char |
আমি | int |
জে | long |
চ | float |
ডি | double |
L সম্পূর্ণ/যোগ্য/নাম ; | ক্লাস fully.qualified.Name |
[ বর্ণনাকারী | descriptor অ্যারে, অ্যারে-অফ-অ্যারের জন্য পুনরাবৃত্তিমূলকভাবে ব্যবহারযোগ্য, যদিও এটি 255টির বেশি মাত্রা থাকা অবৈধ। |
আইটেম এবং সম্পর্কিত কাঠামো
এই বিভাগে .dex
ফাইলে প্রদর্শিত হতে পারে এমন প্রতিটি শীর্ষ-স্তরের আইটেমের সংজ্ঞা অন্তর্ভুক্ত করে।
হেডার_আইটেম
শিরোনাম বিভাগে প্রদর্শিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
জাদু | ubyte[8] = DEX_FILE_MAGIC | জাদু মান। আরো বিস্তারিত জানার জন্য " DEX_FILE_MAGIC " এর অধীনে উপরে আলোচনা দেখুন। |
চেকসাম | uint | adler32 বাকি ফাইলের চেকসাম ( magic এবং এই ক্ষেত্র ছাড়া সবকিছু); ফাইল দুর্নীতি সনাক্ত করতে ব্যবহৃত হয় |
স্বাক্ষর | ubyte[20] | বাকি ফাইলের SHA-1 স্বাক্ষর (হ্যাশ) ( magic , checksum , এবং এই ক্ষেত্র ছাড়া সবকিছু); অনন্যভাবে ফাইল সনাক্ত করতে ব্যবহৃত হয় |
ফাইল_সাইজ | uint | সম্পূর্ণ ফাইলের আকার (হেডার সহ), বাইটে |
হেডার_সাইজ | uint = 0x70 | হেডারের আকার (এই পুরো বিভাগটি), বাইটে। এটি বিন্যাসটি অবৈধ না করে কমপক্ষে সীমিত পরিমাণের পিছনে/ফরোয়ার্ড সামঞ্জস্যের জন্য অনুমতি দেয়। |
endian_tag | uint = ENDIAN_CONSTANT | endianness ট্যাগ। আরো বিস্তারিত জানার জন্য " ENDIAN_CONSTANT এবং REVERSE_ENDIAN_CONSTANT " এর অধীনে উপরে আলোচনা দেখুন৷ |
link_size | uint | লিঙ্ক বিভাগের আকার, অথবা 0 যদি এই ফাইলটি স্ট্যাটিকভাবে লিঙ্ক করা না হয় |
link_off | uint | ফাইলের শুরু থেকে লিঙ্ক বিভাগে অফসেট, অথবা 0 যদি link_size == 0 । অফসেট, যদি শূন্য না থাকে তবে link_data বিভাগে একটি অফসেট হওয়া উচিত। এই নথির দ্বারা নির্দেশিত ডেটার বিন্যাসটি অনির্দিষ্ট রাখা হয়েছে; এই হেডার ক্ষেত্র (এবং পূর্ববর্তী) রানটাইম বাস্তবায়ন দ্বারা ব্যবহারের জন্য হুক হিসাবে রেখে দেওয়া হয়। |
map_off | uint | ফাইলের শুরু থেকে মানচিত্র আইটেম পর্যন্ত অফসেট। অফসেট, যা অবশ্যই শূন্য নয়, data বিভাগে একটি অফসেট হওয়া উচিত এবং ডেটা নীচের " map_list " দ্বারা নির্দিষ্ট করা বিন্যাসে হওয়া উচিত৷ |
string_ids_size | uint | স্ট্রিং শনাক্তকারী তালিকায় স্ট্রিং গণনা |
string_ids_off | uint | ফাইলের শুরু থেকে স্ট্রিং শনাক্তকারীর তালিকায় অফসেট, অথবা 0 if string_ids_size == 0 (অবশ্যই একটি অদ্ভুত প্রান্তের ক্ষেত্রে)। অফসেট, যদি শূন্য না হয়, string_ids বিভাগের শুরুতে হওয়া উচিত। |
type_ids_size | uint | টাইপ শনাক্তকারী তালিকায় উপাদানের সংখ্যা, সর্বাধিক 65535 |
type_ids_off | uint | ফাইলের শুরু থেকে টাইপ আইডেন্টিফায়ার লিস্টে অফসেট, অথবা 0 if type_ids_size == 0 (স্বীকৃতভাবে একটি অদ্ভুত এজ কেস)। অফসেট, যদি শূন্য না থাকে, তাহলে type_ids বিভাগের শুরুতে হওয়া উচিত। |
proto_ids_size | uint | প্রোটোটাইপ শনাক্তকারী তালিকায় উপাদানের সংখ্যা, সর্বাধিক 65535 |
proto_ids_off | uint | ফাইলের শুরু থেকে প্রোটোটাইপ শনাক্তকারীর তালিকায় অফসেট, অথবা 0 যদি proto_ids_size == 0 (অবশ্যই একটি অদ্ভুত প্রান্তের ক্ষেত্রে)। অফসেট, যদি শূন্য না হয়, proto_ids বিভাগের শুরুতে হওয়া উচিত। |
ক্ষেত্র_আইডি_সাইজ | uint | ক্ষেত্র শনাক্তকারী তালিকায় উপাদানের গণনা |
field_ids_off | uint | ফাইলের শুরু থেকে ক্ষেত্র শনাক্তকারী তালিকায় অফসেট, অথবা 0 যদি field_ids_size == 0 । অফসেট, যদি শূন্য না হয়, field_ids বিভাগের শুরুতে হওয়া উচিত। |
পদ্ধতি_আইডি_সাইজ | uint | পদ্ধতি শনাক্তকারী তালিকায় উপাদানের গণনা |
পদ্ধতি_আইডি_অফ | uint | ফাইলের শুরু থেকে মেথড আইডেন্টিফায়ার লিস্টে অফসেট, অথবা 0 if method_ids_size == 0 । অফসেট, যদি শূন্য না থাকে তবে method_ids বিভাগের শুরুতে হওয়া উচিত। |
class_defs_size | uint | বর্গ সংজ্ঞা তালিকায় উপাদানের গণনা |
class_defs_off | uint | ফাইলের শুরু থেকে ক্লাস ডেফিনিশন লিস্টে অফসেট, অথবা 0 if class_defs_size == 0 (অবশ্যই একটি অদ্ভুত এজ কেস)। অফসেট, যদি শূন্য না হয়, class_defs বিভাগের শুরুতে হওয়া উচিত। |
ডেটা_সাইজ | uint | বাইটে data বিভাগের আকার। সাইজের (uint) এর একটি জোড় মাল্টিপল হতে হবে। |
ডেটা_বন্ধ | uint | ফাইলের শুরু থেকে data বিভাগের শুরু পর্যন্ত অফসেট। |
মানচিত্রের_তালিকা
ডেটা বিভাগে উপস্থিত হয়
হেডার_আইটেম থেকে উল্লেখ করা হয়েছে
প্রান্তিককরণ: 4 বাইট
এটি একটি ফাইলের সম্পূর্ণ বিষয়বস্তুর একটি তালিকা, ক্রমানুসারে। এটি header_item
এর ক্ষেত্রে কিছু অপ্রয়োজনীয়তা ধারণ করে কিন্তু এটি একটি সম্পূর্ণ ফাইলের উপর পুনরাবৃত্তি করার জন্য ব্যবহার করার জন্য একটি সহজ ফর্মের উদ্দেশ্যে। একটি প্রদত্ত টাইপ একটি মানচিত্রে সর্বাধিক একবার উপস্থিত হওয়া আবশ্যক, তবে বাকি বিন্যাস দ্বারা উহ্য বিধিনিষেধগুলি ব্যতীত কোন ক্রম প্রকারগুলি উপস্থিত হতে পারে তার উপর কোন বিধিনিষেধ নেই (যেমন, একটি header
বিভাগটি অবশ্যই প্রথমে প্রদর্শিত হবে, তারপরে একটি string_ids
বিভাগ, ইত্যাদি)। উপরন্তু, মানচিত্র এন্ট্রি প্রাথমিক অফসেট দ্বারা অর্ডার করা আবশ্যক এবং ওভারল্যাপ করা উচিত নয়।
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | uint | তালিকার আকার, এন্ট্রিতে |
তালিকা | মানচিত্র_আইটেম [আকার] | তালিকার উপাদান |
map_item বিন্যাস
নাম | বিন্যাস | বর্ণনা |
---|---|---|
টাইপ | ছোট | আইটেম প্রকার; নীচের টেবিল দেখুন |
অব্যবহৃত | ছোট | (অব্যবহৃত) |
আকার | uint | নির্দেশিত অফসেটে পাওয়া আইটেমের সংখ্যা গণনা |
অফসেট | uint | ফাইলের শুরু থেকে প্রশ্নে থাকা আইটেমগুলিতে অফসেট |
কোড টাইপ করুন
আইটেম প্রকার | ধ্রুবক | মান | বাইটে আইটেমের আকার |
---|---|---|---|
হেডার_আইটেম | TYPE_HEADER_ITEM | 0x0000 | 0x70 |
স্ট্রিং_আইডি_আইটেম | TYPE_STRING_ID_ITEM | 0x0001 | 0x04 |
টাইপ_আইডি_আইটেম | TYPE_TYPE_ID_ITEM | 0x0002 | 0x04 |
প্রোটো_আইডি_আইটেম | TYPE_PROTO_ID_ITEM | 0x0003 | 0x0c |
ক্ষেত্র_আইডি_আইটেম | TYPE_FIELD_ID_ITEM | 0x0004 | 0x08 |
পদ্ধতি_আইডি_আইটেম | TYPE_METHOD_ID_ITEM | 0x0005 | 0x08 |
class_def_item | TYPE_CLASS_DEF_ITEM | 0x0006 | 0x20 |
কল_সাইট_আইডি_আইটেম | TYPE_CALL_SITE_ID_ITEM | 0x0007 | 0x04 |
পদ্ধতি_হ্যান্ডেল_আইটেম | TYPE_METHOD_HANDLE_ITEM | 0x0008 | 0x08 |
মানচিত্রের_তালিকা | TYPE_MAP_LIST | 0x1000 | 4 + (আইটেম. আকার * 12) |
type_list | TYPE_TYPE_LIST | 0x1001 | 4 + (আইটেম. আকার * 2) |
annotation_set_ref_list | TYPE_ANNOTATION_SET_REF_LIST | 0x1002 | 4 + (আইটেম. আকার * 4) |
টীকা_সেট_আইটেম | TYPE_ANNOTATION_SET_ITEM | 0x1003 | 4 + (আইটেম. আকার * 4) |
ক্লাস_ডেটা_আইটেম | TYPE_CLASS_DATA_ITEM | 0x2000 | অন্তর্নিহিত; পার্স করতে হবে |
কোড_আইটেম | TYPE_CODE_ITEM | 0x2001 | অন্তর্নিহিত; পার্স করতে হবে |
স্ট্রিং_ডেটা_আইটেম | TYPE_STRING_DATA_ITEM | 0x2002 | অন্তর্নিহিত; পার্স করতে হবে |
ডিবাগ_তথ্য_আইটেম | TYPE_DEBUG_INFO_ITEM | 0x2003 | অন্তর্নিহিত; পার্স করতে হবে |
টীকা_আইটেম | TYPE_ANNOTATION_ITEM | 0x2004 | অন্তর্নিহিত; পার্স করতে হবে |
encoded_array_item | TYPE_ENCODED_ARRAY_ITEM | 0x2005 | অন্তর্নিহিত; পার্স করতে হবে |
annotations_directory_item | TYPE_ANNOTATIONS_DIRECTORY_ITEM | 0x2006 | অন্তর্নিহিত; পার্স করতে হবে |
hiddenapi_class_data_item | TYPE_HIDDENAPI_CLASS_DATA_ITEM | 0xF000 | অন্তর্নিহিত; পার্স করতে হবে |
স্ট্রিং_আইডি_আইটেম
string_ids বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
string_data_off | uint | এই আইটেমের জন্য ফাইলের শুরু থেকে স্ট্রিং ডেটা পর্যন্ত অফসেট। অফসেটটি data বিভাগে একটি অবস্থানে হওয়া উচিত এবং ডেটা নীচের " string_data_item " দ্বারা নির্দিষ্ট করা বিন্যাসে হওয়া উচিত৷ অফসেটের জন্য কোন প্রান্তিককরণের প্রয়োজন নেই। |
স্ট্রিং_ডেটা_আইটেম
ডেটা বিভাগে উপস্থিত হয়
প্রান্তিককরণ: কোনোটিই নয় (বাইট-সারিবদ্ধ)
নাম | বিন্যাস | বর্ণনা |
---|---|---|
utf16_size | uleb128 | এই স্ট্রিংটির আকার, UTF-16 কোড ইউনিটে (যা অনেক সিস্টেমে "স্ট্রিং দৈর্ঘ্য")। অর্থাৎ, এটি স্ট্রিংয়ের ডিকোডেড দৈর্ঘ্য। (এনকোড করা দৈর্ঘ্য 0 বাইটের অবস্থান দ্বারা নিহিত।) |
তথ্য | ubyte[] | MUTF-8 কোড ইউনিটের একটি সিরিজ (ওরফে অক্টেটস, ওরফে বাইট) এর পরে 0 মানের একটি বাইট। তথ্য বিন্যাস সম্পর্কে বিস্তারিত এবং আলোচনার জন্য উপরে "MUTF-8 (সংশোধিত UTF-8) এনকোডিং" দেখুন। দ্রষ্টব্য: এটি একটি স্ট্রিং থাকা গ্রহণযোগ্য যাতে (এর এনকোড করা ফর্ম) UTF-16 সারোগেট কোড ইউনিট (অর্থাৎ, |
টাইপ_আইডি_আইটেম
type_ids বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
descriptor_idx | uint | এই ধরনের বর্ণনাকারী স্ট্রিংয়ের জন্য string_ids তালিকায় সূচী করুন। স্ট্রিংটি উপরে সংজ্ঞায়িত TypeDescriptor- এর জন্য সিনট্যাক্সের সাথে সঙ্গতিপূর্ণ হতে হবে। |
প্রোটো_আইডি_আইটেম
proto_ids বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
shorty_idx | uint | এই প্রোটোটাইপের সংক্ষিপ্ত-ফর্ম বর্ণনাকারী স্ট্রিংয়ের জন্য string_ids তালিকায় সূচী করুন। স্ট্রিংটি অবশ্যই ShortyDescriptor- এর জন্য সিনট্যাক্সের সাথে সঙ্গতিপূর্ণ হতে হবে, উপরে সংজ্ঞায়িত করা হয়েছে, এবং এই আইটেমের রিটার্ন টাইপ এবং পরামিতির সাথে সঙ্গতিপূর্ণ হতে হবে। |
return_type_idx | uint | এই প্রোটোটাইপের রিটার্ন টাইপের জন্য type_ids তালিকায় সূচক করুন |
প্যারামিটার_বন্ধ | uint | এই প্রোটোটাইপের জন্য ফাইলের শুরু থেকে পরামিতি প্রকারের তালিকা পর্যন্ত অফসেট, অথবা 0 যদি এই প্রোটোটাইপের কোনো পরামিতি না থাকে। এই অফসেট, যদি শূন্য না থাকে তবে data বিভাগে থাকা উচিত এবং সেখানে থাকা ডেটা নীচে "type_list" দ্বারা নির্দিষ্ট করা বিন্যাসে থাকা উচিত। অতিরিক্তভাবে, তালিকায় void প্রকারের কোন উল্লেখ থাকা উচিত নয়। |
ক্ষেত্র_আইডি_আইটেম
field_ids বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
class_idx | ছোট | এই ক্ষেত্রের সংজ্ঞাকারীর জন্য type_ids তালিকায় সূচী করুন। এটি অবশ্যই একটি শ্রেণী প্রকার হতে হবে, এবং একটি অ্যারে বা আদিম প্রকার নয়৷ |
type_idx | ছোট | এই ক্ষেত্রের প্রকারের জন্য type_ids তালিকায় সূচী করুন |
name_idx | uint | এই ক্ষেত্রের নামের জন্য string_ids তালিকায় সূচী করুন। স্ট্রিংটি অবশ্যই উপরে সংজ্ঞায়িত MemberName এর জন্য সিনট্যাক্সের সাথে সঙ্গতিপূর্ণ হতে হবে। |
পদ্ধতি_আইডি_আইটেম
পদ্ধতি_আইডি বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
class_idx | ছোট | এই পদ্ধতির সংজ্ঞাকারীর জন্য type_ids তালিকায় সূচী করুন। এটি একটি শ্রেণী বা অ্যারে টাইপ হতে হবে, এবং একটি আদিম প্রকার নয়। |
proto_idx | ছোট | এই পদ্ধতির প্রোটোটাইপের জন্য proto_ids তালিকায় সূচক করুন |
name_idx | uint | এই পদ্ধতির নামের জন্য string_ids তালিকায় সূচী করুন। স্ট্রিংটি অবশ্যই উপরে সংজ্ঞায়িত MemberName এর জন্য সিনট্যাক্সের সাথে সঙ্গতিপূর্ণ হতে হবে। |
class_def_item
class_defs বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
class_idx | uint | এই শ্রেণীর জন্য type_ids তালিকায় সূচী। এটি অবশ্যই একটি শ্রেণী প্রকার হতে হবে, এবং একটি অ্যারে বা আদিম প্রকার নয়৷ |
অ্যাক্সেস_পতাকা | uint | ক্লাসের জন্য পতাকা অ্যাক্সেস করুন ( public , final , ইত্যাদি)। বিস্তারিত জানার জন্য " access_flags সংজ্ঞা" দেখুন। |
সুপারক্লাস_আইডিএক্স | uint | সুপারক্লাসের জন্য type_ids তালিকায় সূচী বা ধ্রুবক মান NO_INDEX যদি এই শ্রেণীর কোন সুপারক্লাস না থাকে (অর্থাৎ, এটি একটি রুট ক্লাস যেমন Object )। উপস্থিত থাকলে, এটি অবশ্যই একটি শ্রেণির ধরন হতে হবে, এবং একটি অ্যারে বা আদিম প্রকার নয়। |
ইন্টারফেস_বন্ধ | uint | ফাইলের শুরু থেকে ইন্টারফেসের তালিকা পর্যন্ত অফসেট, অথবা যদি কোনটি না থাকে তাহলে 0 । এই অফসেটটি data বিভাগে থাকা উচিত এবং সেখানে থাকা ডেটা নীচের " type_list " দ্বারা নির্দিষ্ট করা বিন্যাসে থাকা উচিত৷ তালিকার প্রতিটি উপাদান অবশ্যই একটি ক্লাস টাইপ হতে হবে (কোন অ্যারে বা আদিম টাইপ নয়), এবং কোনও সদৃশ হতে হবে না। |
source_file_idx | uint | এই শ্রেণীর (অন্তত বেশিরভাগ) মূল উৎস ধারণকারী ফাইলের নামের জন্য string_ids তালিকায় সূচী করুন, অথবা এই তথ্যের অভাবকে উপস্থাপন করতে বিশেষ মান NO_INDEX । যে কোনো প্রদত্ত পদ্ধতির debug_info_item এই সোর্স ফাইলটিকে ওভাররাইড করতে পারে, কিন্তু আশা করা যায় যে বেশিরভাগ ক্লাস শুধুমাত্র একটি সোর্স ফাইল থেকে আসবে। |
টীকা_বন্ধ | uint | অফসেট ফাইলের শুরু থেকে এই ক্লাসের জন্য টীকা কাঠামোতে, অথবা 0 যদি এই ক্লাসে কোন টীকা না থাকে। এই অফসেট, যদি শূন্য না থাকে তবে data বিভাগে থাকা উচিত এবং সেখানে থাকা ডেটা নীচের " annotations_directory_item " দ্বারা নির্দিষ্ট করা বিন্যাসে থাকা উচিত, সমস্ত আইটেম এই শ্রেণীটিকে সংজ্ঞায়িতকারী হিসাবে উল্লেখ করে৷ |
ক্লাস_ডেটা_বন্ধ | uint | এই আইটেমটির জন্য ফাইলের শুরু থেকে সংশ্লিষ্ট ক্লাস ডেটাতে অফসেট, অথবা যদি এই ক্লাসের জন্য 0 ক্লাস ডেটা না থাকে। (এটি হতে পারে, উদাহরণস্বরূপ, যদি এই ক্লাসটি একটি মার্কার ইন্টারফেস হয়।) অফসেট, যদি শূন্য না থাকে তবে data বিভাগে থাকা উচিত, এবং সেখানে থাকা ডেটা নীচে " class_data_item " দ্বারা নির্দিষ্ট করা বিন্যাসে থাকা উচিত, সমস্ত আইটেম এই শ্রেণীর সংজ্ঞাকারী হিসাবে উল্লেখ করে। |
static_values_off | uint | অফসেট ফাইলের শুরু থেকে static ক্ষেত্রগুলির জন্য প্রাথমিক মানের তালিকায়, অথবা 0 যদি কোনটি না থাকে (এবং সমস্ত static ক্ষেত্র 0 বা null দিয়ে আরম্ভ করতে হবে)। এই অফসেটটি data বিভাগে থাকা উচিত এবং সেখানে থাকা ডেটা নীচে " encoded_array_item " দ্বারা নির্দিষ্ট করা বিন্যাসে থাকা উচিত৷ অ্যারের আকার এই শ্রেণীর দ্বারা ঘোষিত static ক্ষেত্রগুলির সংখ্যার চেয়ে বড় হওয়া উচিত নয় এবং উপাদানগুলি সংশ্লিষ্ট field_list এ ঘোষিত একই ক্রমে static ক্ষেত্রগুলির সাথে সামঞ্জস্যপূর্ণ। প্রতিটি অ্যারের উপাদানের প্রকার অবশ্যই তার সংশ্লিষ্ট ক্ষেত্রের ঘোষিত প্রকারের সাথে মেলে। যদি অ্যারেতে static ক্ষেত্রগুলির তুলনায় কম উপাদান থাকে, তবে অবশিষ্ট ক্ষেত্রগুলি টাইপ-উপযুক্ত 0 বা null দিয়ে আরম্ভ করা হয়। |
কল_সাইট_আইডি_আইটেম
কল_সাইট_আইডি বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
কল_সাইট_অফ | uint | অফসেট ফাইলের শুরু থেকে কল সাইট সংজ্ঞা. অফসেটটি ডেটা বিভাগে থাকা উচিত এবং সেখানে থাকা ডেটা নীচে "কল_সাইট_আইটেম" দ্বারা নির্দিষ্ট করা বিন্যাসে থাকা উচিত। |
কল_সাইট_আইটেম
ডেটা বিভাগে উপস্থিত হয়
প্রান্তিককরণ: কোনোটিই নয় (বাইট সারিবদ্ধ)
call_site_item হল একটি encoded_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
যেকোনো অতিরিক্ত আর্গুমেন্টের প্যারামিটারের ধরন তাদের স্থির মান থেকে নির্ধারিত হয়।
পদ্ধতি_হ্যান্ডেল_আইটেম
পদ্ধতি_হ্যান্ডেল বিভাগে উপস্থিত হয়
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
পদ্ধতি_হ্যান্ডেল_টাইপ | ছোট | পদ্ধতি হ্যান্ডেলের ধরন; নীচের টেবিল দেখুন |
অব্যবহৃত | ছোট | (অব্যবহৃত) |
ক্ষেত্র_বা_পদ্ধতি_আইডি | ছোট | ক্ষেত্র বা পদ্ধতি আইডি পদ্ধতি হ্যান্ডেলের ধরনটি একটি অ্যাক্সেসর বা একটি পদ্ধতি আহবানকারী কিনা তার উপর নির্ভর করে |
অব্যবহৃত | ছোট | (অব্যবহৃত) |
পদ্ধতি হ্যান্ডেল টাইপ কোড
ধ্রুবক | মান | বর্ণনা |
---|---|---|
METHOD_HANDLE_TYPE_STATIC_PUT | 0x00 | পদ্ধতি হ্যান্ডেল একটি স্ট্যাটিক ফিল্ড সেটার (অ্যাক্সেসর) |
METHOD_HANDLE_TYPE_STATIC_GET | 0x01 | পদ্ধতি হ্যান্ডেল একটি স্ট্যাটিক ফিল্ড গেটার (অ্যাক্সেসর) |
METHOD_HANDLE_TYPE_INSTANCE_PUT | 0x02 | মেথড হ্যান্ডেল হল একটি ইনস্ট্যান্স ফিল্ড সেটার (অ্যাক্সেসর) |
METHOD_HANDLE_TYPE_INSTANCE_GET | 0x03 | মেথড হ্যান্ডেল হল একটি ইনস্ট্যান্স ফিল্ড গেটার (অ্যাক্সেসর) |
METHOD_HANDLE_TYPE_INVOKE_STATIC | 0x04 | মেথড হ্যান্ডেল একটি স্ট্যাটিক মেথড ইনভোকার |
METHOD_HANDLE_TYPE_INVOKE_INSTANCE | 0x05 | পদ্ধতি হ্যান্ডেল একটি উদাহরণ পদ্ধতি ইনভোকার |
পদ্ধতি_হ্যান্ডল_ টাইপ_ইনভোক_কনস্ট্রাক্টর | 0x06 | পদ্ধতি হ্যান্ডেল একটি কনস্ট্রাক্টর পদ্ধতি ইনভোকার |
পদ্ধতি_হ্যান্ডলে_ টাইপ_ইনভোক_ডাইরেক্ট | 0x07 | পদ্ধতি হ্যান্ডেল একটি সরাসরি পদ্ধতি ইনভোকার |
পদ্ধতি_হ্যান্ডলে_ টাইপ_ইনভোক_ইন্টারফেস | 0x08 | পদ্ধতি হ্যান্ডেল একটি ইন্টারফেস পদ্ধতি ইনভোকার |
ক্লাস_ডাটা_আইটিএম
CLASS_DEF_ITEM থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: কিছুই নয় (বাইট-সারিবদ্ধ)
নাম | বিন্যাস | বর্ণনা |
---|---|---|
স্ট্যাটিক_ফিল্ডস_সাইজ | uleb128 | এই আইটেমটিতে সংজ্ঞায়িত স্ট্যাটিক ক্ষেত্রগুলির সংখ্যা |
উদাহরণ_ফিল্ডস_সাইজ | uleb128 | এই আইটেমটিতে সংজ্ঞায়িত উদাহরণ ক্ষেত্রগুলির সংখ্যা |
Direct_methods_size | uleb128 | এই আইটেমটিতে সংজ্ঞায়িত প্রত্যক্ষ পদ্ধতির সংখ্যা |
ভার্চুয়াল_মেটডস_সাইজ | uleb128 | এই আইটেমটিতে সংজ্ঞায়িত ভার্চুয়াল পদ্ধতির সংখ্যা |
স্ট্যাটিক_ফিল্ডস | এনকোডেড_ফিল্ড [স্ট্যাটিক_ফিল্ডস_সাইজ] | সংজ্ঞায়িত স্ট্যাটিক ক্ষেত্রগুলি এনকোডেড উপাদানগুলির ক্রম হিসাবে প্রতিনিধিত্ব করে। ক্ষেত্রগুলি অবশ্যই ক্রমবর্ধমান ক্রমে field_idx দ্বারা বাছাই করা উচিত। |
উদাহরণ_ফিল্ডস | এনকোডেড_ফিল্ড [উদাহরণ_ফিল্ডস_সাইজ] | সংজ্ঞায়িত উদাহরণ ক্ষেত্রগুলি, এনকোডেড উপাদানগুলির ক্রম হিসাবে প্রতিনিধিত্ব করে। ক্ষেত্রগুলি অবশ্যই ক্রমবর্ধমান ক্রমে field_idx দ্বারা বাছাই করা উচিত। |
ডাইরেক্ট_মেথডস | এনকোডেড_মেটড [ডাইরেক্ট_মেথডস_সাইজ] | সংজ্ঞায়িত প্রত্যক্ষ (কোনও static , private , বা কনস্ট্রাক্টর) পদ্ধতিগুলি এনকোডেড উপাদানগুলির ক্রম হিসাবে প্রতিনিধিত্ব করে। পদ্ধতিগুলি অবশ্যই ক্রমবর্ধমান ক্রমে method_idx দ্বারা বাছাই করা উচিত। |
ভার্চুয়াল_মেথডস | এনকোডেড_মথোড [ভার্চুয়াল_মেটডস_সাইজ] | সংজ্ঞায়িত ভার্চুয়াল ( static , private , বা নির্মাণকারীগুলির কোনওটিই নয়) পদ্ধতিগুলি এনকোডেড উপাদানগুলির ক্রম হিসাবে প্রতিনিধিত্ব করে। এই তালিকায় উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতিগুলি অন্তর্ভুক্ত করা উচিত নয় যদি না এই আইটেমটি প্রতিনিধিত্ব করে এমন শ্রেণীর দ্বারা ওভাররাইড করা হয়। পদ্ধতিগুলি অবশ্যই ক্রমবর্ধমান ক্রমে method_idx দ্বারা বাছাই করা উচিত। ভার্চুয়াল পদ্ধতির method_idx অবশ্যই কোনও সরাসরি পদ্ধতির মতো হওয়া উচিত নয় । |
দ্রষ্টব্য: সমস্ত উপাদানগুলির field_id
এবং method_id
দৃষ্টান্তগুলি অবশ্যই একই সংজ্ঞায়িত শ্রেণীর উল্লেখ করতে হবে।
এনকোডেড_ফিল্ড ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
ফিল্ড_আইডিএক্স_ডিফ | uleb128 | এই ক্ষেত্রের পরিচয়ের জন্য field_ids তালিকায় সূচক (নাম এবং বর্ণনাকারী অন্তর্ভুক্ত), তালিকার পূর্ববর্তী উপাদানগুলির সূচক থেকে পার্থক্য হিসাবে উপস্থাপিত। একটি তালিকার প্রথম উপাদানটির সূচক সরাসরি প্রতিনিধিত্ব করা হয়। |
অ্যাক্সেস_পতাকা | uleb128 | ক্ষেত্রের জন্য পতাকা অ্যাক্সেস করুন ( public , final ইত্যাদি)। বিশদের জন্য " access_flags সংজ্ঞা" দেখুন। |
এনকোডেড_মিথড ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
পদ্ধতি_আইডিএক্স_ডিফ | uleb128 | এই পদ্ধতির পরিচয়ের জন্য method_ids তালিকায় সূচক (নাম এবং বর্ণনাকারী অন্তর্ভুক্ত), তালিকার পূর্ববর্তী উপাদানগুলির সূচক থেকে পার্থক্য হিসাবে উপস্থাপিত। একটি তালিকার প্রথম উপাদানটির সূচক সরাসরি প্রতিনিধিত্ব করা হয়। |
অ্যাক্সেস_পতাকা | uleb128 | পদ্ধতির জন্য পতাকা অ্যাক্সেস করুন ( public , final ইত্যাদি)। বিশদের জন্য " access_flags সংজ্ঞা" দেখুন। |
কোড_অফ | uleb128 | ফাইলের শুরু থেকে এই পদ্ধতির জন্য কোড কাঠামোতে অফসেট, বা 0 যদি এই পদ্ধতিটি abstract বা native হয়। অফসেটটি data বিভাগের কোনও স্থানে হওয়া উচিত। ডেটার ফর্ম্যাটটি নীচে " code_item " দ্বারা নির্দিষ্ট করা হয়েছে। |
টাইপ_লিস্ট
CLAST_DEF_ITEM এবং PROTO_ID_ITEM থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | uint | তালিকার আকার, এন্ট্রিগুলিতে |
তালিকা | টাইপ_ আইটেম [আকার] | তালিকার উপাদান |
টাইপ_ আইটেম ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
টাইপ_আইডিএক্স | ছোট | type_ids তালিকায় সূচক |
কোড_ আইটেম
এনকোডেড_মথোড থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
রেজিস্টার_সাইজ | ছোট | এই কোড দ্বারা ব্যবহৃত রেজিস্টার সংখ্যা |
ins_size | ছোট | এই কোডটির জন্য যে পদ্ধতিতে আগত যুক্তিগুলির শব্দের সংখ্যা |
আউট_সাইজ | ছোট | পদ্ধতি অনুরোধের জন্য এই কোড দ্বারা প্রয়োজনীয় বহির্গামী আর্গুমেন্ট স্পেসের শব্দের সংখ্যা |
চেষ্টা_সাইজ | ছোট | এই উদাহরণের জন্য try_item এর সংখ্যা। যদি অ-শূন্য হয়, তবে এগুলি এই উদাহরণে insns ঠিক পরে tries অ্যারে হিসাবে উপস্থিত হয়। |
debug_info_off | uint | এই কোডটির জন্য ফাইলের শুরু থেকে ডিবাগ তথ্য (লাইন নম্বর + স্থানীয় ভেরিয়েবল তথ্য) ক্রম পর্যন্ত অফসেট, বা 0 যদি কেবল কোনও তথ্য না থাকে। অফসেট, যদি শূন্য-না হয় তবে data বিভাগে কোনও স্থানে হওয়া উচিত। ডেটার ফর্ম্যাটটি নীচে " debug_info_item " দ্বারা নির্দিষ্ট করা হয়েছে। |
inss_size | uint | নির্দেশাবলী তালিকার আকার, 16-বিট কোড ইউনিটগুলিতে |
inss | ushort [inss_size] | বাইটকোডের আসল অ্যারে। একটি insns অ্যারেতে কোডের ফর্ম্যাটটি সহচর ডকুমেন্ট ডালভিক বাইটকোড দ্বারা নির্দিষ্ট করা হয়েছে। মনে রাখবেন যে এটি ushort একটি অ্যারে হিসাবে সংজ্ঞায়িত করা হয়েছে, এমন কিছু অভ্যন্তরীণ কাঠামো রয়েছে যা চার-বাইট প্রান্তিককরণ পছন্দ করে। এছাড়াও, যদি এটি কোনও এন্ডিয়ান-অদলবদল ফাইলের মধ্যে থাকে, তবে অদলবদলটি কেবলমাত্র পৃথক ushort দৃষ্টান্তগুলিতে করা হয় এবং বৃহত্তর অভ্যন্তরীণ কাঠামোগুলিতে নয়। |
প্যাডিং | ushort (al চ্ছিক) = 0 | চার-বাইট সারিবদ্ধ করার tries করার জন্য দুটি বাইট প্যাডিং। এই উপাদানটি কেবল তখনই উপস্থিত থাকে যখন tries_size অ-শূন্য এবং insns_size বিজোড় হয়। |
চেষ্টা করে | ট্রাই_আইটিএম [চেষ্টা_সাইজ] (al চ্ছিক) | কোড ব্যতিক্রমগুলি কোথায় ধরা পড়ে এবং কীভাবে সেগুলি পরিচালনা করতে হয় তা নির্দেশ করে অ্যারে। অ্যারের উপাদানগুলি অবশ্যই পরিসীমা এবং কম থেকে উচ্চ ঠিকানা পর্যন্ত অ-ওভারল্যাপিং হতে হবে। এই উপাদানটি কেবল তখনই উপস্থিত থাকে যখন tries_size অ-শূন্য হয়। |
হ্যান্ডলার | এনকোডড_ক্যাচ_হ্যান্ডলার_লিস্ট (al চ্ছিক) | বাইটগুলি ক্যাচ প্রকার এবং সম্পর্কিত হ্যান্ডলার ঠিকানাগুলির তালিকার তালিকার প্রতিনিধিত্ব করে। প্রতিটি try_item এই কাঠামোর মধ্যে একটি বাইট-ভিত্তিক অফসেট থাকে। এই উপাদানটি কেবল তখনই উপস্থিত থাকে যখন tries_size অ-শূন্য হয়। |
চেষ্টা_ আইটেম ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
start_addr | uint | এই এন্ট্রি দ্বারা আচ্ছাদিত কোডের ব্লকের ঠিকানা শুরু করুন। ঠিকানাটি প্রথম কাভার্ড নির্দেশের শুরুতে 16-বিট কোড ইউনিটগুলির একটি গণনা। |
insn_count | ছোট | এই এন্ট্রি দ্বারা আচ্ছাদিত 16-বিট কোড ইউনিটের সংখ্যা। শেষ কোড ইউনিটটি আচ্ছাদিত (অন্তর্ভুক্ত) হ'ল start_addr + insn_count - 1 । |
হ্যান্ডলার_ফ | ছোট | এই প্রবেশের জন্য সম্পর্কিত encoded_catch_hander_list শুরু থেকে বাইটে অফসেট করুন encoded_catch_handler এটি অবশ্যই একটি encoded_catch_handler শুরুতে অফসেট হতে হবে। |
এনকোডড_ক্যাচ_হ্যান্ডলার_লিস্ট ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | uleb128 | এই তালিকার আকার, এন্ট্রিগুলিতে |
তালিকা | এনকোডেড_ক্যাচ_হ্যান্ডলার [হ্যান্ডলার_সাইজ] | হ্যান্ডলার তালিকার প্রকৃত তালিকা, সরাসরি প্রতিনিধিত্ব করে (অফসেট হিসাবে নয়) এবং ধারাবাহিকভাবে সংমিশ্রিত |
এনকোডেড_ক্যাচ_হ্যান্ডলার ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | স্লেব 128 | এই তালিকায় ক্যাচ ধরণের সংখ্যা। যদি অ-পজিটিভ হয়, তবে এটি ক্যাচ ধরণের সংখ্যার নেতিবাচক এবং ক্যাচগুলি একটি ক্যাচ-অল হ্যান্ডলার অনুসরণ করে। উদাহরণস্বরূপ: 0 এর size অর্থ হ'ল এখানে একটি ক্যাচ-সমস্ত রয়েছে তবে কোনও স্পষ্টভাবে টাইপ করা ক্যাচ নেই। 2 এর size অর্থ দুটি স্পষ্টভাবে টাইপ করা ক্যাচ এবং কোনও ক্যাচ-অল নেই। এবং -1 এর size অর্থ হ'ল ক্যাচ -অল সহ একটি টাইপ ক্যাচ রয়েছে। |
হ্যান্ডলার | এনকোডেড_ টাইপ_এডিডিআর_পায়ার [অ্যাবস (আকার)] | টাইপগুলি পরীক্ষা করা উচিত এমন ক্রমে প্রতিটি ধরা প্রকারের জন্য একটি abs(size) এনকোডেড আইটেমগুলির স্ট্রিম। |
ক্যাচ_আল_এডিডিআর | uleb128 (al চ্ছিক) | ক্যাচ-অল হ্যান্ডলারের বাইটকোড ঠিকানা। এই উপাদানটি কেবল তখনই উপস্থিত থাকে যদি size অ-পজিটিভ হয়। |
এনকোডেড_ টাইপ_এডিডিআর_পায়ার ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
টাইপ_আইডিএক্স | uleb128 | ক্যাচ ব্যতিক্রমের ধরণের জন্য type_ids তালিকায় সূচক |
addr | uleb128 | সম্পর্কিত ব্যতিক্রম হ্যান্ডলারের বাইটকোড ঠিকানা |
debug_info_item
কোড_আইটিএম থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: কিছুই নয় (বাইট-সারিবদ্ধ)
প্রতিটি debug_info_item
একটি বামন 3-অনুপ্রাণিত বাইট-কোডেড স্টেট মেশিনকে সংজ্ঞায়িত করে যা ব্যাখ্যা করা হলে পজিশনের টেবিলটি নির্গত করে এবং (সম্ভাব্যভাবে) একটি code_item
জন্য স্থানীয় পরিবর্তনশীল তথ্য। ক্রমটি একটি পরিবর্তনশীল দৈর্ঘ্যের শিরোনাম দিয়ে শুরু হয় (যার দৈর্ঘ্য পদ্ধতির পরামিতিগুলির সংখ্যার উপর নির্ভর করে), তারপরে স্টেট মেশিন বাইটকোডগুলি অনুসরণ করে এবং একটি DBG_END_SEQUENCE
বাইট দিয়ে শেষ হয়।
রাজ্য মেশিনে পাঁচটি রেজিস্টার রয়েছে। address
রেজিস্টারটি 16-বিট কোড ইউনিটে সম্পর্কিত insns_item
এ অফসেটটির প্রতিনিধিত্ব করে। address
রেজিস্টারটি প্রতিটি debug_info
সিকোয়েন্সের শুরুতে 0
এ শুরু হয় এবং কেবল একঘেয়েভাবে বৃদ্ধি করতে হবে। line
রেজিস্টারটি প্রতিনিধিত্ব করে যে কোন উত্স লাইন নম্বরটি রাষ্ট্রীয় মেশিন দ্বারা নির্গত পরবর্তী অবস্থানের টেবিল এন্ট্রির সাথে যুক্ত হওয়া উচিত। এটি সিকোয়েন্স শিরোনামে শুরু করা হয়েছে, এবং ইতিবাচক বা নেতিবাচক দিকগুলিতে পরিবর্তিত হতে পারে তবে কখনই 1
এর চেয়ে কম হতে হবে না। source_file
রেজিস্টারটি উত্স ফাইলটি উপস্থাপন করে যা লাইন নম্বর এন্ট্রিগুলি উল্লেখ করে। এটি class_def_item
এ source_file_idx
মানকে সূচনা করা হয়েছে। অন্য দুটি ভেরিয়েবল, prologue_end
এবং epilogue_begin
হ'ল বুলিয়ান পতাকা ( false
থেকে শুরু করে) যা নির্দেশ করে যে পরবর্তী অবস্থানটি নির্গত হওয়া কোনও পদ্ধতি প্রোলোগ বা এপিলোগ হিসাবে বিবেচনা করা উচিত কিনা। স্টেট মেশিনটি অবশ্যই DBG_RESTART_LOCAL
কোডের জন্য প্রতিটি রেজিস্টারে সর্বশেষ স্থানীয় ভেরিয়েবলের লাইভের নাম এবং প্রকারটি ট্র্যাক করতে হবে।
শিরোনামটি নিম্নরূপ:
নাম | বিন্যাস | বর্ণনা |
---|---|---|
লাইন_স্টার্ট | uleb128 | রাজ্য মেশিনের line রেজিস্টারের জন্য প্রাথমিক মান। প্রকৃত অবস্থান প্রবেশের প্রতিনিধিত্ব করে না। |
প্যারামিটার_সাইজ | uleb128 | এনকোডযুক্ত প্যারামিটারের নামগুলির সংখ্যা। একটি উদাহরণ পদ্ধতি বাদ দিয়ে একটি পদ্ধতি প্যারামিটার থাকতে হবে, যদি this থাকে। |
প্যারামিটার_নাম | uleb128p1 [প্যারামিটার_সাইজ] | পদ্ধতি প্যারামিটারের নামের স্ট্রিং সূচক। NO_INDEX এর একটি এনকোডেড মান নির্দেশ করে যে সম্পর্কিত প্যারামিটারের জন্য কোনও নাম পাওয়া যায় না। প্রকারের বর্ণনাকারী এবং স্বাক্ষরটি পদ্ধতি বর্ণনাকারী এবং স্বাক্ষর থেকে বোঝানো হয়। |
বাইট কোড মানগুলি নিম্নরূপ:
নাম | মান | বিন্যাস | যুক্তি | বর্ণনা |
---|---|---|---|---|
Dbg_end_secence | 0x00 | (কোনটিই নয়) | একটি code_item এর জন্য একটি ডিবাগ তথ্য ক্রম সমাপ্ত করে | |
Dbg_advance_pc | 0x01 | uleb128 ADDR_DIFF | addr_diff : ঠিকানা রেজিস্টারে যোগ করার পরিমাণ | পজিশন এন্ট্রি নির্গমন না করে ঠিকানা রেজিস্টারকে অগ্রসর করে |
Dbg_advance_line | 0x02 | স্লেব 128 লাইন_ডিফ | line_diff : লাইন রেজিস্টার পরিবর্তন করার পরিমাণ | পজিশন এন্ট্রি নির্গমন না করে লাইন রেজিস্টারকে অগ্রসর করে |
Dbg_start_local | 0x03 | uleb128 রেজিস্টার_নুম uleb128p1 নাম_আইডিএক্স uleb128p1 টাইপ_আইডিএক্স | register_num : রেজিস্টার যাতে স্থানীয় থাকবেname_idx : নামের স্ট্রিং সূচকtype_idx : প্রকারের সূচক টাইপ করুন | বর্তমান ঠিকানায় একটি স্থানীয় পরিবর্তনশীল প্রবর্তন করে। name_idx বা type_idx হয় NO_INDEX হতে পারে যে এই মানটি অজানা। |
Dbg_start_local_extended | 0x04 | uleb128 রেজিস্টার_নুম uleb128p1 নাম_আইডিএক্স uleb128p1 টাইপ_আইডিএক্স 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 : স্থানীয় রয়েছে এমন নিবন্ধন করুন | বর্তমান ঠিকানায় সুযোগের বাইরে হিসাবে বর্তমানে একটি লাইভ স্থানীয় ভেরিয়েবল চিহ্নিত করে |
Dbg_restart_local | 0x06 | uleb128 রেজিস্টার_নুম | register_num : পুনরায় চালু করতে নিবন্ধন করুন | বর্তমান ঠিকানায় একটি স্থানীয় ভেরিয়েবল পুনরায় চালু করে। নাম এবং প্রকারটি নির্দিষ্ট রেজিস্টারে লাইভ ছিল সর্বশেষ স্থানীয় হিসাবে। |
Dbg_set_prologue_end | 0x07 | (কোনটিই নয়) | prologue_end স্টেট মেশিন রেজিস্টার সেট করে, ইঙ্গিত করে যে পরবর্তী অবস্থানের এন্ট্রি যুক্ত করা হয়েছে তা একটি পদ্ধতি প্রোলোগের শেষ হিসাবে বিবেচনা করা উচিত (একটি পদ্ধতি ব্রেকপয়েন্টের জন্য উপযুক্ত জায়গা)। prologue_end রেজিস্টারটি কোনও বিশেষ ( >= 0x0a ) ওপকোড দ্বারা সাফ করা হয়। | |
ডিবিজি_সেট_পিলোগ_বেগিন | 0x08 | (কোনটিই নয়) | epilogue_begin স্টেট মেশিন রেজিস্টার সেট করে, এটি ইঙ্গিত করে যে পরবর্তী অবস্থানের এন্ট্রি যুক্ত করা হয়েছে তা একটি পদ্ধতি এপিলোগের সূচনা হিসাবে বিবেচনা করা উচিত (পদ্ধতি থেকে বেরিয়ে যাওয়ার আগে মৃত্যুদন্ড কার্যকর করার জন্য একটি উপযুক্ত জায়গা)। epilogue_begin রেজিস্টারটি কোনও বিশেষ ( >= 0x0a ) ওপকোড দ্বারা সাফ করা হয়েছে। | |
Dbg_set_file | 0x09 | uleb128p1 নাম_আইডিএক্স | name_idx : উত্স ফাইলের নামের স্ট্রিং সূচক; NO_INDEX অজানা যদি | ইঙ্গিত করে যে সমস্ত পরবর্তী লাইন নম্বর এন্ট্রিগুলি code_item -এ উল্লিখিত ডিফল্ট নামের পরিবর্তে এই উত্স ফাইলের নামটির রেফারেন্স দেয় |
বিশেষ opcodes | 0x0a… 0xff | (কোনটিই নয়) | line এবং address নিবন্ধন করে, একটি অবস্থানের প্রবেশ নির্গত করে এবং prologue_end এবং epilogue_begin সাফ করে। বর্ণনার জন্য নীচে দেখুন। |
বিশেষ opcodes
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 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
ক্লাস_অনোটেশনস_ফ | uint | ফাইলের শুরু থেকে সরাসরি ক্লাসে তৈরি টীকাগুলিতে অফসেট করুন, বা 0 শ্রেণীর সরাসরি টীকা না থাকলে 0 । অফসেট, যদি শূন্য-না হয় তবে data বিভাগে কোনও স্থানে হওয়া উচিত। ডেটার ফর্ম্যাটটি নীচে " annotation_set_item " দ্বারা নির্দিষ্ট করা হয়েছে। |
ক্ষেত্র_সাইজ | uint | এই আইটেম দ্বারা টীকায়িত ক্ষেত্রগুলির গণনা |
টীকা_মথোডস_সাইজ | uint | এই আইটেম দ্বারা টীকায়িত পদ্ধতি গণনা |
টীকা_প্যারামিটার_সাইজ | uint | পদ্ধতি প্যারামিটার গণনা এই আইটেম দ্বারা টীকা |
ফিল্ড_অনোটেশনস | ফিল্ড_অনোটেশন [ফিল্ডস_সাইজ] (al চ্ছিক) | সম্পর্কিত ক্ষেত্র টীকাগুলির তালিকা। তালিকার উপাদানগুলি অবশ্যই field_idx দ্বারা ক্রমবর্ধমান ক্রমে বাছাই করা উচিত। |
পদ্ধতি_অনোটেশন | পদ্ধতি_অনোটেশন [পদ্ধতি_সাইজ] (al চ্ছিক) | সম্পর্কিত পদ্ধতি টীকাগুলির তালিকা। তালিকার উপাদানগুলি অবশ্যই method_idx দ্বারা ক্রমবর্ধমান ক্রমে বাছাই করা উচিত। |
প্যারামিটার_টীকা | প্যারামিটার_অনোটেশন [প্যারামিটার_সাইজ] (al চ্ছিক) | সম্পর্কিত পদ্ধতি প্যারামিটার টীকাগুলির তালিকা। তালিকার উপাদানগুলি অবশ্যই method_idx দ্বারা ক্রমবর্ধমান ক্রমে বাছাই করা উচিত। |
দ্রষ্টব্য: সমস্ত উপাদানগুলির field_id
এবং method_id
দৃষ্টান্তগুলি অবশ্যই একই সংজ্ঞায়িত শ্রেণীর উল্লেখ করতে হবে।
ফিল্ড_অ্যানোটেশন ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
ফিল্ড_আইডিএক্স | uint | ক্ষেত্রের পরিচয় দেওয়ার জন্য field_ids তালিকায় সূচক |
টীকা_অফ | uint | ফাইলের শুরু থেকে ক্ষেত্রের জন্য টীকাগুলির তালিকায় অফসেট করুন। অফসেটটি data বিভাগের কোনও স্থানে হওয়া উচিত। ডেটার ফর্ম্যাটটি নীচে " annotation_set_item " দ্বারা নির্দিষ্ট করা হয়েছে। |
পদ্ধতি_অনোটেশন ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
পদ্ধতি_আইডিএক্স | uint | পদ্ধতিটি টীকাযুক্ত হওয়ার জন্য পরিচয়ের জন্য method_ids তালিকায় সূচক |
টীকা_অফ | uint | ফাইলের শুরু থেকে পদ্ধতির জন্য টীকাগুলির তালিকায় অফসেট করুন। অফসেটটি data বিভাগের কোনও স্থানে হওয়া উচিত। ডেটার ফর্ম্যাটটি নীচে " annotation_set_item " দ্বারা নির্দিষ্ট করা হয়েছে। |
প্যারামিটার_অনোটেশন ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
পদ্ধতি_আইডিএক্স | uint | method_ids প্যারামিটারগুলি টী |
টীকা_অফ | uint | ফাইলের শুরু থেকে পদ্ধতি পরামিতিগুলির জন্য টীকাগুলির তালিকায় অফসেট করুন। অফসেটটি data বিভাগের কোনও স্থানে হওয়া উচিত। ডেটার ফর্ম্যাটটি নীচে " annotation_set_ref_list " দ্বারা নির্দিষ্ট করা হয়েছে। |
টীকা_সেট_রেফ_লিস্ট
প্যারামিটার_অনোটেশনস_আইটিএম থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | uint | তালিকার আকার, এন্ট্রিগুলিতে |
তালিকা | টীকা_সেট_রেফ_আইটিএম [আকার] | তালিকার উপাদান |
টীকা_সেট_রেফ_আইটিএম ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
টীকা_অফ | uint | এই উপাদানটির জন্য কোনও টীকা না থাকলে ফাইলের শুরু থেকে রেফারেন্সযুক্ত টীকা সেট বা 0 পর্যন্ত অফসেট করুন। অফসেট, যদি শূন্য-না হয় তবে data বিভাগে কোনও স্থানে হওয়া উচিত। ডেটার ফর্ম্যাটটি নীচে " annotation_set_item " দ্বারা নির্দিষ্ট করা হয়েছে। |
টীকা_সেট_আইটিএম
টীকাগুলি_ডাইরেক্টরি_আইটিএম, ফিল্ড_অ্যানোটেশনস_আইটিএম, পদ্ধতি_অনোটেশন_আইটিএম এবং টীকা_সেট_সেট_আরফ_আইটিএম থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: 4 বাইট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | uint | সেটের আকার, এন্ট্রিগুলিতে |
এন্ট্রি | টীকা_অফ_ আইটেম [আকার] | সেট উপাদান। উপাদানগুলি অবশ্যই ক্রমবর্ধমান ক্রমে বাছাই করা উচিত, type_idx দ্বারা। |
টীকা_অফ_ আইটেম ফর্ম্যাট
নাম | বিন্যাস | বর্ণনা |
---|---|---|
টীকা_ফ | uint | ফাইলের শুরু থেকে একটি টীকা পর্যন্ত অফসেট। অফসেটটি data বিভাগের কোনও স্থানে হওয়া উচিত, এবং সেই অবস্থানের ডেটার ফর্ম্যাটটি নীচে " annotation_item " দ্বারা নির্দিষ্ট করা হয়েছে। |
টীকা_ আইটেম
টীকা_সেট_আইটিএম থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: কিছুই নয় (বাইট-সারিবদ্ধ)
নাম | বিন্যাস | বর্ণনা |
---|---|---|
দৃশ্যমানতা | ubyte | এই টীকাটির উদ্দেশ্যযুক্ত দৃশ্যমানতা (নীচে দেখুন) |
টীকা | এনকোডড_অনোটেশন | উপরে " encoded_annotation ফর্ম্যাট" দ্বারা বর্ণিত ফর্ম্যাটে এনকোডেড টীকা বিষয়বস্তুগুলি উপরে " encoded_value এনকোডিং" এর অধীনে বর্ণিত। |
দৃশ্যমানতার মান
এগুলি একটি annotation_item
-এ visibility
ক্ষেত্রের বিকল্পগুলি:
নাম | মান | বর্ণনা |
---|---|---|
দৃশ্যমান_বিল্ড | 0x00 | কেবল বিল্ড টাইমে দৃশ্যমান হওয়ার উদ্দেশ্যে (যেমন, অন্যান্য কোড সংকলনের সময়) |
দৃশ্যমানতা_রানটাইম | 0x01 | রানটাইমে দৃশ্যমান উদ্দেশ্যে |
দৃশ্যমান_সিস্টেম | 0x02 | রানটাইমে দৃশ্যমান হওয়ার উদ্দেশ্যে, তবে কেবল অন্তর্নিহিত সিস্টেমে (এবং নিয়মিত ব্যবহারকারী কোড নয়) |
এনকোডেড_আরে_আইটিএম
CLASS_DEF_ITEM থেকে রেফারেন্স
ডেটা বিভাগে প্রদর্শিত হবে
প্রান্তিককরণ: কিছুই নয় (বাইট-সারিবদ্ধ)
নাম | বিন্যাস | বর্ণনা |
---|---|---|
মান | এনকোডেড_আরে | উপরে " encoded_array ফর্ম্যাট" দ্বারা নির্দিষ্ট ফর্ম্যাটে এনকোডেড অ্যারে মান উপস্থাপনকারী বাইটগুলি উপরে " encoded_value এনকোডিং" এর অধীনে। |
HIDEDAPI_CLASS_DATA_ITEM
এই বিভাগে প্রতিটি শ্রেণীর দ্বারা ব্যবহৃত সীমাবদ্ধ ইন্টারফেসগুলির ডেটা রয়েছে।
দ্রষ্টব্য: লুকানো এপিআই বৈশিষ্ট্যটি অ্যান্ড্রয়েড 10.0 এ প্রবর্তিত হয়েছিল এবং এটি কেবল বুট শ্রেণীর পাথের ক্লাসগুলির ডেক্স ফাইলগুলির জন্য প্রযোজ্য। নীচে বর্ণিত পতাকাগুলির তালিকা অ্যান্ড্রয়েডের ভবিষ্যতের প্রকাশে প্রসারিত হতে পারে। আরও তথ্যের জন্য, নন-এসডিকে ইন্টারফেসগুলিতে বিধিনিষেধগুলি দেখুন।
নাম | বিন্যাস | বর্ণনা |
---|---|---|
আকার | uint | বিভাগের মোট আকার |
অফসেট | uint [] | class_idx দ্বারা সূচকযুক্ত অফসেটগুলির অ্যারে। সূচক class_idx একটি শূন্য অ্যারে এন্ট্রিটির অর্থ হ'ল হয় এই class_idx জন্য কোনও ডেটা নেই, বা সমস্ত লুকানো এপিআই পতাকাগুলি শূন্য। অন্যথায় অ্যারে এন্ট্রিটি শূন্য নয় এবং বিভাগের শুরু থেকে এই class_idx জন্য লুকানো এপিআই পতাকাগুলির একটি অ্যারে পর্যন্ত অফসেট রয়েছে। |
পতাকা | uleb128 [] | প্রতিটি শ্রেণীর জন্য লুকানো এপিআই পতাকাগুলির সংক্ষিপ্ত অ্যারে। সম্ভাব্য পতাকা মানগুলি নীচের সারণীতে বর্ণিত হয়েছে। ক্ষেত্রগুলি একই ক্রমে এনকোড করা হয় কারণ ক্ষেত্রগুলি এবং পদ্ধতিগুলি শ্রেণীর ডেটাতে এনকোড করা হয়। |
সীমাবদ্ধতা পতাকা প্রকার:
নাম | মান | বর্ণনা |
---|---|---|
সাদা তালিকা | 0 | যে ইন্টারফেসগুলি অবাধে ব্যবহৃত হতে পারে এবং আনুষ্ঠানিকভাবে ডকুমেন্টেড অ্যান্ড্রয়েড ফ্রেমওয়ার্ক প্যাকেজ সূচকের অংশ হিসাবে সমর্থিত। |
গ্রিলিস্ট | 1 | নন-এসডিকে ইন্টারফেস যা অ্যাপ্লিকেশনটির লক্ষ্য এপিআই স্তর নির্বিশেষে ব্যবহার করা যেতে পারে। |
কালো তালিকা | 2 | নন-এসডিকে ইন্টারফেসগুলি যা অ্যাপ্লিকেশনটির লক্ষ্য এপিআই স্তর নির্বিশেষে ব্যবহার করা যায় না। এই ইন্টারফেসগুলির মধ্যে একটি অ্যাক্সেস করার ফলে রানটাইম ত্রুটি ঘটে। |
গ্রেইলিস্ট - ম্যাক্স - ও | 3 | নন-এসডিকে ইন্টারফেসগুলি যা অ্যান্ড্রয়েড 8.x এবং নীচে ব্যবহার করা যেতে পারে যদি না সেগুলি সীমাবদ্ধ থাকে। |
গ্রেইলিস্ট - ম্যাক্স - পি | 4 | নন-এসডিকে ইন্টারফেসগুলি যা অ্যান্ড্রয়েড 9.x এর জন্য ব্যবহার করা যেতে পারে যদি না তারা সীমাবদ্ধ থাকে। |
গ্রেইলিস্ট - ম্যাক্স - কিউ | 5 | নন-এসডিকে ইন্টারফেসগুলি যা অ্যান্ড্রয়েড 10.x এর জন্য ব্যবহার করা যেতে পারে যদি না তারা সীমাবদ্ধ থাকে। |
গ্রেইলিস্ট - ম্যাক্স - আর | 6 | নন-এসডিকে ইন্টারফেস যা অ্যান্ড্রয়েড ১১.x এর জন্য ব্যবহার করা যেতে পারে যদি না তারা সীমাবদ্ধ থাকে। |
সিস্টেম টীকা
সিস্টেম টীকাগুলি ক্লাস (এবং পদ্ধতি এবং ক্ষেত্রগুলি) সম্পর্কে প্রতিফলিত তথ্যের বিভিন্ন টুকরো উপস্থাপন করতে ব্যবহৃত হয়। এই তথ্যটি সাধারণত ক্লায়েন্ট (অ-সিস্টেম) কোড দ্বারা পরোক্ষভাবে অ্যাক্সেস করা হয়।
সিস্টেম টীকাগুলি VISIBILITY_SYSTEM
সাথে দৃশ্যমানতার সাথে টীকা হিসাবে .dex
ফাইলগুলিতে প্রতিনিধিত্ব করা হয়।
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 । |
অ্যাক্সেসফ্ল্যাগস | int | মূলত ক্লাসের অ্যাক্সেস পতাকাগুলি ঘোষিত (যা উত্স ভাষার কার্যকরকরণ মডেল এবং টার্গেট ভার্চুয়াল মেশিনের মধ্যে অমিলের কারণে কার্যকর পতাকাগুলির থেকে পৃথক হতে পারে) |
dalvik.annotation.memberclasses
ক্লাসে প্রদর্শিত হবে
একটি MemberClasses
টীকা প্রতিটি শ্রেণীর সাথে সংযুক্ত থাকে যা সদস্য শ্রেণীর ঘোষণা করে। (একটি সদস্য শ্রেণি একটি প্রত্যক্ষ অভ্যন্তরীণ শ্রেণি যার একটি নাম রয়েছে))
নাম | বিন্যাস | বর্ণনা |
---|---|---|
মান | শ্রেণি [] | সদস্য শ্রেণীর অ্যারে |
dalvik.annotation.methodparameters
পদ্ধতিতে প্রদর্শিত হবে
দ্রষ্টব্য: অ্যান্ড্রয়েড 7.1 এর পরে এই টীকাটি যুক্ত করা হয়েছিল। পূর্ববর্তী অ্যান্ড্রয়েড রিলিজগুলিতে এর উপস্থিতি উপেক্ষা করা হবে।
একটি MethodParameters
টীকাগুলি al চ্ছিক এবং প্যারামিটার মেটাডেটা যেমন প্যারামিটারের নাম এবং সংশোধক সরবরাহ করতে ব্যবহার করা যেতে পারে।
রানটাইমে প্যারামিটার মেটাডেটা প্রয়োজন না হলে নিরাপদে কোনও পদ্ধতি বা কনস্ট্রাক্টর থেকে টীকাটি বাদ দেওয়া যেতে পারে। 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
টাইপ টীকাগুলি রিসিভার প্যারামিটারগুলি সম্পর্কে কোনও তথ্যও অন্তর্ভুক্ত করা হবে না যা প্রকৃত পদ্ধতি স্বাক্ষরে বিদ্যমান নেই।
নাম | বিন্যাস | বর্ণনা |
---|---|---|
নাম | স্ট্রিং[] | সম্পর্কিত পদ্ধতির জন্য আনুষ্ঠানিক পরামিতিগুলির নাম। অ্যারে অবশ্যই নাল হতে হবে না তবে কোনও আনুষ্ঠানিক পরামিতি না থাকলে অবশ্যই খালি থাকতে হবে। সূচক সহ আনুষ্ঠানিক প্যারামিটারের কোনও নাম না থাকলে অ্যারেতে একটি মান অবশ্যই বাতিল হতে হবে। যদি java.lang.reflect.MalformedParametersException নাম স্ট্রিংগুলি খালি থাকে বা থাকে ' |
অ্যাক্সেসফ্ল্যাগস | int[] | সম্পর্কিত পদ্ধতির জন্য আনুষ্ঠানিক পরামিতিগুলির অ্যাক্সেস পতাকাগুলি। অ্যারে অবশ্যই নাল হতে হবে না তবে কোনও আনুষ্ঠানিক পরামিতি না থাকলে অবশ্যই খালি থাকতে হবে। মানটি নিম্নলিখিত মানগুলির সাথে কিছুটা মুখোশ:
java.lang.reflect.MalformedParametersException রানটাইমে নিক্ষেপ করা হবে। |
dalvik.annotation.signature
ক্লাস, ক্ষেত্র এবং পদ্ধতিতে প্রদর্শিত হবে
একটি Signature
টীকা প্রতিটি শ্রেণি, ক্ষেত্র বা পদ্ধতির সাথে সংযুক্ত থাকে যা type_id_item
দ্বারা প্রতিনিধিত্বযোগ্য তুলনায় আরও জটিল ধরণের ক্ষেত্রে সংজ্ঞায়িত হয়। .dex
ফর্ম্যাট স্বাক্ষরগুলির জন্য ফর্ম্যাটটি সংজ্ঞায়িত করে না; এটি কেবলমাত্র সেই ভাষার শব্দার্থবিজ্ঞানের সফল বাস্তবায়নের জন্য কোনও উত্স ভাষার যে স্বাক্ষর প্রয়োজন তা প্রতিনিধিত্ব করতে সক্ষম হওয়া বোঝানো। যেমন, স্বাক্ষরগুলি সাধারণত ভার্চুয়াল মেশিন বাস্তবায়ন দ্বারা পার্স করা হয় না (বা যাচাই করা)। স্বাক্ষরগুলি কেবল উচ্চ-স্তরের এপিআই এবং সরঞ্জামগুলিতে (যেমন ডিবাগার হিসাবে) হস্তান্তরিত হয়। স্বাক্ষরের যে কোনও ব্যবহার, সুতরাং, কেবল বৈধ স্বাক্ষর প্রাপ্তি সম্পর্কে কোনও অনুমান না করার জন্য, স্পষ্টভাবে নিজেকে সিনট্যাকটিক্যালি অবৈধ স্বাক্ষরটি পেরিয়ে আসার সম্ভাবনার বিরুদ্ধে নিজেকে রক্ষা করার বিষয়ে কোনও অনুমান না করার জন্য লিখতে হবে।
যেহেতু স্বাক্ষরযুক্ত স্ট্রিংগুলিতে প্রচুর নকল সামগ্রী রয়েছে, তাই একটি Signature
টীকাগুলি স্ট্রিংগুলির একটি অ্যারে হিসাবে সংজ্ঞায়িত করা হয়, যেখানে নকল উপাদানগুলি স্বাভাবিকভাবে একই অন্তর্নিহিত ডেটা বোঝায় এবং স্বাক্ষরটি অ্যারেতে সমস্ত স্ট্রিংগুলির সংমিশ্রণ হিসাবে নেওয়া হয় . কীভাবে পৃথক স্ট্রিংগুলিতে স্বাক্ষরটি আলাদা করতে হয় সে সম্পর্কে কোনও নিয়ম নেই; এটি সম্পূর্ণরূপে এমন সরঞ্জামগুলির উপর নির্ভর করে যা .dex
ফাইলগুলি উত্পন্ন করে।
নাম | বিন্যাস | বর্ণনা |
---|---|---|
মান | স্ট্রিং[] | এই শ্রেণি বা সদস্যের স্বাক্ষর, স্ট্রিংগুলির একটি অ্যারে হিসাবে যা একসাথে একত্রিত করা উচিত |
dalvik.annotation.trows
পদ্ধতিতে প্রদর্শিত হবে
একটি Throws
টীকা প্রতিটি পদ্ধতির সাথে সংযুক্ত থাকে যা এক বা একাধিক ব্যতিক্রম প্রকারের নিক্ষেপ করার ঘোষণা করা হয়।
নাম | বিন্যাস | বর্ণনা |
---|---|---|
মান | শ্রেণি [] | ব্যতিক্রম প্রকারের অ্যারে |