Gcc, arabellek taşması saldırısını önlemek için akıllıca bellek ayırma yapar mı?gcc bellek ayırma sorunu - arabellek taşması saldırısı
int function(char *str) {
int a = 0; // See the
char b[16] = "abcd"; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
ve
int function(char *str) {
char b[16] = "abcd"; // See the
int a = 0; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
o zaman değişkenleri ve karakter dizisi tamsayı ilk bellek tahsis GDB ile hata ayıklama;
değişken beyanının sırası ne olursa olsun. i.e. Her iki durumda da, derleyici önce belleği
a
ve daha sonra
b
'a ayırır.
(higher address)
Memory
| |
| |
+--------+
| |
| |
| |
| |
+--------+ <----- b (16 bytes)
| |
+--------+ <----- a (4 bytes)
| |
(lower address)
Demek ki str
16'dan fazla karakter arz bile, a
değerini etkileyemez. Burada kimse bana yardım edebilir mi?
Teşekkür ederiz.
_The Standard_, herhangi bir amaç için böyle bir yeniden sıralama yapılmasına izin verir, derleyici bunu yapmak ister. En yaygın - optimizasyon. Hala "zeka", ama "tampon taşma saldırısı" önlemek için değil. Ve hala bir _undefined behavior_ (arabellek taşması) –