Donanım veya yazılım tarafından yığın taşması tespit edildi mi?


26

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?


Çoğu CPU'daki MMU hataları aracılığıyla donanım derdim. 32 bit modundaki x86 sayfalamaya ek olarak segmentasyona sahipti ve "Temel Segment", hem temel adres hem de boyuttaki Code, Data, Ext ... segmentleri gibi ilişkilendirildi. Bu aralığın dışındaki herhangi bir erişim bir hatayı tetikler.
TEMLIB

Yanıtlar:


25

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.


4
Dizi yığında olsa bile sınır dışı dizi erişimine yığın taşması gelmezdim. Bu sadece tampon taşması için özel bir durum.
CodesInChaos

Bir yığın / çerçeve göstergesine veya sabit olmayan bir dengeye göre başvurulan birincil yığın öğelerine tahsis edilmemesi geleneksel yığın taşmalarını önler. Ayrı bir iade adres yığını (veya Itanium gibi RA / kayıt dökülme yığını) kullanılması, en azından geri dönüş odaklı programlama fırsatlarını büyük ölçüde azaltır.
Paul A. Clayton

Sınır dışı erişime, taşma değil , daha fazla taşma denir .
Ben Voigt

3
@ awesomebing1 Her platform yığın taşmalarını algılamaz. Yığından sonra ne olursa olsun, üzerine yazabilir (diğer tampon taşmalarına benzer).
user253751

1
@CodesInChaos, bazen yığınla ayrılmış tamponlarda arabellek taşmaları "yığın taşmaları" olarak adlandırılır (kısaca). Verilmiş, bu terminoloji bağlam olmadan biraz kafa karıştırıcı olabilir.
DW
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.