troushoo

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

  1. --/--/--(--) --:--:--|
  2. スポンサー広告

GFlags でページヒープを有効にして、アプリのバッファオーバーフローを検出

GFlags でページヒープをにして、アプリのバッファオーバーフローを検出
概要・まとめ

GFlags で”ページヒープ” を有効にして、アプリのバッファーオーバーフローを検出する方法を紹介します。

内容
使用するツール:GFlags
GFlags を利用すると、高度なトラブルシューティング手法を有効にすることができます。
GFlagsは、Windows SDK に入っているツールで、Microsoft のホームページより無料でダウンロード・使用することができます。
今回は、「Windows 8.1 Preview 用 Windows ソフトウェア開発キット (SDK)」 よりダウンロードしたSDK をインストールして使用しています。
インストール時に、”Debugging Tools for Windows” にチェックが入っていることをご確認ください。
Debugging Tools for Windows のインストール

“ページヒープ”を有効にする手順
GFlags を利用して”ページヒープ” を有効にする手順を紹介します。
1. C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\gflags.exe を起動します。
今回は64bit アプリに対して”ページヒープ” を有効にします。
gflags.exe の起動

2. “Image File” のタブの”Image” にページヒープを有効にするプロセス名を記入し、Tab キーを押します。
GFlags の設定

3. “Enable page heap” にチェックを入れ、”OK” をクリックします。
GFlags の設定

*ページヒープを無効に戻すには、上記1, 2 を実行し、”Enable page heap” のチェックを外します。

ページヒープを有効にすることにより、何がどう変わる?
以下のような、ヒープ領域でバッファオーバーフローを起こすサンプルプログラム(= PageHeapTest.exe) を利用して、ページヒープ有効時・無効時の挙動の違いを見てみます。

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
TCHAR *ptr, *tmp;
int i;


//ヒープ領域を確保

   ptr = (TCHAR*) GlobalAlloc(GMEM_FIXED, 16);
   tmp = ptr;





//データーをヒープ領域に書き込む

for (i = 0; i < 32; ++i)
*(tmp++) = 'a'; //ここでバッファオーバーフローが発生する


//解放

GlobalFree(ptr);
return 0;
}


ページヒープ無効時
ページヒープ無効時に、今回のサンプルプログラム(= PageHeapTest.exe) を実行すると、バッファオーバーフローが発生しているにも関わらず、例外も発生せずに終了してしまいました。
これでは、どこで例外が発生しているか不明のため、アプリのデバッグはできません。
例外なく終了

パージヒープ有効時
ページヒープ有効時に、今回のサンプルプログラム(= PageHeapTest.exe) をWinDbgで実行すると、オーバーフローが発生しているところで、”Access violation”の例外を発生させることができました。
オーバーフローが発生した瞬間に例外発生

このように、ページヒープを有効にすると、オーバーフローが発生した瞬間をとらえることができるようにあり、アプリのデバッグに役に立ちます。

リンク
・Example 12: Using Page Heap Verification to Find a Bug (英語)
今回の記事の元ネタです。
http://msdn.microsoft.com/en-us/library/windows/hardware/ff543097(v=vs.85).aspx


  1. 2013/08/07(水) 23:08:06|
  2. ツール
  3. | トラックバック:0
  4. | コメント:0
<<LiveKd : Windows を起動したまま、しかも矛盾のないカーネルダンプの作成 | ホーム | Visual Studio 2013 のコードエディタの新機能 (2)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/127-e3541381
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (92)
ネットワーク (76)
Visual Studio (56)
SOS・Psscor2/Psscor4 (25)
WinDbg (25)
Linux (23)
Azure (17)
Tips (20)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。