我正在开展一个学校项目,基本上我们正在尝试了解堆栈溢出。我正在处理的一些示例代码基本上是:(已修剪)
char test[10];
int i;
for (i=0;i < 10000;i++) {
test[i] = 'a';
}
当我使用gcc编译它时,一切都运行良好和花花公子。 Gcc自动保护堆栈,永远不会让它溢出。现在,如果我尝试使用gcc -fno-stack-protector ....完全相同的程序运行。我甚至在汇编文件(-S选项)上做了差异,它们是相同的。是什么赋予了?我搜索了手册页,并没有提到-fno-stack选项...在线的所有内容都指向-fno-stack-protector选项,但我根本无法重新创建任何东西......
提前感谢您的帮助。 :)
答案 0 :(得分:3)
.L2:
cmpl $9999, -36(%rbp)
jle .L3
movq -8(%rbp), %rdx
xorq %fs:40, %rdx
je .L5
call __stack_chk_fail
这
int test() {
char test[10];
int i;
for (i=0;i < 10000;i++) {
test[i] = 'a';
}
}