tor*_*orr 3 c stack buffer-overflow
我正在关注"粉碎堆栈以获得乐趣和利润" http://insecure.org/stf/smashstack.html.
我想知道为什么我的代码工作,虽然我写它来产生分段错误.
#include <stdio.h>
#include <string.h>
void function(char *str){
char buffer[16];
strcpy(buffer, str);
}
int main(void)
{
char large_string[256];
int i;
for(i = 0; i < 255; i++)
large_string[i];
function(large_string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这只是因为你large_string没有正确初始化它:它包含垃圾,它的长度(直到字节数'\0')最可能远小于256(例如在我的机器上,第四个字节large_string为零,所以strcpy只复制4个字节).
做了
for(i = 0; i < 254; i++)
large_string[i] = 'A';
large_string[255] = '\0';
Run Code Online (Sandbox Code Playgroud)
你会得到分段错误.