Dalvik এক্সিকিউটেবল নির্দেশাবলী ফর্ম্যাট

এই পৃষ্ঠায় Dalvik executable (DEX) ফর্ম্যাট ও Dalvik বাইটকোড ব্যবহার করা নির্দেশাবলীর ফর্ম্যাটের তালিকা দেওয়া আছে। এটি বাইটকোড রেফারেন্স ডকুমেন্ট-এর সাথে একত্রে ব্যবহার করার জন্য তৈরি করা হয়েছে।

বিটওয়াইজ বিবরণ

ফর্ম্যাট টেবিলের প্রথম কলামে ফর্ম্যাটের বিটওয়াইজ লেআউট তালিকাভুক্ত করা হয়। এতে স্পেস দিয়ে আলাদা করা এক বা একাধিক "শব্দ" থাকে, যার প্রতিটি ১৬-বিট কোড ইউনিটকে বর্ণনা করে। একটি শব্দের প্রতিটি অক্ষর চার বিটকে বোঝায়, যা উচ্চ বিট থেকে নিম্ন বিট পর্যন্ত পড়া হয়, এর মধ্যে উল্লম্ব বার ("|") থাকে যা পড়ার ক্ষেত্রে সাহায্য করে। "A" থেকে পরপর বড় হাতের অক্ষর ফর্ম্যাটের মধ্যে ফিল্ড বোঝাতে ব্যবহার করা হয় (যা সিনট্যাক্স কলামের মাধ্যমে আরও বিস্তারিতভাবে সংজ্ঞায়িত করা হয়)। "op" শব্দটি ফর্ম্যাটের মধ্যে আট-বিট ওপকোডের পজিশন বোঝাতে ব্যবহার করা হয়। স্ল্যাশ করা শূন্য ("Ø") ব্যবহার করে বোঝানো হয় যে নির্দিষ্ট পজিশনে সব বিটকে শূন্য হতে হবে।

বেশিরভাগ ক্ষেত্রে, অক্ষরগুলি আগের কোড ইউনিট থেকে পরের কোড ইউনিটে এবং কোড ইউনিটের মধ্যে নিম্ন-ক্রম থেকে উচ্চ-ক্রমে সাজানো হয়। তবে, এই সাধারণ নিয়মের কিছু ব্যতিক্রম আছে, যা বিভিন্ন নির্দেশাবলী ফর্ম্যাট জুড়ে একই অর্থপূর্ণ অংশের নামকরণ একই করার জন্য করা হয়। এইসব ক্ষেত্রে, ফর্ম্যাটের বিবরণে স্পষ্টভাবে উল্লেখ করা আছে।

যেমন, "B|A|op CCCC" ফর্ম্যাটটি থেকে বোঝা যায় যে এই ফর্ম্যাটে ১৬-বিট কোড ইউনিটের দুটি অংশ আছে। প্রথম শব্দে নিচের দিকের আট বিটে অপকোড এবং উপরের দিকের আট বিটে চারটি বিটের দুটি ভ্যালু থাকে; এবং দ্বিতীয় শব্দে একটি ১৬-বিট ভ্যালু থাকে।

ফর্ম্যাট আইডি

ফর্ম্যাট টেবিলের দ্বিতীয় কলামে ফর্ম্যাটের সংক্ষিপ্ত শনাক্তকারী উল্লেখ করা থাকে, যা অন্যান্য ডকুমেন্ট ও কোডে ফর্ম্যাট শনাক্ত করার জন্য ব্যবহার করা হয়।

