为什么我不能禁用堆栈保护?

时间:2016-01-06 09:44:01

标签: c buffer buffer-overflow exploit

我目前使用的操作系统是64位Ubuntu 14.04,其gcc版本为4.8.4。

我写了一个如下所示的简单程序来做一些与缓冲区溢出有关的测试,不知怎的,我发现我无法正确溢出本地字符串。

/*test.c*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int bof(char *str)
{
    char buffer[4];
    strcpy(buffer, str);
    return 1;
}

int main()
{
    char str[]="123456789012345'; 

    /* This is the maximum length the string
     can be, which is 16 bytes including the null character at the end, and 
    any strings that are longer than this would result in a segmentation fault */

    bof(str);
}

该程序是使用命令

编译的
gcc -o test -fno-stack-protector test.c

因此应该禁用堆栈保护。

根据我的观察,任何长度小于或等于16个字符的字符串(包括空字符)都可以;否则,会导致分段错误。

任何想法为什么以及如何让它发挥作用?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用GNU Debug查找距离,这是一个教程http://www.cs.umd.edu/~srhuang/teaching/cmsc212/gdb-tutorial-handout.pdf