我正在关注“为了乐趣和利润而粉碎堆栈”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;
}
最佳答案
这只是因为您的large_string
没有正确初始化:它包含垃圾,并且它的长度(直到'\0'
的字节数)很可能远小于256(例如,在我的机器上,large_string
的第四个字节为零,所以strcpy
只复制4个字节)。
成功
for(i = 0; i < 254; i++)
large_string[i] = 'A';
large_string[255] = '\0';
你会得到分割错误。
关于c - 粉碎堆栈:为什么此代码有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17639850/