我正在写一个简单的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)
只有两种选择可以覆盖是-D_FORTIFY_SOURCE和-fstack-protector,所以只是包括-U_FORTIFY_SOURCE和-fnostack-protector,它们实际上"消失了".
你不能编译为"no architecture"(march),并且摆脱mtune同样毫无意义.GCC必须为某些东西构建代码.你已经达到通用的水平了.
-frecord-gcc-switches好吧,没有它,你不会知道首先包含哪些开关,但如果你真的想要摆脱它,那就用吧-fnorecord-gcc-switches.
-f*选项主要是布尔标志,因此您几乎可以通过no在前面添加来关闭它们,就像我上面所做的那样.