Gcc có phân bổ bộ nhớ thông minh để ngăn chặn tấn công tràn bộ đệm không?vấn đề cấp phát bộ nhớ gcc - tấn công tràn bộ đệm
int function(char *str) {
int a = 0; // See the
char b[16] = "abcd"; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
và
int function(char *str) {
char b[16] = "abcd"; // See the
int a = 0; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
Khi tôi gỡ lỗi nó với gdb, nó luôn luôn phân bổ bộ nhớ đầu tiên để nguyên biến và sau đó mảng nhân vật; bất kể thứ tự khai báo biến là gì. Ví dụ: Trong cả hai trường hợp, trình biên dịch cấp phát bộ nhớ trước tiên cho a
và sau đó đến b
.
(higher address)
Memory
| |
| |
+--------+
| |
| |
| |
| |
+--------+ <----- b (16 bytes)
| |
+--------+ <----- a (4 bytes)
| |
(lower address)
Vì vậy, ngay cả khi chúng tôi cung cấp hơn 16 ký tự trong str
, nó có thể không ảnh hưởng đến giá trị của a
. Ai có thể giúp tôi ở đây không?
Cảm ơn bạn.
_ Tiêu chuẩn_ cho phép sắp xếp lại như vậy cho bất kỳ mục đích nào, trình biên dịch muốn thực hiện. Phổ biến nhất - tối ưu hóa. Nó vẫn là "trí thông minh", nhưng không phải để ngăn chặn "tấn công tràn bộ đệm". Và nó vẫn là một hành vi _undefined_ (tràn bộ đệm) –