我正在关注“为了乐趣和利润而粉碎堆栈”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/

10-09 09:17