1

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

3 回答 3

5

那里唯一可以覆盖的两个选项是-D_FORTIFY_SOURCEand -fstack-protector,因此只需包含-U_FORTIFY_SOURCEand -fnostack-protector,它们实际上已经“消失”了。

您不能为“无架构”(march)进行编译,并且摆脱mtune同样没有意义。GCC 必须为某些东西构建代码。你已经尽可能地通用了。

-frecord-gcc-switches,好吧,如果没有它,您首先不会知道包含哪些开关,但是如果您真的想摆脱它,只需使用-fnorecord-gcc-switches.

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

于 2012-09-07T02:08:35.097 回答
2

做类似的事情怎么样

gcc -dumpspecs > myspecs.txt

根据需要编辑规范并编译

gcc -specs=myspecs.txt
于 2012-09-07T02:05:55.923 回答
2

如果看起来您的问题是您使用的是供应商/发行版提供的 gcc,该 gcc 已被黑客入侵以默认打开各种与安全相关的选项。其他答案有关于如何撤消更改的提示,但是如果您想使用原始的默认 gcc,最好​​自己编译并以非默认符号安装它,并将其用于您的实验。

于 2012-09-07T02:18:34.650 回答