首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何启用/禁用canary?

如何启用/禁用canary?
EN

Stack Overflow用户
提问于 2021-04-07 04:36:23
回答 1查看 282关注 0票数 0

How to turn off gcc compiler optimization to enable buffer overflow

我看到像gcc vuln.c -o vuln_disable_canary -fno-stack-protector这样的命令是用来禁用canary的。

我尝试了下面的例子,香草的gcc命令生成一个没有金丝雀的文件。

有人知道如何禁用/启用金丝雀吗?

代码语言:javascript
复制
$ cat helloworld.c
#include <stdio.h>
int main() {
    puts("Hello World!");
}
$ gcc helloworld.c
$ gcc helloworld.c -o no_canary.out -fno-stack-protector
$ rabin2 -I a.out | grep canary
canary   false
$ rabin2 -I no_canary.out | grep canary
canary   false

顺便说一下,金丝雀这个名字是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 07:51:55

显然,它在您的平台上是默认禁用的;当从源代码构建gcc时,这个行为是可配置的,这就是您的操作系统或打包人员选择做的事情。使用-fstack-protector启用它(如果您的平台完全支持它的话)。

有关gcc的堆栈金丝雀系统如何工作的更多信息,请参阅Stack smashing detected

在普通英语中,canary是一种用来探测矿井中有毒气体的鸟。这些鸟比人类对这些气体更敏感,所以如果鸟死了,这可以在矿工还有时间疏散的时候提醒矿工危险。类比的是,堆栈上的值就像金丝雀:如果它“死亡”(被覆盖),那么程序可以在利用漏洞之前“撤离”(中止)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66976137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档