Yığın taşmalarını algılamak yazılımın (işletim sistemi) görevi mi yoksa donanımda bir yığın taşması tespit edilip CPU'da bir istisna oluşturuyor mu?
Yığın taşmalarını algılamak yazılımın (işletim sistemi) görevi mi yoksa donanımda bir yığın taşması tespit edilip CPU'da bir istisna oluşturuyor mu?
Yanıtlar:
Yazılım veya donanım olabilir ya da her ikisi de olabilir.
İki tür taşma vardır: yığını büyütürken (bir işlev girerken) taşma ve yığında bir diziye erişirken taşma. Yığını büyütürken taşma, yeteri kadar yer olduğunu doğrulamak için fonksiyon girişini kontrol ederek sınırlar tespit edilerek tespit edilebilir (ve bir hatayı işaret eder veya yoksa yığını büyütün). Yığındaki bir diziye erişirken taşmalar, yalnızca dizi sınırlarını doğrulamayan düşük seviyeli dillerdeki bir sorundur; Buradaki çözüm dizi sınırlarını doğrulamak.
Bu yazılım yaklaşımlarının tamamen güvenilir çalışma avantajı vardır: herhangi bir yığın taşmasının tespit edileceğinden emin olabilirsiniz. Onların dezavantajı, kod boyutunu ve yürütme süresini artırmalarıdır. Donanım, taşma meydana gelmediği sürece çoğu taşma maliyetini ücretsiz olarak tespit etmek için bir yöntem sağlar. Bir MMU with bulunan bir mimaride , çalışma ortamı bir sonraki sayfa eşlenmemiş halde kalacak şekilde, bir sayfa sınırındaki yığını eşlemek için düzenleme yapabilir.
+---------------+---------------+---------------+---------------+
| stack | unmapped | other stuff |
| ----> direction of growth | | |
+---------------+---------------+---------------+---------------+
^ ^ ^ ^ ^ page boundaries
Bu şekilde, yazılım sayfa sınırlarının ötesindeki verilere erişmeye çalışırsa (yığın işaretçisi sınırın ötesine geçtiğinden veya dizi erişimi sınırların dışında olduğundan ve sınırın ötesinde olduğu için), eşlenmemiş bir alana erişerek hataya neden olur . Bu, yalnızca taşma yeterince küçükse gerçekleşir: taşma miktarı çok büyükse, program adres alanındaki boşluğun diğer tarafındaki diğer öğelere erişebilir.
Donanım yaklaşımının dezavantajları, tamamen güvenilir olmadığı, çünkü büyük miktarda taşma tespit edilemeyebilir ve adreslenebilir alan içinde kalan dizi taşmalarını tespit edemez.
Dizi taşmalarını saptamak için başka bir yazılım tekniği bir kanaryadır : yığının en üstüne veya kareler arasına özel bir değer koyun ve kanarya değerinin işlev dönüşünde değişmediğini kontrol edin. Bu aynı zamanda kusurlu bir tekniktir çünkü taşma kanaryayı tamamen önleyebilir veya kontrol edilemediği için kanarya değeri geri kazanıldığı için tespit edilemeyebilir. Bununla birlikte, bazı güvenlik açıklarından yararlanmayı zorlaştırmak faydalıdır.
Yığın taşmalarını önlemenin en güvenli ve en ucuz yolu, statik analizle programın yürütmeye başlamadan önce ihtiyaç duyacağı yığının miktarını hesaplamaktır. Ancak bu her zaman pratik değildir: Bir programın ihtiyaç duyduğu yığın miktarı genel olarak kararsızdır ve program tarafından manipüle edilen verilere bağlıdır.
Principle Aynı ilke sadece bir MPU ile veya yığını mevcut fiziksel eşlemelerin kenarında olan tek bir iplik varsa, bellek korumasız olarak da uygulanabilir.