我发现为防止缓冲区溢出,我可以使用该指令(gcc -fstack-protector -S XXX.c
)。
例如,我有一个名为test.c
的文件,并且该文件有缓冲区溢出(例如char buf[10];
但我想要strcpy(buf,"HelloUnixAndLinux")
)
在那种情况下
$gcc -fstack-protector -S test.c
$cat test.s
将检查缓冲区并告诉我打印出长显示内容,包括stack_chk_fail
。
我想了解这些说明,但没有任何解释。 (我刚刚在互联网上找到了这种方式而没有任何影响)
我想知道
这些选项总是会自动阻止缓冲区溢出?
(例如,如果某些功能可能导致缓冲区溢出,则自动不处理strcpy
等)
有没有办法检查我的GCC是否提供了检查堆栈粉碎的工具?我的是GCC 4.4.6 Red Hat 4.4.6-4。
有没有办法在./a.out
之后显示有关缓冲区溢出的警告?