حافظه اولیه صفر

حافظه اولیه در C و C++ یکی از دلایل رایج مشکلات قابلیت اطمینان، اشکالات ایمنی حافظه و نشت اطلاعات است. برای جلوگیری از این مشکلات، اندروید تا حد ممکن حافظه را مقداردهی اولیه می کند.

حافظه فضای کاربری اولیه صفر

از اندروید 12، حافظه پشته در تمام کدهای بومی پلتفرم (از جمله JNI) صفر است و حافظه پشته در تمام فرآیندهای بومی پلتفرم (مانند netd ) صفر است، اما در zygote یا در برنامه‌ها صفر است.

برنامه های شخص اول و شخص ثالث ساخته شده با NDK اکیداً توصیه می شود که از پرچم کامپایلر -ftrivial-auto-var-init=zero برای صفر کردن متغیرهای محلی پشته خود استفاده کنند. کامپایلر هرگونه صفر کردن غیر ضروری را بهینه می کند. به عنوان مثال، زمانی که یک متغیر محلی به طور صریح مقداردهی اولیه می شود (مانند، int x = 123; متغیر x تنها یک بار مقداردهی اولیه می شود). اگر برنامه دارای یک بافر پشته بزرگ در یک نقطه عملکردی باشد، توسعه دهنده می تواند با استفاده از یک ویژگی کامپایلر، مقداردهی اولیه را غیرفعال کند:

__attribute__((__uninitialized__)) char buf[BUFSIZ];

برنامه‌ها همچنین می‌توانند با استفاده از ویژگی مانیفست android:nativeHeapZeroInitialized مقداردهی اولیه را انتخاب کنند. از طرف دیگر، مقدار دهی اولیه Heap Zero را می توان در زمان اجرا با موارد زیر کنترل کرد:

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 به عنوان گزینه بوت زمان هسته است.

گزارش اشکال

ابزارهای ما گزارش‌های باگ روشن‌گری را تولید می‌کنند که حاوی اطلاعات اضافی برای کمک به اشکال‌زدایی است. تخصیص اضافی و ردیابی پشته توزیع به درک بهتر چرخه عمر یک تخصیص داده شده کمک می کند و منجر به ایجاد اشکالات ایمنی حافظه بسیار سریعتر می شود.

نمونه ای از گزارش اشکال ایجاد شده توسط ابزار ایمنی حافظه
شکل 1 : گزارش های اشکال تولید شده توسط ابزار ایمنی حافظه

در طول توسعه، فروشندگان باید با بررسی /data/tombstones و logcat برای خرابی های بومی، وجود اشکالات را کنترل کنند. برای اطلاعات بیشتر در مورد اشکال زدایی کد بومی اندروید، اطلاعات اینجا را ببینید.