c - 如何为特定功能禁用堆栈金丝雀?

标签 c gcc

使用 gcc,是否可以使用 -fstack-protector 进行编译,但忽略特定功能。

例如,假设我有两个函数。

void a() {
  ...
}

void b() {
  ...
}

我可以告诉编译器编译一个程序,该程序将在 a 的已保存返回地址之前使用金丝雀,但 b 没有金丝雀吗?

最佳答案

您必须测试它是否有效(在 Godbolt 检查生成的代码)但看起来您可以这样做,例如:

__attribute__ ((no_stack_protector)) void foo () { ... }

no_sanitize 看起来是个有趣的选项,我想知道是谁在使用它。

关于c - 如何为特定功能禁用堆栈金丝雀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71904896/

相关文章:

c - 在 C 中初始化循环数据。这个有效的 C 代码是否符合任何标准?

C拼图: how will you print something on console?

c - 通过引用和指针传递

C程序字符串

windows - Cygwin-x64 上的 "CPU you selected does not support x86-64 instruction set"错误

c++ - 交叉编译 GCC : Link tests are not allowed after GCC_NO_EXECUTABLES when checking dynamic linker characteristics

c++ - gcc 的任何标签来编译包含 C 3rd 方头文件的 Cpp 文件

c - Bison/Lex 在 x86 上出现段错误但在 arm 上运行

c - 如何重用 HBITMAP 句柄?

c++ - 一个 friend 的缩写模板函数——clang和gcc的区别