c - gcc -fno-stack-protector 选项

标签 c gcc stack stack-overflow

我正在开展一个学校项目,基本上我们正在尝试了解堆栈溢出。我正在处理的一些示例代码基本上是:(精简)

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/

相关文章:

C 程序因大型数组而崩溃

Objective-C++ 中的 C++ 堆栈

ruby-on-rails - ruby rails : suggested gems/development stack

c++ - `x^=y^=x^=y;` 在 C/C++ 中交换整数是否正确?

c - C 中的奇怪行为

c - 错误 : called object is not a function or function pointer

typedef (timer_t) 的冲突类型错误

c++ - 为什么一些 GCC 警告标志不属于 C++ 语言但在 C++ 中工作?

c - 将函数参数加载到堆栈上,然后在 C 中运行该函数

c - 将字符串写入初始化的空白字符数组