2011-10-18 19 views
5

Do -fstack-koruyucusu ve -fstack-koruyucusu-hepsi de yığın tabanlı bellek ayırmalarını ya da yalnızca yığın tabanlı olanları korur mu?-fstack-koruyucusu, -fstack-protector-all ve -fmudflap

İlk 2 ve -fmudlap arasındaki fark nedir?

Hata ayıklama konusunda daha iyi olan herhangi bir öneriniz var mı?

(gcc man page yeterince açık olup olmadığından emin değilim ya da ben sadece bunu anlamıyorum ...)

char foobar[10]; // stack-based 

char *foobar = malloc(10); // heap-based 
+0

Amacınız nedir? Kodunuzun korunduğundan emin olmak ve onu neyin iyi koruduğunu açmak ister misiniz? Eğer durum buysa, gcc varsayılanı, tüm korumaların etkin olduğu durumlarda çoğunu derler (ör. Kanarya değeri-kanatlı koruyucunun etkin olduğu görülüyor). Hedefiniz kod mantığını takip etmeyi kolaylaştırmak için bir hata ayıklama durumunda seçici bir şekilde devre dışı bırakmaksa, kodun hangi bölümlerinin sadece korumaları kesmek zorunda kaldığını düşünmek zorunda kalıyorsanız, birçok korumayı devre dışı bırakabilirsiniz (bence ama tümüyle nx ayarı biraz fazla). Bu durumda, istediğiniz seçenek (diğerleri arasında) -fno-stack-protector olur. – gnometorule

+0

Peki, bazı yönlendirme tablolarının yazılabilir olup olmadığını, imkansız olmasa bile devre dışı bırakmanın zor olduğunu düşündüğüm başkaları da var. – gnometorule

+0

@gnometorule Hedefim mümkün olduğunca fazla koruma sağlamaktır. Ama bunun için, her birinin ne yaptığını ve yapmadığını anlamalıyım. –

cevap

0

paçalık işaretçi kontrolleri içindir. Bakınız this pdf. Bu gcc özelliklerini kullanabilmek için ilgili lib'leri kurmanız gerekecektir. Bu tür hataları tespit etmek için valgrind'i daha iyi kullanmayı seviyorum çünkü yeniden derleme/yeniden bağlamaya gerek yoktur ve kullanımı daha kolaydır, ancak bunlar da değerli olabilir.

+0

pdf bağlantısı bozuk – makerj

2

-Korakt koruyucusu ve -fstack koruyucusu-hepsi yığın ayırma ile ilgisi yoktur.
-fstack-koruyucusu yalnızca dizeleri (arabellek taşması saldırıları için ana sorun hedefi) korur, -fstack-protector-all tüm türleri korur. Burada bazı tanımlar: http://en.wikipedia.org/wiki/Buffer_overflow_protection