我正在开展一个学校项目,基本上我们正在尝试了解堆栈溢出。我正在处理的一些示例代码基本上是:(精简)
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 选项,但我根本无法重新创建任何内容...
预先感谢您的帮助。 :)
最佳答案
你确定吗?我的给出(当且仅当堆栈防护未禁用):
.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';
}
}
关于c - gcc -fno-stack-protector 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9580383/