C এবং C++ তে অপ্রবর্তিত মেমরি নির্ভরযোগ্যতা সমস্যা, মেমরি নিরাপত্তা বাগ এবং তথ্য ফাঁসের একটি সাধারণ কারণ। এই সমস্যাগুলি এড়াতে, অ্যান্ড্রয়েড যতটা সম্ভব মেমরি চালু করে।
জিরো ইনিশিয়ালাইজড ইউজারস্পেস মেমরি
অ্যান্ড্রয়েড 12 থেকে, সমস্ত প্ল্যাটফর্ম নেটিভ কোডে (জেএনআই সহ) স্ট্যাক মেমরি শূন্য আরম্ভ করা হয় এবং সমস্ত প্ল্যাটফর্ম নেটিভ প্রসেসে (যেমন netd
) হিপ মেমরি শূন্য শুরু হয় কিন্তু zygote
বা অ্যাপে নয়।
NDK-এর সাহায্যে নির্মিত প্রথম এবং তৃতীয়-পক্ষের অ্যাপগুলিকে তাদের স্ট্যাক স্থানীয় ভেরিয়েবলগুলিকে শূন্য-ইনিশিয়ালাইজ করতে -ftrivial-auto-var-init=zero
কম্পাইলার পতাকা ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়। কম্পাইলার অপ্রয়োজনীয় যেকোন শূন্যকে অপ্টিমাইজ করে। উদাহরণস্বরূপ, যখন একটি স্থানীয় ভেরিয়েবল স্পষ্টভাবে আরম্ভ করা হয় (যেমন, int x = 123;
ভেরিয়েবল x
শুধুমাত্র একবার শুরু হয়)। যদি প্রোগ্রামটির একটি পারফরম্যান্স হটস্পটে একটি বড় স্ট্যাক বাফার থাকে, তাহলে বিকাশকারী একটি কম্পাইলার অ্যাট্রিবিউট ব্যবহার করে সূচনা নিষ্ক্রিয় করতে পারে:
__attribute__((__uninitialized__)) char buf[BUFSIZ];
অ্যাপগুলি android:nativeHeapZeroInitialized
ম্যানিফেস্ট অ্যাট্রিবিউট ব্যবহার করে হিপ জিরো ইনিশিয়ালাইজেশন বেছে নিতে পারে। বিকল্পভাবে, রানটাইমে হিপ শূন্য প্রারম্ভিকতা নিয়ন্ত্রণ করা যেতে পারে:
int mallopt(M_BIONIC_ZERO_INIT, level)
যেখানে লেভেল 0 বা 1।
জিরো ইনিশিয়ালাইজ করা কার্নেল মেমরি
GKI কার্নেলের জন্য কার্নেল স্ট্যাক এবং হিপ শূন্য শুরু করা হয়েছে, যা CDD দ্বারা দৃঢ়ভাবে সুপারিশ করা হয়েছে ।
স্ট্যাক ইনিশিয়ালাইজেশনের জন্য, GKI CONFIG_INIT_STACK_ALL_ZERO
কনফিগারেশন ব্যবহার করে, যার ফলে -ftrivial-auto-var-init=zero
কম্পাইলার পতাকা ব্যবহার করে কার্নেল তৈরি করা হয়। হিপ ইনিশিয়ালাইজেশনের জন্য, GKI CONFIG_INIT_ON_ALLOC_DEFAULT_ON
ব্যবহার করে, যা তৈরি করার সময় সমস্ত পৃষ্ঠা হিপ, SLAB এবং SLUB বরাদ্দ শূন্য-প্রাথমিক করে তোলে। এই বিকল্পটি কার্যকরভাবে একটি কার্নেল বুট-টাইম বিকল্প হিসাবে init_on_alloc=1
পাস করার অনুরূপ।
বাগ রিপোর্ট
আমাদের সরঞ্জামগুলি অন্তর্দৃষ্টিপূর্ণ বাগ রিপোর্ট তৈরি করে যাতে ডিবাগিং-এ সহায়তা করার জন্য অতিরিক্ত তথ্য থাকে। অতিরিক্ত বরাদ্দ এবং ডিলোকেশন স্ট্যাক ট্রেস একটি প্রদত্ত বরাদ্দের জীবনচক্রকে আরও ভালভাবে বুঝতে সাহায্য করে এবং রুট-সৃষ্টিকারী মেমরি সুরক্ষা বাগগুলিকে আরও দ্রুততর করে তোলে।
বিকাশের সময়, বিক্রেতাদের /data/tombstones
এবং স্থানীয় ক্র্যাশের জন্য logcat
পরীক্ষা করে বাগগুলির উপস্থিতি নিরীক্ষণ করা উচিত। অ্যান্ড্রয়েড নেটিভ কোড ডিবাগিং সম্পর্কে আরও তথ্যের জন্য এখানে তথ্য দেখুন।