تعد الذاكرة غير المهيأة في C وC++ سببًا شائعًا لمشاكل الموثوقية، الأخطاء المتعلقة بأمان الذاكرة وتسرُّب المعلومات لتجنُّب هذه المشاكل، يستخدم Android بتهيئة أكبر قدر ممكن من الذاكرة.
عدم ضبط مساحة المستخدم في ذاكرة التخزين المؤقت
بدءًا من نظام التشغيل Android 12، لم يتم إعداد ذاكرة التكديس.
في كل الرموز البرمجية الأصلية للنظام الأساسي (بما في ذلك JNI) وتساوي ذاكرة كومة الذاكرة المؤقتة صفر
تمت التهيئة في كل العمليات الأصلية للنظام الأساسي (مثل 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
للأعطال الأصلية. لمزيد من المعلومات حول
لتصحيح أخطاء رمز Android الأصلي، يمكنك الاطّلاع على المعلومات هنا.