dポイントプレゼントキャンペーン実施中!

お世話になっております。
異常系に関して質問させてください。

想定内のサイズの文字列の処理では問題なく処理されておりますが、異常系のテストを行おうとして、想定外のサイズの文字列を処理しようとすると以下のメッセージが出力されます。

Stack around the variable 'xx' was corrupted

想定外なのでこのメッセージが出力されるのは良いのですが、ビルドを行い EXE を実行すると、return 0 で戻ってくる場合がある為、一見正常終了しているように見える場合があります。

「try {} catch (...) {}」で囲んでみましたが、Stack around は例外では無い為、catch する事ができません。

Stack around が出ないように組む!が正しいのでしょうが、Stack around が出た場合 return 1 で返却する方法はありますでしょうか?

開発環境は Visual C++ 2008 Express になります。
宜しくお願いします。

A 回答 (3件)

    • good
    • 0

ごめん、下記回答的外れだったかも。


異常系でreturn 0で戻ってくるときがある、というのは、
いわゆるバッファオーバーラン攻撃な状態になってて、
プログラム側では検出できないのではないのかな。

Stack around…は、VC++のセキュリティチェック機能で検出されてる例外だと思うので、
http://msdn.microsoft.com/ja-jp/library/cc465512 …
の13.1.1を参照して、独自のセキュリティエラーハンドラを定義して
return 1を返すように実装できると思います。

ただ、繰り返しになりますが、このチェックをすり抜けるケースには、どうやっても対処できないのではないのではないかと。
    • good
    • 0
この回答へのお礼

返信が遅れましてすみません。

>バッファオーバーラン攻撃な状態
まさしくそんな状態です。
リンク先参考にさせていただきます。

それでも全てキャッチできるわけではないのですね。。。
そこも含めて検討いたします。

回答ありがとうございました。

お礼日時:2008/11/21 14:31

どうも、_set_security_error_handlerってのは、VC++2005からは削除されたみたいですね。



http://www.codeproject.com/KB/tips/seccheck.aspx …
のサンプルと、
構造化例外
http://www.ne.jp/asahi/hishidama/home/tech/vcpp/ …
を参考にすれば、やりたいことの一部は実現できそうです。

でも、やはり、
> Stack around が出ないように組む!が正しい
でしょうね。
    • good
    • 0

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