对于gcc,是否可以使用-fstack-protector进行编译,但对于特定函数可以省略.

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

void a() {
  ...
}

void b() {
  ...
}

我能告诉编译器编译一个程序,在保存的返回地址a之前使用一个金丝雀,但在b之前不使用金丝雀吗?

推荐答案

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

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

no_sanitize看起来是个有趣的 Select ,我想知道是谁用的.

C++相关问答推荐

常数函数指针优化

ESP32在vTaskDelay上崩溃

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

C-使用指针返回修改后的整数数组

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

1处的解析器错误:yacc语法的语法错误

错误Cygwin_Except::Open_stackdupfile:正在转储堆栈跟踪是什么?

CC2538裸机项目编译但不起作用

用gcc-msse 2编译的C程序包含AVX 1指令

为什么函数是按照定义的顺序执行的,而不是按照从avr-c中的int main()调用的顺序执行的?

如何将另一个数组添加到集合中,特别是字符串?

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

安全倒计时循环

为什么我在C代码中得到一个不完整的类型?

无法识别C编程语言的语法,如书中所示

用于计算位数和的递归C函数

C:面筋蛋白';为什么不刷新窗口?

不兼容的整数到指针转换传递';char';到类型';常量字符*

malloc 属性不带参数

获取 struct 中匿名 struct 的大小