默认GCC标志

时间:2012-09-07 01:59:58

标签: c gcc

我正在编写一个简单的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

3 个答案:

答案 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,最好​​自己编译并以非默认表示法安装它,并将其用于实验。