Etiketli işaretçiler

Android 11'den itibaren, 64 bit işlemler için tüm yığın ayırmaları Şu cihazlarda işaretçinin üst baytında bulunan, uygulama tarafından tanımlanmış bir etiket ARM Üst Bayt Yoksayma (TBI) için çekirdek desteği. Bu ayarı değiştiren tüm uygulamalar etiketi sonlandırılır. Bu gerekli desteğinden yararlanmaya devam edeceğiz.

Üst bayt yoksayılması

ARM'ın Üst Bayt Yoksayma özelliği, tüm Armv8 AArch64 donanımlarında 64 bit kodlar için kullanılabilir. Bu özellik, şu anlama gelir: belleğe erişiyor.

TBI, uyumlu bir kernel örneğine bakalım. 4.14 (Pixel 4) ve sonraki sürümlerdeki Android Ortak Kernell'leri, gerekli TBI'yı içerir. yama olarak gönderin.

Çekirdeğde TBI desteği olan cihazlar dinamik olarak aşağıdaki konumda algılanır: işlemin başlangıç zamanına ve sayfanın alt kısmına uygulamaya bağlı bir etiket baytına ekleyebilirsiniz. Bu adımdan sonra, bellek ayrılırken etiketin kısaltılmadığından emin olun.

Bellek Etiketleme Uzantısı'nın hazırlık durumu

ARM'ın Bellek Etiketleme Uzantısı (MTE), bellekle ilgili güvenlik sorunlarının çözülmesine yardımcı olur. MTE her belleğin 56.-59. adres bitlerini etiketleyerek çalışır ayırmalarına izin verir. Donanım ve talimat seti her bellek erişiminde doğru etiketin kullanılıp kullanılmadığını otomatik olarak kontrol eder.

Dosyanın üst baytında yanlış bilgi depolayan Android uygulamaları MTE özellikli cihazlarda bozulacağı garanti edilir. Etiketli işaretçiler, üst kısmın yanlış kullanımlarını tespit edip reddetmeyi kolaylaştırır baytını içeren bir e-tablo alır.

Geliştirici desteği

Uygulamanız kilitlenirse ve bu bağlantıyı girmeniz istenirse bunun nedeni şunlardan biri olabilir: şunlardan biri:

  1. Uygulama, alan tarafından ayrılmamış bir işaretçiyi sisteme ait yığın ayırıcıdır.
  2. Uygulamanızdaki bir şey, işaretçinin üst baytını değiştirdi. Şunun üst baytı: İşaretçi değiştirilemez ve bu sorunu düzeltmek için kodunuzun değiştirilmesi gerekir .

Üst bayt işaretçisinin yanlış kullanımına veya değiştirilmesine ilişkin örnekler.

  • Belirli bir türün işaretçilerinde uygulamaya özel meta veriler saklanıyor girin.
  • Alt adres bitlerini kaybeden bir işaretçinin ilk iki katına çıkıp daha sonra geri gitmesi.
  • Yerel değişkenlerin adresleri arasındaki farkı hesaplayan kod kullanarak yineleme derinliğini ölçmeyi sağlar.

Bazı uygulamalar üst baytının ayarlandığından emin olun. Bu durumun belki de hızlı bir şekilde çözmek için zahmetsiz hale getirilmiştir. Dolayısıyla, targetSdkLevel < 30 kullanan uygulamalar varsayılan olarak işaretçi etiketleme özelliği etkinleştirilmez. Ayrıca resmî bir kapanışla targetSdkLevel >= 30 ile oluşturulan uygulamalar için satır geçiş dönemini kolaylaştırmayı amaçlıyor.

Bu çıkış çıkışı, aşağıdaki bilgilerin AndroidManifest.xml dosyası:

  <application android:allowNativeHeapPointerTagging="false">
  ...
  </application>

Bu işlem, İşaretçi Etiketleme özelliğini devre dışı bırakır. uygulamasını indirin. Bu, sorununa yol açabilir. Bu kaçış kapısı gelecekte kaybolacak Android sürümleriyle uyumlu değildir, çünkü bu türdeki sorunlar MTE.