如何为特定功能禁用堆栈金丝雀?
How to disable stack canaries for specific functions?
使用gcc
,是否可以使用-fstack-protector
编译,但针对特定功能省略。
例如,假设我有两个函数。
void a() {
...
}
void b() {
...
}
我能否告诉编译器编译一个程序,该程序将在 a
的已保存 return 地址之前使用金丝雀,但 b
没有金丝雀?
您必须测试它是否有效(在 Godbolt 检查生成的代码)但看起来您可以这样做,例如:
__attribute__ ((no_stack_protector)) void foo () { ... }
no_sanitize
看起来是一个有趣的选项,我想知道谁在使用它。
使用gcc
,是否可以使用-fstack-protector
编译,但针对特定功能省略。
例如,假设我有两个函数。
void a() {
...
}
void b() {
...
}
我能否告诉编译器编译一个程序,该程序将在 a
的已保存 return 地址之前使用金丝雀,但 b
没有金丝雀?
您必须测试它是否有效(在 Godbolt 检查生成的代码)但看起来您可以这样做,例如:
__attribute__ ((no_stack_protector)) void foo () { ... }
no_sanitize
看起来是一个有趣的选项,我想知道谁在使用它。