gcc 是否智能进行内存分配以防止缓冲区溢出攻击?
int function(char *str) {
int a = 0; // See the
char b[16] = "abcd"; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
和
int function(char *str) {
char b[16] = "abcd"; // See the
int a = 0; // changes here
if(!strcmp(b, str))
a = 1;
return a;
}
当我用 gdb 调试它时,它总是先分配内存给整数变量,然后是字符数组;不管变量声明的顺序是什么。即在上述两种情况下,编译器首先分配内存a
到b
.
(higher address)
Memory
| |
| |
+--------+
| |
| |
| |
| |
+--------+ <----- b (16 bytes)
| |
+--------+ <----- a (4 bytes)
| |
(lower address)
因此,即使我们在 中提供超过 16 个字符str
,也不会影响a
. 有人可以帮我吗?
谢谢你。