বেশিরভাগ ফর্ম্যাট আইডিতে তিনটি অক্ষর, দুটি সংখ্যা এবং তারপরে একটি অক্ষর থাকে। প্রথম সংখ্যাটি ফর্ম্যাটে ১৬-বিট কোড ইউনিটের সংখ্যা নির্দেশ করে। দ্বিতীয় সংখ্যাটি ফর্ম্যাটে থাকা রেজিস্টারের সর্বাধিক সংখ্যাকে বোঝায় (সর্বাধিক, কারণ কিছু ফর্ম্যাটে রেজিস্টারের পরিবর্তনযোগ্য সংখ্যা থাকতে পারে), "r" বিশেষ চিহ্নটি দিয়ে বোঝানো হয় যে রেজিস্টারের একটি রেঞ্জ এনকোড করা হয়েছে। শেষ অক্ষরটি সেমি-নেমোনিক্যালি ফর্ম্যাট দ্বারা এনকোড করা যেকোনও অতিরিক্ত ডেটার ধরন নির্দেশ করে। যেমন, "21t" ফর্ম্যাটের দৈর্ঘ্য দুই, এতে একটি রেজিস্টার রেফারেন্স এবং অতিরিক্ত একটি ব্রাঞ্চ টার্গেট আছে।

সাজেস্ট করা স্ট্যাটিক লিঙ্ক করার ফর্ম্যাটে অতিরিক্ত "s" সাফিক্স থাকে, যার ফলে মোট চারটি অক্ষর হয়। একইভাবে, সাজেস্ট করা "ইনলাইন" লিঙ্কিং ফর্ম্যাটে অতিরিক্ত "i" প্রত্যয় থাকে। (এই প্রসঙ্গে, ইনলাইন লিঙ্কিং হল স্ট্যাটিক লিঙ্কিংয়ের মতো, তবে মেশিনের ইমপ্লিমেন্টেশনের সাথে আরও সরাসরি সম্পর্ক থাকে।) অবশেষে, কিছু অদ্ভুত সাজেস্ট করা ফর্ম্যাটে (যেমন, "20bc") দুই ধরনের ডেটা থাকে, যেগুলি ফর্ম্যাট আইডিতে দেখানো হয়।

টাইপকোড লেটারের সম্পূর্ণ তালিকা নিচে দেওয়া হল। মনে রাখবেন, ফর্ম্যাটের উপর নির্ভর করে কিছু ফর্মের সাইজ আলাদা হয়:

নেমোনিক বিটের সাইজ অর্থ
b 8 ইমিডিয়েট সাইনড byte
c ১৬, ৩২ cনস্ট্যান্ট পুল ইন্ডেক্স
f 16 ইন্টারফেস কনস্ট্যান্ট (শুধুমাত্র স্ট্যাটিক্যালি লিঙ্ক করা ফর্ম্যাটে ব্যবহার করা হয়)
ঘণ্টা 16 ইমিডিয়েট সাইনড hat (৩২- বা ৬৪-বিট ভ্যালুর হাই-অর্ডার বিট; লো-অর্ডার বিট সব 0)
i ৩২ তৎক্ষণাৎ সাইন করা int বা ৩২-বিট ফ্লোট
l ৬৪ তৎক্ষণাৎ সাইন করা long বা 64-বিট ডবল
মি 16 পদ্ধতি কনস্ট্যান্ট (শুধুমাত্র স্ট্যাটিক্যালি লিঙ্ক করা ফর্ম্যাটে ব্যবহার করা হয়)
n 4 অবিলম্বে সাইন-আপ করা nibble
সে. 16 অবিলম্বে সাইন করা short
t ৮, ১৬, ৩২ ব্রাঞ্চ টার্গেট
x 0 কোনও অতিরিক্ত ডেটা নেই

সিনট্যাক্স

ফর্ম্যাট টেবিলের তৃতীয় কলামটি নির্দেশাবলীর জন্য হিউম্যান-ওরিয়েন্টেড সিনট্যাক্স নির্দেশ করে যা নির্দেশিত ফর্ম্যাট ব্যবহার করে। প্রতিটি নির্দেশাবলী নামযুক্ত অপকোড দিয়ে শুরু হয় এবং ঐচ্ছিকভাবে একটি বা একাধিক আর্গুমেন্ট দিয়ে অনুসরণ করা হয়, এগুলি কমা দিয়ে আলাদা করা হয়।

যুক্তি যেখানেই প্রথম কলামের কোনও ফিল্ডকে উল্লেখ করে, সেখানে সেই ফিল্ডের অক্ষরটি সিনট্যাক্সে দেখানো হয় এবং ফিল্ডের প্রতিটি চার বিটের জন্য একবার করে পুনরাবৃত্তি করা হয়। যেমন, প্রথম কলামে "BB" লেবেল করা একটি এইট-বিট ফিল্ড সিনট্যাক্স কলামেও "BB" লেবেল করা হবে।

রেজিস্টারের নাম উল্লেখ করা আর্গুমেন্টের ফর্ম হল "vX"। "v" প্রিফিক্সটি আরও সাধারণ "r" প্রিফিক্সের পরিবর্তে বেছে নেওয়া হয়েছে, যাতে (নন-ভার্চুয়াল) আর্কিটেকচারের সাথে কোনও বিরোধ না হয়। এই আর্কিটেকচারে Dalvik Executable ফর্ম্যাট প্রয়োগ করা হতে পারে, যা নিজেই রেজিস্টারের জন্য "r" প্রিফিক্স ব্যবহার করে। (অর্থাৎ, এই সিদ্ধান্তের ফলে, অপ্রয়োজনীয় কথা না বাড়িয়ে ভার্চুয়াল ও বাস্তব রেজিস্টার দুটি সম্পর্কেই একসাথে কথা বলা সম্ভব হয়।)

আক্ষরিক মান নির্দেশ করে এমন আর্গুমেন্টের ফর্ম হল "#+X"। কিছু ফর্ম্যাট এমন আক্ষরিক মান নির্দেশ করে যেগুলির হাই-অর্ডার বিটে শুধুমাত্র নন-জিরো বিট থাকে; এগুলির ক্ষেত্রে, সিনট্যাক্সে শূন্য স্পষ্টভাবে দেখানো হয়, যদিও সেগুলি বিটওয়াইজ উপস্থাপনায় দেখা যায় না।

যেসব আর্গুমেন্ট আপেক্ষিক নির্দেশাবলী অ্যাড্রেস অফসেট নির্দেশ করে, সেগুলির ফর্ম "+X" হয়।

আর্গুমেন্ট যা একটি আক্ষরিক ধ্রুবক পুল সূচক নির্দেশ করে তার ফর্ম আছে "kind@X", যেখানে "kind" কোন ধ্রুবক পুল উল্লেখ করা হচ্ছে তা নির্দেশ করে। এই ধরনের ফর্ম্যাট ব্যবহার করে এমন প্রতিটি অপকোড স্পষ্টভাবে শুধুমাত্র এক ধরনের কনস্ট্যান্টের অনুমতি দেয়; সংশ্লিষ্টতা খুঁজে বের করতে অপকোড রেফারেন্স দেখুন। কনস্ট্যান্ট পুলের বিভিন্ন ধরন হল "string" (স্ট্রিং পুল ইন্ডেক্স), "type" (টাইপ পুল ইন্ডেক্স), "field" (ফিল্ড পুল ইন্ডেক্স), "meth" (মেথড পুল ইন্ডেক্স) এবং "site" (কল সাইট ইন্ডেক্স)।

কনস্ট্যান্ট পুল ইনডেক্সের উপস্থাপনার মতো, এখানেও সাজেস্ট করা (ঐচ্ছিক) ফর্ম আছে যা প্রি-লিঙ্কড অফসেট বা ইনডেক্স নির্দেশ করে। সাজেস্ট করা প্রি-লিঙ্ক করা ভ্যালু দুই ধরনের হয়: vtable অফসেট ("vtaboff" হিসেবে দেখানো হয়) এবং ফিল্ড অফসেট (যা "fieldoff" হিসেবে দেখানো হয়)।

