繁体   English   中英

如何使C程序的堆栈可执行?

[英]How to make the stack of a C program executable?

有没有办法通过编译使C程序的堆栈可执行?

我做到了

$ gcc -o convert -g convert

然后跑

$ readelf -l convert

检查堆栈是否可执行但输出是:

GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4

使堆栈可执行的正确方法不需要禁用堆栈canaries,这与接受的答案建议不同。

这是正确的方法:

gcc -z execstack ...

这样做, gcc-z选项被传递给链接器[ source ]:

关键词

-z与关键字关键字一起直接传递给链接器。 有关允许的值及其含义,请参阅链接器文档中的部分。

来自man ld [ 来源 ]:

execstack

将对象标记为需要可执行堆栈。

-fno-stack-protector应该为你做的伎俩。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM