মেমরি ত্রুটি ডিবাগিং এবং প্রশমন

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

tl; ড

  • মেমরি ত্রুটিগুলিকে অসম্ভব করতে যখনই সম্ভব একটি মেমরি নিরাপদ ভাষা ব্যবহার করুন
  • ROP/JOP আক্রমণ কমাতে সর্বদা PAC/BTI ব্যবহার করুন
  • উত্পাদনে বিরল মেমরি ত্রুটি সনাক্ত করার জন্য সর্বদা GWP-ASan ব্যবহার করুন
  • পরীক্ষার সময় মেমরি ত্রুটি সনাক্ত করতে HWASan ব্যবহার করুন
  • MTE- সক্ষম ডিভাইসগুলি সাধারণত 2023 সালে পাওয়া যায় না, তবে আপনি যদি উত্পাদনে ত্রুটি সনাক্ত করতে সক্ষম হন তবে এটি ব্যবহার করুন
  • শুধুমাত্র শেষ অবলম্বন হিসাবে পরীক্ষার সময় ASan ব্যবহার করুন

মেমরি নিরাপদ ভাষা

একটি মেমরি নিরাপদ ভাষা সম্পূর্ণরূপে এড়াতে এবং মেমরি ত্রুটিগুলি হ্রাস করার একমাত্র উপায়। এই পৃষ্ঠার অন্যান্য সরঞ্জামগুলি আপনাকে আপনার মেমরির অনিরাপদ কোডকে আরও নিরাপদ এবং আরও নির্ভরযোগ্য করতে সাহায্য করতে পারে, তবে একটি মেমরির নিরাপদ ভাষা ব্যবহার করে পুরো শ্রেণীর সমস্যাগুলি দূর করে।

অ্যান্ড্রয়েডের জন্য আনুষ্ঠানিকভাবে সমর্থিত মেমরি নিরাপদ ভাষা হল জাভা এবং কোটলিন। বেশিরভাগ অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলি সেই ভাষাগুলির মধ্যে একটিতে বিকাশ করা সহজ।

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

PAC/BTI

পয়েন্টার প্রমাণীকরণ এবং শাখা লক্ষ্য শনাক্তকরণ , যা PAC/BTI নামেও পরিচিত, উৎপাদনে ব্যবহারের জন্য উপযোগী প্রশমন সরঞ্জাম। যদিও পৃথক প্রযুক্তি, তারা একই কম্পাইলার পতাকা দ্বারা নিয়ন্ত্রিত হয় তাই সবসময় একসাথে ব্যবহার করা হয়।

এই বৈশিষ্ট্যগুলি এমন ডিভাইসগুলির সাথে পিছিয়ে সামঞ্জস্যপূর্ণ যেগুলি তাদের সমর্থন করে না কারণ ব্যবহৃত নতুন নির্দেশাবলী আগের ডিভাইসগুলিতে নো-অপস৷ এটি একটি নতুন যথেষ্ট কার্নেল এবং OS এর একটি নতুন যথেষ্ট সংস্করণ থাকাও প্রয়োজনীয়৷ /proc/cpuinfopaca এবং bti সন্ধান করা আপনাকে দেখায় যে আপনার কাছে যথেষ্ট নতুন হার্ডওয়্যার এবং একটি নতুন যথেষ্ট কার্নেল আছে কিনা। অ্যান্ড্রয়েড 12 (এপিআই 31) প্রয়োজনীয় ইউজারস্পেস সমর্থন রয়েছে।

সুবিধা:

  • পুরানো ডিভাইস বা কার্নেলে সমস্যা না করেই সমস্ত বিল্ডে সক্ষম করা যেতে পারে (তবে নিশ্চিত করুন যে আপনি আসলে এটিকে সমর্থন করে এমন একটি ডিভাইস/কার্নেল/ওএস সংমিশ্রণে পরীক্ষা করেছেন!)

অসুবিধা:

  • শুধুমাত্র 64-বিট অ্যাপের জন্য উপলব্ধ
  • এটি সমর্থন করে না এমন ডিভাইসগুলিতে ত্রুটিগুলি হ্রাস করে না৷
  • 1% কোড সাইজ ওভারহেড

GWP-আসান

GWP-ASan ক্ষেত্রে মেমরি ত্রুটি সনাক্ত করতে ব্যবহার করা যেতে পারে, কিন্তু একটি কার্যকর প্রশমনের জন্য নমুনার হার খুবই কম।

সুবিধা:

  • কোন উল্লেখযোগ্য CPU বা মেমরি ওভারহেড নেই
  • স্থাপন করা তুচ্ছ: নেটিভ কোড পুনর্নির্মাণের প্রয়োজন নেই
  • 32-বিট অ্যাপের জন্য কাজ করে