যেসব ক্ষেত্রে ফর্ম্যাট ভ্যালু স্পষ্টভাবে সিনট্যাক্সের অংশ নয় কিন্তু তার পরিবর্তে একটি ভেরিয়েন্ট বেছে নেয়, সেখানে প্রতিটি ভেরিয়েন্টকে "[X=N]" (যেমন, "[A=2]") প্রিফিক্স সহ তালিকাভুক্ত করা হয়, যাতে সেগুলির মধ্যে পারস্পরিক সম্পর্ক দেখানো যায়।

ফর্ম্যাট

ফর্ম্যাট আইডি সিনট্যাক্স উল্লেখযোগ্য অপকোড কভার করা হয়েছে
প্রযোজ্য নয় 00x N/A অব্যবহৃত ওপকোডের জন্য ব্যবহৃত ছদ্ম-ফর্ম্যাট; ব্রেকপয়েন্ট ওপকোডের জন্য নামমাত্র ফর্ম্যাট হিসাবে ব্যবহারের জন্য প্রস্তাবিত
ØØ|op ১০x op  
|op|B|A ১২x op vA, vB  
11n op vA, #+B  
AA|op ১১x op vAA  
10t op +AA goto
ØØ|op AAAA 20t op +AAAA goto/16
AA|op BBBB 20bc op AA, kind@BBBB স্ট্যাটিক্যালি নির্ধারিত যাচাইকরণ সংক্রান্ত সমস্যার জন্য সাজেস্ট করা ফর্ম্যাট; A হল সমস্যার ধরন এবং B হল ধরন-উপযুক্ত টেবিলে একটি ইন্ডেক্স (যেমন, কোনও-এমন-মেথড-নেই সমস্যার জন্য মেথড রেফারেন্স)
AA|op BBBB ২২x op vAA, vBBBB  
21t op vAA, +BBBB  
২১ সেকেন্ড op vAA, #+BBBB  
২১ ঘণ্টা op vAA, #+BBBB0000
op vAA, #+BBBB000000000000
 
21c op vAA, type@BBBB
op vAA, field@BBBB
op vAA, method_handle@BBBB
op vAA, proto@BBBB
op vAA, string@BBBB
check-cast
const-class
const-method-handle
const-method-type
const-string
AA|op CC|BB ২৩x op vAA, vBB, vCC  
22b op vAA, vBB, #+CC  
B|A|op CCCC 22t op vA, vB, +CCCC  
২২ সেকেন্ড op vA, vB, #+CCCC  
22c op vA, vB, type@CCCC
op vA, vB, field@CCCC
instance-of
22cs op vA, vB, fieldoff@CCCC স্ট্যাটিক লিঙ্ক করা ফিল্ড অ্যাক্সেস নির্দেশাবলীর জন্য সাজেস্ট করা ফর্ম্যাট ফর্ম্যাট 22c
ØØ|op AAAAlo AAAAhi 30t op +AAAAAAAA goto/32
ØØ|op AAAA BBBB ৩২x op vAAAA, vBBBB  
AA|op BBBBlo BBBBhi 31i op vAA, #+BBBBBBBB  
31t op vAA, +BBBBBBBB  
31c op vAA, string@BBBBBBBB const-string/jumbo
A|G|op BBBB F|E|D|C ৩৫c [A=5] op {vC, vD, vE, vF, vG}, meth@BBBB
[A=5] op {vC, vD, vE, vF, vG}, site@BBBB
[A=5] op {vC, vD, vE, vF, vG}, type@BBBB
[A=4] op {vC, vD, vE, vF}, kind@BBBB
[A=3] op {vC, vD, vE}, kind@BBBB
[A=2] op {vC, vD}, kind@BBBB
[A=1] op {vC}, kind@BBBB
[A=0] op {}, kind@BBBB

