C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: ntdll.dllで例外エラーが発生します


(過去ログ 45 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■24180 / inTopicNo.1)  ntdll.dllで例外エラーが発生します
  
□投稿者/ さんた (12回)-(2008/08/28(Thu) 21:25:23)

分類:[C/C++] 

C++もWinsockも初心者です、よろしくお願いします。

現在、メールを受信するプログラムを作成しているのですが、
ちょっと負荷がかかると例外エラーで強制終了し、イベントビューワーのアプリケーションに
「エラー発生アプリケーション mail.exe、バージョン 0.0.0.0、
 エラー発生モジュール ntdll.dll、バージョン 5.1.2600.2180、エラー発生アドレス 0x0001888f」
と出ていました。

ネットで調べてみるとntdll.dllにはメモリ系の脆弱性があるという情報と、WindowsUpdateで直るとあったのですが、
Windows2003をUpdateしても同様の現象が発生してしまいます。
プログラムはソケット監視を行い、アクセスがあるとスレッドを生成して、
スレッド内でPOP3アクセスを行い、受信したメールをODBCで登録するマルチスレッドプログラムです。

件数が少ないときは良いのですが、50件程度のメールを2度3度と受信していると上記エラーが発生してしまいます。
環境はWindowsXPとWindows2003でC++はGCC3.4.5でコンパイルしています。
使用しているソケットはwinsock2.0を指定しています。

回避策や代替案などありましたら、教えてください。
よろしくお願いします。
引用返信 編集キー/
■24181 / inTopicNo.2)  Re[1]: ntdll.dllで例外エラーが発生します
□投稿者/ れい (759回)-(2008/08/28(Thu) 21:58:23)
No24180 (さんた さん) に返信
> 件数が少ないときは良いのですが、50件程度のメールを2度3度と受信していると上記エラーが発生してしまいます。
> 環境はWindowsXPとWindows2003でC++はGCC3.4.5でコンパイルしています。
> 使用しているソケットはwinsock2.0を指定しています。
>
> 回避策や代替案などありましたら、教えてください。
> よろしくお願いします。

示された情報だけだとなんとも言えません。

スレッドとかソケット周りでおかしなことをしていて
おかしなパラメーターでAPIを読んでるのではないか、と疑います。

ntdllがオカシイ可能性もありますが。

例外がおきる最小コードを示すとよいかと。
引用返信 編集キー/
■24182 / inTopicNo.3)  Re[1]: ntdll.dllで例外エラーが発生します
□投稿者/ NyaRuRu (60回)-(2008/08/28(Thu) 23:11:55)
No24180 (さんた さん) に返信
> 「エラー発生アプリケーション mail.exe、バージョン 0.0.0.0、
>  エラー発生モジュール ntdll.dll、バージョン 5.1.2600.2180、エラー発生アドレス 0x0001888f」
> と出ていました。

この部分だけを読めば ntdll.dll が何かの問題を持っているような気がしてくるかもしれませんが,実際には ntdll.dll の動作は正常という場合もあります.
現時点で ntdll.dll 絡みのエラーを疑いすぎるのはおすすめできません.

>回避策や代替案などありましたら、教えてください。

一例として,読み込み不能なメモリアドレス addr を ntdll.dll の関数に渡した場合を考えます.
この場合,不正なポインタへのアクセスは ntdll.dll の関数内で発生することになります.
問題はそんな不正なアドレスを渡した呼び出し側にあるのですが,例外が起きるのは実際にメモリアクセスを行ったときなので,例外発生箇所は ntdll.dll となります.このときの正しい対処は,不正なアドレスを渡している箇所を探して,それを修正する,です.

もちろん実際には他の原因でエラーが発生しているケースも考えられます.いまはまだ原因が分からないという状況だと思います.
引用返信 編集キー/
■24191 / inTopicNo.4)  Re[2]: ntdll.dllで例外エラーが発生します
□投稿者/ さんた (13回)-(2008/08/29(Fri) 09:25:00)
れい さん
NyaRuRu さん
ご返信ありがとうございます。

ntdll.dllに脆弱性があると見て以来、思考が固まっていたようです。

>おかしなパラメーターでAPIを読んでるのではないか

>一例として,読み込み不能なメモリアドレス addr を ntdll.dll の関数に渡した場合を考えます.

そうですね、処理容量が小さいときはたまたま動いているだけの可能性もありますし、
まずはntdll.dllとは何者で、どの処理を実行したときに呼ばれるのかから追っていきます。
ありがとうございます。
引用返信 編集キー/
■24201 / inTopicNo.5)  Re[3]: ntdll.dllで例外エラーが発生します
□投稿者/ シャノン (596回)-(2008/08/29(Fri) 10:42:54)
No24191 (さんた さん) に返信
> まずはntdll.dllとは何者で、どの処理を実行したときに呼ばれるのかから追っていきます。

ntdll というのは Windows の中核モジュールの一つで、Windows API から間接的に呼ばれます。
かなりの数の API が最終的に ntdll を何らかの形で呼ぶので、総当たりだと大変な時間がかかりそうです。
GCC でのデバッグ手法は知りませんが、エラー発生時のスタックトレースから原因個所を特定できないでしょうか。
引用返信 編集キー/
■24324 / inTopicNo.6)  Re[4]: ntdll.dllで例外エラーが発生します
□投稿者/ さんた (15回)-(2008/09/01(Mon) 16:22:59)
No24201 (シャノン さん) に返信
>
> ntdll というのは Windows の中核モジュールの一つで、Windows API から間接的に呼ばれます。
> かなりの数の API が最終的に ntdll を何らかの形で呼ぶので、総当たりだと大変な時間がかかりそうです。
> GCC でのデバッグ手法は知りませんが、エラー発生時のスタックトレースから原因個所を特定できないでしょうか。

返答ありがとうございます。
ntdllがどんな物か大体わかりましたが、シャノンさんのおっしゃるとおり当たりの付けようが無いというのが、正直な感想です。
とりあえず、怪しそうなODBC使用箇所とソケット使用箇所を重点的に見直してみます。
引用返信 編集キー/
■24351 / inTopicNo.7)  Re[5]: ntdll.dllで例外エラーが発生します
□投稿者/ さんた (16回)-(2008/09/02(Tue) 10:02:18)
回答してくださいました皆様、本当にありがとうございました。
色々と修正・改変を行っているうちに該当のエラーがでなくなりました。
どうやら、どこかでメモリアクセス違反を犯し、それがntdllでクラッシュしていた原因のようです。
ntdllの不具合報告を見つけてから、焦点がそっちにうつってしまい視野狭窄になっていたようです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -