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

オーバーライドする意味のある2つのオプションは、-D_FORTIFY_SOURCEとだけなので、とを-fstack-protector含めるだけで、事実上「なくなり」ます。-U_FORTIFY_SOURCE-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 を使用する場合は、独自のものをコンパイルしてデフォルト以外の表記でインストールし、実験に使用することをお勧めします。

于 2012-09-07T02:18:34.650 に答える