এখানে অক্ষরের অস্বাভাবিক ব্যবহার থেকে বোঝা যায় যে গণনা ও রেফারেন্স ইনডেক্সকে ৩rc ফর্ম্যাটের মতো একই লেবেল দেওয়ার ইচ্ছা রয়েছে।

 
৩৫মি সে [A=5] op {vC, vD, vE, vF, vG}, vtaboff@BBBB
[A=4] op {vC, vD, vE, vF}, vtaboff@BBBB
[A=3] op {vC, vD, vE}, vtaboff@BBBB
[A=2] op {vC, vD}, vtaboff@BBBB
[A=1] op {vC}, vtaboff@BBBB

এখানে অক্ষরের অস্বাভাবিক পছন্দটি কাউন্ট এবং রেফারেন্স ইনডেক্সকে 3rms ফর্ম্যাটের মতো একই লেবেল দেওয়ার ইচ্ছা প্রতিফলিত করে।

স্ট্যাটিক লিঙ্ক করা invoke-virtual এবং invoke-super ফর্ম্যাট 35c সংক্রান্ত নির্দেশাবলীর জন্য সাজেস্ট করা ফর্ম্যাট
৩৫ মাইল [A=5] op {vC, vD, vE, vF, vG}, inline@BBBB
[A=4] op {vC, vD, vE, vF}, inline@BBBB
[A=3] op {vC, vD, vE}, inline@BBBB
[A=2] op {vC, vD}, inline@BBBB
[A=1] op {vC}, inline@BBBB

এখানে অক্ষরের অস্বাভাবিক ব্যবহার থেকে বোঝা যায় যে গণনা ও রেফারেন্স ইনডেক্সকে ৩rmi ফর্ম্যাটের মতো একই লেবেল দেওয়ার চেষ্টা করা হয়েছে।

ইনলাইন লিঙ্ক করা invoke-static এবং invoke-virtual ৩৫c ফর্ম্যাট সংক্রান্ত নির্দেশাবলীর জন্য সাজেস্ট করা ফর্ম্যাট
AA|op BBBB CCCC 3rc op {vCCCC .. vNNNN}, meth@BBBB
op {vCCCC .. vNNNN}, site@BBBB
op {vCCCC .. vNNNN}, type@BBBB

যেখানে NNNN = CCCC+AA-1, অর্থাৎ A গণনা নির্ধারণ করে 0..255, এবং C প্রথম রেজিস্টার নির্ধারণ করে

 
৩টি রুম op {vCCCC .. vNNNN}, vtaboff@BBBB

যেখানে NNNN = CCCC+AA-1, অর্থাৎ A কাউন্ট 0..255 নির্ধারণ করে এবং C প্রথম রেজিস্টার নির্ধারণ করে

স্ট্যাটিক লিঙ্ক করা invoke-virtual-এর জন্য সাজেস্ট করা ফর্ম্যাট এবং invoke-super ফর্ম্যাট সংক্রান্ত নির্দেশাবলী 3rc
3rmi op {vCCCC .. vNNNN}, inline@BBBB

যেখানে NNNN = CCCC+AA-1, অর্থাৎ A গণনা নির্ধারণ করে 0..255, এবং C প্রথম রেজিস্টার নির্ধারণ করে

ইনলাইন লিঙ্ক করা invoke-static ও invoke-virtual-এর জন্য সাজেস্ট করা ফর্ম্যাট 3rc
A|G|op BBBB F|E|D|C HHHH ৪৫ সিসি [A=5] op {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH
[A=4] op {vC, vD, vE, vF}, meth@BBBB, proto@HHHH
[A=3] op {vC, vD, vE}, meth@BBBB, proto@HHHH
[A=2] op {vC, vD}, meth@BBBB, proto@HHHH
[A=1] op {vC}, meth@BBBB, proto@HHHH
invoke-polymorphic
AA|op BBBB CCCC HHHH 4rcc op> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH

যেখানে NNNN = CCCC+AA-1, অর্থাৎ A কাউন্ট 0..255 নির্ধারণ করে এবং C প্রথম রেজিস্টার নির্ধারণ করে

invoke-polymorphic/range
AA|op BBBBlo BBBB BBBB BBBBhi 51l op vAA, #+BBBBBBBBBBBBBBBB const-wide