我编写了以下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标志编译它时,它显示它是一个无法识别的选项。
这是什么问题?我在使用 gcc 命令时做错了吗?
答案 0 :(得分:1)
您正在执行该命令,但由于您的配置,它未被识别。
gcc -fno-stack-protector bo.c
我建议重新安装gcc或尝试在另一个Linux发行版中。也可以随时查看the use of -fno-stack-protector上的这篇文章,因为它提供了一些有关它可能被禁用的信息。 (使用Makefile禁用标志的可能配置)
-------- ----------编辑
在进一步研究之后,我建议您查看:-fstack-protector-all
或-fstack-protector
我正在搞乱你的代码,发现这可能是你正在尝试做的事情,你当前的设置可能允许它。
答案 1 :(得分:0)
我认为这样的正确命令:
gcc -o bo bo.c -fno-stack-protector