-fno-stack-protector无效

时间:2018-05-30 17:59:54

标签: c buffer-overflow

我编写了以下C程序来查看缓冲区溢出的工作情况。我保存了名为 bo.c

的程序文件
    #include<stdio.h>
    #include<string.h>

    int authentication(char *key)
    {
        int auth=0;
        char pass[10];
        strcpy(pass, key);
        if(strcmp(pass, "hello")==0)
            auth=1; 
        else
            auth=0;
        return auth;
    }

    int main(int argc, char *argv[])
    {
        if(authentication(argv[1]))
        {
            printf("----------------------------------\nACCESS  GRANTED\n---------------------------------");
}
        else
        {
            printf("Access Denied! Wrong password!");
        }
    return 0;
    }   

但我无法看到缓冲区溢出的影响,因为堆栈受到保护。但是当我使用-fno-stack-protector标志编译它时,它显示它是一个无法识别的选项。

enter image description here

这是什么问题?我在使用 gcc 命令时做错了吗?

2 个答案:

答案 0 :(得分:1)

您正在执行该命令,但由于您的配置,它未被识别。

gcc -fno-stack-protector bo.c

我建议重新安装gcc或尝试在另一个Linux发行版中。也可以随时查看the use of -fno-stack-protector上的这篇文章,因为它提供了一些有关它可能被禁用的信息。 (使用Makefile禁用标志的可能配置)

-------- ----------编辑

在进一步研究之后,我建议您查看:-fstack-protector-all-fstack-protector

我正在搞乱你的代码,发现这可能是你正在尝试做的事情,你当前的设置可能允许它。

My CMD Output

答案 1 :(得分:0)

我认为这样的正确命令:

gcc -o bo bo.c -fno-stack-protector