我正在编写一个简单的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
答案 0 :(得分:5)
只有两个可以覆盖的选项是-D_FORTIFY_SOURCE
和-fstack-protector
,所以只需要包含-U_FORTIFY_SOURCE
和-fnostack-protector
,它们就会有效“消失”
你无法编译“no architecture”(march
),摆脱mtune
同样毫无意义。 GCC必须为某事构建代码。你已经达到通用的水平了。
-frecord-gcc-switches
,没有它,你不会知道首先包含哪些开关,但如果你真的想摆脱它,只需使用-fnorecord-gcc-switches
。
-f*
options主要是布尔标志,因此您几乎可以通过在前面添加no
来关闭它们,就像我上面所做的那样。
答案 1 :(得分:2)
做一些像
这样的事情gcc -dumpspecs > myspecs.txt
根据需要编辑规范并使用
进行编译gcc -specs=myspecs.txt
答案 2 :(得分:2)
如果您的问题看起来像是您正在使用供应商/发行商提供的gcc,默认情况下已被黑客攻击以启用各种与安全相关的选项。其他答案提供了有关如何撤消更改的提示,但如果您想使用原始的默认gcc,最好自己编译并以非默认表示法安装它,并将其用于实验。