Başlatılmış bellek yok

C ve C++'ta başlatılmamış bellek, güvenilirlik sorunlarının yaygın bir nedenidir, ve bilgi sızıntıları olabilir. Bu sorunları önlemek için Android Bu işlem, olabildiğince fazla belleği başlatır.

Başlatılan kullanıcı alanı belleği yok

Android 12'den bu yana yığın belleği sıfırdır. tüm platformda yerel kodda (JNI dahil) ve yığın belleğinde sıfır tüm platform yerel işlemlerinde (ör. netd) başlatıldı ancak zygote içinde veya uygulamalarda değil.

NDK ile oluşturulan birinci ve üçüncü taraf uygulamaları güçlü bir Yığınını yerel olarak sıfırlamak için -ftrivial-auto-var-init=zero derleyici işaretini kullanması önerilir değişkenlerine karşılık gelir. Derleyici, gereksiz olan sıfırlamaları optimize eder. Örneğin, bir yerel değişken açıkça başlatıldığında (örneğin int x = 123; x değişkeni yalnızca bir kez başlatılır). Programın performansta büyük bir yığın tamponu olup olmadığı hotspot, geliştirici bir derleyici kullanarak başlatmayı devre dışı bırakabilir özellik:

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

Uygulamalar ayrıca android:nativeHeapZeroInitialized manifest özelliği. Alternatif olarak, yığın sıfır başlatma işlemi çalışma zamanında kontrol edilebilir şununla:

int mallopt(M_BIONIC_ZERO_INIT, level)

Seviye 0 veya 1 olduğunda.

Başlatılmış çekirdek belleği yok

Çekirdek yığını ve yığın, GKI çekirdekleri için sıfır ilk kullanıma hazırlandı. Bu işlem, tavsiye edilir.

GKI, yığın başlatma için CONFIG_INIT_STACK_ALL_ZERO yapılandırması oluşturulur. Bu yapılandırma, -ftrivial-auto-var-init=zero derleyici işaretini kullanan çekirdek. GKI, yığın başlatma için CONFIG_INIT_ON_ALLOC_DEFAULT_ON, tüm sayfa yığını, SLAB ve SLUB ayırmalarının ilk oluşturulduğunda sıfır başlatma işlemi yapılır. Bu seçenek init_on_alloc=1 öğesini çekirdek olarak iletmeye benzer seçeneği belirleyin.

Hata raporları

Araçlarımız, ek bilgiler içeren ayrıntılı hata raporları oluşturur hata ayıklamaya yardımcı olmak için kullanılır. Ek ayırma ve anlaşma konumu yığın izlemesi belirli bir tahsisin yaşam döngüsünü daha iyi anlamamızı sağlar bellek güvenliği hatalarını çok daha hızlı bir şekilde çözebilir.

Oluşturulan hata raporu örneği
  bellek güvenliği aracı tarafından
Şekil 1: Bellek güvenliği araçları tarafından oluşturulan hata raporları

Satıcılar, geliştirme sırasında hataları kontrol ederek /data/tombstones ve Yerel kilitlenmeler için logcat. Daha fazla bilgi için Android yerel kodunda hata ayıklama için buradaki bilgilere bakın.