我正在编写一个简单的C程序,我应该用缓冲区溢出来攻击它。所以,我不希望在编译时使用任何标志。如何避免使用默认标志?
# readelf -p .GCC.command.line stack
String dump of section '.GCC.command.line':
[ 0] stack.c
[ 8] -D_FORTIFY_SOURCE=2
[ 1c] -mtune=generic
[ 2b] -march=i486
[ 37] -frecord-gcc-switches
[ 4d] -fstack-protector
只有-D_FORTIFY_SOURCE
和-fstack-protector
两个选项可以覆盖,所以只包括-U_FORTIFY_SOURCE
和-fnostack-protector
,它们实际上已经"消失"了。
你不能为"无体系结构"(march
)编译,去掉mtune
同样没有意义。GCC必须为某些构建代码。你已经尽你所能做到了。
-frecord-gcc-switches
,好吧,如果没有它,你一开始就不知道包含了什么交换机,但如果你真的想去掉它,只需使用-fnorecord-gcc-switches
。
-f*
选项大多是布尔标志,所以您几乎可以像上面所做的那样,通过在前面添加no
来关闭它们。
做一些类似的事情怎么样
gcc -dumpspecs > myspecs.txt
根据需要编辑规格并使用进行编译
gcc -specs=myspecs.txt
如果您的问题似乎是使用了一个被黑客入侵的供应商/发行版提供的gcc,默认情况下会打开各种与安全相关的选项。其他答案有关于如何撤消更改的提示,但如果你想使用原始的默认gcc,最好编译自己的代码,并以非默认的表示法安装它,并将其用于实验。