troushoo

スポンサーサイト

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

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

ラストエラーコードが設定された時にデバッガーにブレイクする方法:ntdll!g_dwLastErrorToBreakOn

概要・まとめ

ntdll!g_dwLastErrorToBreakOn を設定すると、ラストエラーコードが設定されたときにデバッガーにブレイクすることができます。これにより、ラストエラーコードが設定された原因がわかります。

内容

ラストエラーコードとは?
Win32 API がエラーで返って来た時、エラーの詳細を調べるにはラストエラーコードを調べます。

例えば、「DeleteFile() が失敗した」という時その失敗した原因を調べる際に、GetLastError 関数を用いてラストエラーコードを調べます。以下がその実装例です。

void MyDeleteFunc(){
if (DeleteFile(_T("C:\\Windows\\System32\\ntdll.dll")) == 0){
//DeleteFile が失敗した
_tprintf(_T("ラストエラーコード : %d\n"), GetLastError());
}
}

上記のコードを実行すると、以下のようになり、ラストエラーコードが”5”であったことがわかります。
ラストエラーコード

ラストエラーコードの”5”は、「アクセスが拒否された」という意味になります。
(エラーコードの一覧は、Microsoft から公開されております。)

よって、DeleteFile が失敗した理由は、「アクセスが拒否された」からという事がわかります。
今回の例では、ntdll.dll を削除する権限がないため、ラストエラーコードの”5”が返されました。

このようにラストエラーコードを確認すると、エラーの詳細がわかります。

ntdll!g_dwLastErrorToBreakOn
ntdll!g_dwLastErrorToBreakOn を設定すると、ラストエラーコードが設定される時に、デバッガーにブレイクさせることができます。
こうすることで、ラストエラーコードが設定されたときの詳細をデバッガーで確認でき便利です。

具体的な手順
以下、ntdll!g_dwLastErrorToBreakOn を設定することで、ラストエラーコードが設定されたときにデバッガーにブレイクする具体的な手順を紹介します。

1. WinDbg で、”File” → “Open Executable” で、ラストエラーコードを”5” を返すアプリを起動します。
Open Executable

2. “.symfix” と”.reload” を実行し、シンボルの設定を行います。
シンボルの設定を行う

2. “ed ntdll!g_dwLastErrorToBreakOn 5” を実行します。
ed ntdll!g_dwLastErrorToBreakOn 5

3. “g” を実行し、アプリを実行させます。
g

4. ラストエラーコードが設定されるときに、WinDbg ブレークされます。
その時のコールスタックを”k” で見てみると、ラストエラーコードが設定された時のコールスタックがわかります。
ラストエラーコードが設定されるときに、WinDbg ブレークされる


情報元
What error?

関連記事
Application Verfier : アプリのトラブルシューティングに使えるツール


  1. 2014/01/25(土) 22:35:38|
  2. WinDbg
  3. | トラックバック:0
  4. | コメント:0
<<Wireshark でHTTP のレスポンス時間の確認方法とその際の注意点 | ホーム | Wireshark で、キャプチャーファイルやパケットにコメントを追加する方法>>

コメント

コメントの投稿


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

トラックバック

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

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

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

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

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

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