默认GCC标志

jjj*_*jjj 1 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
Run Code Online (Sandbox Code Playgroud)

Nic*_*ght 5

只有两种选择可以覆盖是-D_FORTIFY_SOURCE-fstack-protector,所以只是包括-U_FORTIFY_SOURCE-fnostack-protector,它们实际上"消失了".

你不能编译为"no architecture"(march),并且摆脱mtune同样毫无意义.GCC必须为某些东西构建代码.你已经达到通用的水平了.

-frecord-gcc-switches好吧,没有它,你不会知道首先包含哪些开关,但如果你真的想要摆脱它,那就用吧-fnorecord-gcc-switches.

-f*选项主要是布尔标志,因此您几乎可以通过no在前面添加来关闭它们,就像我上面所做的那样.