プロが教える店舗&オフィスのセキュリティ対策術

OS:WindowsXP
コンパイラ: MinGW gcc 3.3.3

gccで、スタックオーバーフローの検出を行いたいと思っています。
gcc -v --helpで見ると

> -fstack-check Insert stack checking code into the program

と書かれているので、そのように指定して、無限に自分を呼び続ける再帰のプログラムを走らせてみました。

gcc -fstack-check testS2.c

 ですが、オプションを指定しない時と同じように突然何の前触れもなく終了してしまいます。
 このオプションはスタックを使い切るかどうかをチェックするオプションではないのでしょうか。
 よろしくお願いいたします。

A 回答 (2件)

ソースコードを静的に解析してスタックオーバーフローを事前に検知するオプションではなく


生成するプログラムにスタックオーバーフローを検知するプログラムを紛れ込ませて
もし、スタックオーバーフローが起きたらプログラムを強制終了するというオプションだと思いますよ。

> Insert stack checking code into the program
説明として書いてありますしね。

WEB上から拾ってきた文献から察するに、マルチスレッド環境でスタックオーバーフローが
起きた際に正常にプログラムを強制終了させるためのオプションのようです。
シングルスレッドの場合はシステムが強制終了してくれるのでこのオプションをつける必要はないとも書いてありますね。
http://uw713doc.sco.com/cgi-bin/info2html?(gcc)C …

コンパイラに実装されているオーバーフロー関連のチェック機能は
仮にオーバーフローが起こっても安全にプログラムを終了させるような
プログラムコードをコンパイル時に追加する手法が多いです。
(オーバーフローが起こったままプログラムが動作するのはとても危険です。
まじめに検知したいなら静的解析の専門ツール探した方が良いと思いますよ。

Splint
http://lclint.cs.virginia.edu/
    • good
    • 0
この回答へのお礼

ありがとうございます。
説明が悪くて申し訳ありませんでした。
実際にコンパイルして実行しているのですが、そのときにオプションをつけてもつけなくても同じ結果だった、という意味でした。
ご回答からその理由がシングルスレッドだからだということがわかりました。(もっとも、メッセージの一つも出してほしい気はしますが、、これではスタックオーバーフローだから終了したかどうかわからないので。。)

どうもありがとうございました。

お礼日時:2008/12/23 18:37

何の例外をキャッチするようにしてます?

この回答への補足

書き忘れました。
Cで書いています。

補足日時:2008/12/23 18:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!