অসুবিধা:

  • কম স্যাম্পলিং রেট কার্যকরভাবে বাগ খুঁজে পেতে বিপুল সংখ্যক ব্যবহারকারীর প্রয়োজন
  • শুধুমাত্র হিপ ত্রুটি সনাক্ত করে, স্ট্যাক ত্রুটি নয়

HWASan

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

সুবিধা:

  • কোন মিথ্যা ইতিবাচক
  • অতিরিক্ত শ্রেণির ত্রুটি সনাক্ত করে যা ASan করতে পারে না (ফিরানোর পরে স্ট্যাক ব্যবহার)
  • MTE-এর তুলনায় মিথ্যা নেতিবাচকের কম হার (256-এর মধ্যে 1 বনাম 16-এর মধ্যে 1)
  • ASan এর চেয়ে কম মেমরি ওভারহেড, এটির নিকটতম বিকল্প

অসুবিধা:

  • উল্লেখযোগ্য CPU (~100%), কোডের আকার (~50%), এবং মেমরি (10% - 35%) ওভারহেড
  • API 34 এবং NDK r26 পর্যন্ত, একটি HWASan সামঞ্জস্যপূর্ণ চিত্র ফ্ল্যাশ করা প্রয়োজন
  • শুধুমাত্র 64-বিট অ্যাপে কাজ করে

এমটিই

মেমরি ট্যাগিং এক্সটেনশন , যা MTE নামেও পরিচিত, HWASan-এর একটি কম খরচের বিকল্প। ডিবাগিং এবং পরীক্ষার ক্ষমতা ছাড়াও, এটি উত্পাদনে মেমরি দুর্নীতি সনাক্ত এবং প্রশমিত করতে ব্যবহার করা যেতে পারে। যদি আপনার কাছে MTE বিল্ডগুলি পরীক্ষা করার জন্য হার্ডওয়্যার থাকে তবে আপনার এটি সক্ষম করা উচিত৷

সুবিধা:

  • অনেক অ্যাপের উৎপাদনে সহনীয় হওয়ার জন্য যথেষ্ট কম ওভারহেড
  • কোন মিথ্যা ইতিবাচক
  • গাদা ত্রুটি সনাক্ত করতে পুনর্নির্মাণ কোডের প্রয়োজন হয় না (কিন্তু স্ট্যাক ত্রুটি সনাক্ত করতে হয়)

অসুবিধা:

  • 2024 সালে ডিফল্টরূপে MTE সক্ষম করা কোনো বাণিজ্যিকভাবে উপলব্ধ ডিভাইস নেই, কিন্তু Arm-এর ডকুমেন্টেশন ব্যাখ্যা করে কিভাবে Pixel 8/Pixel 8 Pro-এ পরীক্ষার জন্য MTE সক্ষম করা যায়।
  • মিথ্যা ঋণাত্মক হার 16-এর মধ্যে 1 বনাম HWASan-এর 1-এর মধ্যে 256৷
  • শুধুমাত্র 64-বিট অ্যাপের জন্য উপলব্ধ
  • এমটিই-সক্ষম এবং নন-এমটিই সক্ষম ডিভাইস উভয়কেই লক্ষ্য করার জন্য আলাদা লাইব্রেরি তৈরির প্রয়োজন

আসান

অ্যাড্রেস স্যানিটাইজার , যা ASan নামেও পরিচিত, এটি উপলব্ধ সরঞ্জামগুলির মধ্যে প্রাচীনতম এবং সবচেয়ে ব্যাপকভাবে উপলব্ধ। এটি পরীক্ষার সময় মেমরির ত্রুটি ধরার জন্য এবং ডিবাগিং সমস্যাগুলির জন্য দরকারী যা শুধুমাত্র পুরানো ডিভাইসগুলিকে প্রভাবিত করে যেখানে অন্য কোনও সরঞ্জাম উপলব্ধ নেই৷ যখনই সম্ভব, HWASan পছন্দ করুন।

সুবিধা:

  • ব্যাপকভাবে উপলব্ধ। কিটক্যাটের মতো পুরানো ডিভাইসগুলিতে কাজ করতে পারে৷
  • সঠিকভাবে ব্যবহার করার সময় কোন মিথ্যা ইতিবাচক বা নেতিবাচক নয়

অসুবিধা:

  • সঠিকভাবে নির্মাণ এবং প্যাকেজ করা কঠিন
  • সব বিকল্পের মধ্যে সর্বোচ্চ ওভারহেড: ~100% CPU, ~50% কোড সাইজ, ~100% মেমরি ব্যবহার
  • আর সমর্থিত নয়
  • পরিচিত বাগ আছে যে সংশোধন করা হবে না