home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

C言語系/memos/VC++/12, フレームポインタ省略(FPO)と"Oy"オプション

C言語系/memos/VC++/12, フレームポインタ省略(FPO)と"Oy"オプション

C言語系 / memos / VC++ / 12, フレームポインタ省略(FPO)と"Oy"オプション
id: 915 所有者: msakamoto-sf    作成日: 2011-02-01 16:40:33
カテゴリ: C言語 Windows セキュリティ 

VC++では "/Oy" オプションによりフレームポインタを省略("FPO" : Frame Pointer Omission)する最適化を利用できます。
ちなみに、"FPO"の最後の"O"は省略(Omission)を表します。ですので、「最適化」まで付けると

FPOO : Frame Pointer Omission Optimization

になっちゃいます。かわいいですね。

この最適化なんですが、Windows開発チームはXP(SP2)以降は無効にしているようです。
FPOを有効にすると、PDBファイルのシンボル情報が無いとスタックトレース情報を復元できず、アセンブラレベルでのデバッグに支障が出る恐れがあります。
またマシンスペック向上のおかげで、FPOの有無は殆ど速度に影響を与えないそうです。

"Responder"という逆解析ソフトを使うとFPO有効な関数でもスタック上のデータを解析できるようなので、逆解析を難しくするという効果も低くなります。

以上のような事情で、少なくとも最近のWindows開発においては、FPOによる最適化はあまり人気が無いようです。

参考:

Advanced Windows Debugging, Chapter 2, p74:

This section (and the remainder of the book), ignores frame pointer omission (FPO) optimization,
simply because it is not used in Windows XP SP2 and later operating system.
Since FPO optimization makes debugging nearly impossible without symbols,
the current recommendation is to avoid it completely.


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2011-02-01 17:12:27
md5:465961025c0c65c21825aab3f18baf5a
sha1:c49bc9dd811559ea3d8169b7b932cce0d797c48f
コメント
コメントを投稿するにはログインして下さい。