下一步,我决定使用-fno-fstack-protector选项来取消这个栈溢出检测功能。我对同样的代码编译之后运行,使用和之前一样输入,下面是我的做法以及运行结果:
$ gcc -Wall -fno-stack-protector stacksmash.c -o stacksmash
$ ./stacksmash
Enter the name
TheGeekStuff
len = [26214]
len of string entered is : [12]
可以看到,一旦使用了这个编译选项(根据前面的编译选项说明,这里-fstack-protector是不会默认开启的),使用相同的输入,运行环境根本无法检测到缓冲区溢出的问题,len的值已经被破坏了。
当然,如果你对gcc很陌生,你也应该理解我们之前讨论过的最常用的gcc编译选项。