标签: c
有没有办法通过编译使C程序的堆栈可执行?
我做了
$ gcc -o convert -g convert
然后运行
$ readelf -l convert
检查堆栈是否可执行但输出是否为:
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
答案 0 :(得分:2)
使堆栈可执行的正确方法不需要禁用堆栈金丝雀,这与公认的答案不同。
这是正确的方法:
gcc -z execstack ...
这是将-z的{{1}}选项传递给链接器[source]:
-z
关键字 -z与关键字关键字直接传递给链接器。请参阅链接器文档中的“允许”部分。 值及其含义。
关键字
-z与关键字关键字直接传递给链接器。请参阅链接器文档中的“允许”部分。 值及其含义。
来自gcc [source]:
gcc
execstack 将对象标记为需要可执行堆栈。
execstack
将对象标记为需要可执行堆栈。
答案 1 :(得分:0)
-fno-stack-protector应该为你做到这一点。
-fno-stack-protector