gpt4 book ai didi

c - gcc 金丝雀 : undefined reference to __stack_chk_guard

转载 作者:太空狗 更新时间:2023-10-29 17:08:43 29 4
gpt4 key购买 nike

我正在尝试启用 gcc 的金丝雀生成,但我得到了对 __stack_chk_guard 的 undefined reference 。

来自 gcc 的 man about canary :

-mstack-protector-guard=guard
Generate stack protection code using canary at guard. Supported locations are global for
global canary or tls for per-thread canary in the TLS block (the default). This option
has effect only when -fstack-protector or -fstack-protector-all is specified.

These -m switches are supported in addition to the above on x86-64 processors in 64-bit
environments.

我已经完成了这个测试程序:

#define VALUE 2048
int main()
{
char arr[VALUE];
int i;

for (i = 0; i < VALUE + 15; i++) // "i < VALUE + 15" is to test if canaries works but the code doesn't compile anymore with "i < 10"
arr[i] = '0';
return 0;
}

正如 gcc 的 man 所说,我的编译行是:

gcc main.c -fstack-protector-all -mstack-protector-guard=global

但是我得到以下错误:

/tmp/ccXxxxVd.o: In function `main':
main.c:(.text+0xe): undefined reference to `__stack_chk_guard'
main.c:(.text+0x51): undefined reference to `__stack_chk_guard'
collect2: error: ld returned 1 exit status

我怎样才能消除这个错误?

编辑:

  • 操作系统:ubuntu 14.10 utopic
  • 架构:x86-64
  • 环境:64 位

最佳答案

看来 -mstack-protector-guard 选项只是为了向后兼容堆栈保护器过去的工作方式。过去,金丝雀位于全局变量中。后来它被切换到 TLS。您使用的操作系统/libc 似乎已删除或从未支持全局变量 canary,因此只有 TLS 有效。

不要触摸 -mstack-protector-guard 选项,一切都会正常。当您使用 -fstack-protector-all 时,默认值应该没问题。

关于c - gcc 金丝雀 : undefined reference to __stack_chk_guard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27290086/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com