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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.24180 の関連記事表示

<< 0 >>
■24180  ntdll.dllで例外エラーが発生します
□投稿者/ さんた -(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を指定しています。

    回避策や代替案などありましたら、教えてください。
    よろしくお願いします。
親記事 /過去ログ45より / 関連記事表示
削除チェック/

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

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

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

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

    例外がおきる最小コードを示すとよいかと。
記事No.24180 のレス /過去ログ45より / 関連記事表示
削除チェック/

■24182  Re[1]: ntdll.dllで例外エラーが発生します
□投稿者/ NyaRuRu -(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 となります.このときの正しい対処は,不正なアドレスを渡している箇所を探して,それを修正する,です.

    もちろん実際には他の原因でエラーが発生しているケースも考えられます.いまはまだ原因が分からないという状況だと思います.
記事No.24180 のレス /過去ログ45より / 関連記事表示
削除チェック/

■24191  Re[2]: ntdll.dllで例外エラーが発生します
□投稿者/ さんた -(2008/08/29(Fri) 09:25:00)
    れい さん
    NyaRuRu さん
    ご返信ありがとうございます。

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

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

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

    そうですね、処理容量が小さいときはたまたま動いているだけの可能性もありますし、
    まずはntdll.dllとは何者で、どの処理を実行したときに呼ばれるのかから追っていきます。
    ありがとうございます。
記事No.24180 のレス /過去ログ45より / 関連記事表示
削除チェック/

■24201  Re[3]: ntdll.dllで例外エラーが発生します
□投稿者/ シャノン -(2008/08/29(Fri) 10:42:54)
    No24191 (さんた さん) に返信
    > まずはntdll.dllとは何者で、どの処理を実行したときに呼ばれるのかから追っていきます。

    ntdll というのは Windows の中核モジュールの一つで、Windows API から間接的に呼ばれます。
    かなりの数の API が最終的に ntdll を何らかの形で呼ぶので、総当たりだと大変な時間がかかりそうです。
    GCC でのデバッグ手法は知りませんが、エラー発生時のスタックトレースから原因個所を特定できないでしょうか。
記事No.24180 のレス /過去ログ45より / 関連記事表示
削除チェック/

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

    返答ありがとうございます。
    ntdllがどんな物か大体わかりましたが、シャノンさんのおっしゃるとおり当たりの付けようが無いというのが、正直な感想です。
    とりあえず、怪しそうなODBC使用箇所とソケット使用箇所を重点的に見直してみます。
記事No.24180 のレス /過去ログ45より / 関連記事表示
削除チェック/

■24351  Re[5]: ntdll.dllで例外エラーが発生します
□投稿者/ さんた -(2008/09/02(Tue) 10:02:18)
    回答してくださいました皆様、本当にありがとうございました。
    色々と修正・改変を行っているうちに該当のエラーがでなくなりました。
    どうやら、どこかでメモリアクセス違反を犯し、それがntdllでクラッシュしていた原因のようです。
    ntdllの不具合報告を見つけてから、焦点がそっちにうつってしまい視野狭窄になっていたようです。
記事No.24180 のレス / END /過去ログ45より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -