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)
所以,即使我们在str
中提供了超过16个字符,也不会影响a
的值。
有人能帮我吗?