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

时间:2015-03-26 06:39:15

标签: c

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

我做了

$ gcc -o convert -g convert

然后运行

$ readelf -l convert

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

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

2 个答案:

答案 0 :(得分:2)

使堆栈可执行的正确方法不需要禁用堆栈金丝雀,这与公认的答案不同。

这是正确的方法:

gcc -z execstack ...

这是将-z的{​​{1}}选项传递给链接器[source]:

  

关键字

     

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

来自gcc [source]:

  

execstack

     

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

答案 1 :(得分:0)

-fno-stack-protector应该为你做到这一点。