c-默认GCC标志

  • 本文关键字:标志 GCC 默认 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

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

最新更新