none
VS2019 C++コンソールアプリでデバッグ実行するとntdll.dllで一般保護例外が発生する RRS feed

  • 質問

  • VS2019のC++でコンソールアプリを新規作成すると、「Hello world.」を出力する雛形が作成されます。

    これを何も変更せずにそのままデバッグ実行すると、「Hello world.」が表示された直後にntdll.dllで一般保護例外が発生します。

    環境は、Windows 7 32bit です。

    いろいろ試した結果、[ツール]-[オプション]-[デバッグ]にある、「デバッグの停止時に自動的にコンソールを閉じる」にチェックを入れると例外は発生しなくなりました。

    このチェックを入れることに特に問題はないので(main関数終了時にsystem("pause")を呼び出せばそこでコンソールは閉じずに残るので)不自由はないのですが、このチェックを外しても動くようにするのが本来だと思うので、報告させていただきました。

    なお、Windows10 64bit環境でも試してみましたが、こちらではチェックを外しても例外は発生しませんでした。

    以上

    2019年6月4日 1:32

回答

  • > どういう手法なのでしょう?

    私が自分でデバッグ トレースして詳細に調べたのでは無いので、すべてをきちんと把握している訳ではないですが、このログを見る限りインジェクションされたトレンドマイクロ DLL は、自身のため専用の システム DLL を二重にロードしているようです。
    例えば今回のログから、PSAPI.DLL, SHLWAPI.dll, KERNEL32.dll, ADVAPI32.dll の3つの DLL を独自にロードおよび管理している形跡が読み取れます。
    なんでそんなことをするのかというと、恐らく自分以外の「第三者」が仕込んだ API Hook の影響を排除するためと考えられます。
    例えば。。。
    マルウェアが CreateFile() や ReadFile(), WriteFile() 等の API に Hook を仕掛けていたとして、セキュリティ ソフトの DLL がそれら API を「そのまま」使うと、マルウェアの影響を受けてしまう。。。。つまり正しいセキュリティ監視が出来ないことになってしまう。
    だからセキュリティ ソフトは、個々のユーザー モード プロセス空間の空き領域にそれら システム DLL を独自にロード (正確にはマップ。。。かな) させ、自身の DLL が使うそれら API コールはすべてそっちを使うように IAT も書き換える。
    これによって、セキュリティ ソフトは「第三者」が仕込んだ API Hook の影響を排除することができる。
    さらにこの Hook は、プロローグ コードの書き換えではなく IAT の書き換えと Code Injection をベースにしているので、恐らくマルウェア側からも見えにくいはず。
    いずれにせよ TmUmEvt.dll はかなり手の込んだ方法で、API Hook をしているようです。
    (それにしても灯台下暗し。。。目から鱗。。。)


    > それと、FreeLibraryする方法はだめでした。

    そうでしょうね。
    こんな手の込んだことしているセキュリティ ソフトが、あんなお手軽コードですり抜けられる訳がありませんね。wwww

    > 一応ダンプは保存したので、WinDBGで見ることは可能です。

    これ以上は、ユーザー モード ダンプを見ても、あんまり意味がないかも。
    (個人的には、そのダンプ欲しいけど。www)
    カーネル モード デバッグできっちりトレースしないと、具体的な挙動は把握できないと思います。

    > トレンドマイクロDLLの影響にはほぼ間違いなさそうですが、
    > それを回避するようなデバッグができるようにVisual Studio側で
    > なんとかできないのでしょうかね?
    それを私に聞かれも。。。
    とりあえず「デバッグの停止時に自動的にコンソールを閉じる」の設定で回避するしかないと思います。
    そもそもこの問題の原因は、マイクロソフトとトレンドマイクロのどっちが悪いのか、白黒つけるのが難しいと思いますし。

    という訳で、私が手伝えるのはここまで。
    • 回答としてマーク pine 2019年6月19日 6:23
    2019年6月19日 5:56

すべての返信

  • pineさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    詳細な状況をご提供いただきありがとうございます。その後のご状況いかがでしょうか。
    追加でご確認いただいたことなどあれば、追記いただくことで回答がつきやすくなります。
    また、英語とはなりますが米国のフォーラム(Developer Community: https://developercommunity.visualstudio.com/spaces/62/index.html)に投稿いただくこともご検討ください。
    私共でもご案内できる情報がないか確認いたします。

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    • 回答としてマーク pine 2019年6月11日 2:04
    • 回答としてマークされていない pine 2019年6月12日 7:40
    2019年6月10日 5:53
    モデレータ
  • VS2019のアップデートも行いましたが、Windows7 32bitの環境ではチェックを外すと、同じ様に例外が発生するので状況は変わりません。

    英語サイトへの投稿はちょっと検討してみます。

    2019年6月11日 2:07
  • > これを何も変更せずにそのままデバッグ実行すると、
    > 「Hello world.」が表示された直後にntdll.dllで一般保護例外が発生します。

    ntdll 内のどこの関数で例外が発生しているのでしょうか?
    またその時のコール スタックは、どのような状態だったのでしょうか?
    Native API 内での例外は様々な要因で発生するので、「例外が発生する」=「マイクロンソフトのバグ」といわけではないと思います。
    2019年6月11日 7:11
  • 例外はVisual Studioでデバッグ実行したときだけ発生します。デバッグビルドしたEXEをエクスプローラから直接起動すると例外は発生しません。

    なので、Visual Studio 2019に原因があると思われます。(Windows10の64bit環境だとこの問題は起きないというのもあります)

    ntdll内の何処なのかはちょっと調べてみます。

    2019年6月11日 7:29
  • > なので、Visual Studio 2019に原因があると思われます。
    > (Windows10の64bit環境だとこの問題は起きないというのもあります)

    水掛け論になってしまうので、これ以上は言及しませんが、私にはこれだけの情報で「Visual Studio 2019に原因がある」と断言できる根拠が全くわかりませんでした。

    ちなみに、VS 側で "Microsoft Symbol Server" からのシンボル ファイルの自動ダウンロードを有効にし、その状態でコールスタックを確認すれば、どこで落ちたのか確認できます。

    2019年6月11日 7:40
  • 舌足らず申し訳ありませんでした。

    「デバッグ実行ではなく単独で実行したときは例外が発生しない」という情報を最初に書き忘れていて誤解を招いてしまったようです。(デバッガー上で例外が捕捉されるのなら単独実行でも例外が発生するはずなのに、発生しないのでVS2019のデバッガーになにかあるのでは?ということです。)

    > ちなみに、VS 側で "Microsoft Symbol Server" からのシンボル ファイルの自動ダウンロードを有効にし、その状態でコールスタックを確認すれば、どこで落ちたのか確認できます。

    ありがとうございます!試してみます。

    2019年6月11日 9:40
  • だったら WinDBG 上から実行してみて、現象に差異が出るか確認してみればいいのでは?
    2019年6月12日 0:13
  • 今朝、VS2019の更新が来ていたので更新してみましたが状況は変わりませんでした。(Version 16.1.3)

    で、例外が発生したときの呼び出し履歴を見ると以下のようになっていました。

    例外の内容は「0x7746F45A (ntdll.dll) で例外がスローされました (consoleTest.exe 内): 0xC0000005: 場所 0x00000000 への書き込み中にアクセス違反が発生しました」です。

    使用しているWindows7(32bit)の環境の問題かもしれませんが、デバッグなしでの起動(CTRL+F5)だと例外は出ないので、デバッガが関係しているんだと思われます。


    • 編集済み pine 2019年6月12日 4:17 画像の貼り直し
    2019年6月12日 0:16
  • ですから、その情報だけでなぜ「デバッガが関係している」という結論になるのかが、私にはわかりません。
    「デバッガが関係している」のであれば、他のプラットフォーム上でも起きるはずだと考えます。
    特定のプラットフォーム (今回の場合は Windows 7 x86) でしか起きないのであれば、その環境固有の何かに起因しているのでは。。。。と、私なら考えます。

    コールスタックはどのような状況になっていたのですか?
    ntdll.dll 内のどの関数で、0xC0000005 の例外が発生していたのですか?
    ちなみに 0xC0000005 は STATUS_ACCESS_VIOLATION というエラーを示しています。
    つまり、メモリ アクセス違反が起きたということですが、現状で提示されている情報からわかるのはそれだけです。
    VS2019 デバッガの問題ならば、WinDBG 上では発生しないと考えられるので、確認されることをお勧めします。
    2019年6月12日 1:11
  • お手数掛けまして申し訳ありません。

    まず、VS2019のデバッガ上での動作ですが先程は画像のアップに失敗してまして、改めてテキストで貼り付けると

    =======================================

    ntdll.dll!@RtlActivateActivationContextUnsafeFast@8()
    ntdll.dll!_LdrpProcessStaticImports@12()
    ntdll.dll!_LdrpLoadDll@28()
    ntdll.dll!_LdrLoadDll@16()
    000a00c5()
    [下のフレームは間違っているか、または見つかりません]
    [外部コード]

    =======================================

    となっており、「RtlActivateActivationContextUnsafeFast」で発生しています。(このntdllの関数が何をしているのかは寡聞にして知りません。もし良ければ教えてください)

    それから、WinDBGで実行してみたのですが、例外は発生しません。(Go Handled Exceptionで実行)

    >VS2019 デバッガの問題ならば、WinDBG 上では発生しないと考えられるので、確認されることをお勧めします。

    ということですので、この結果からVS2019側に問題がある疑いが濃いと思われます。

    それから、もしご存知なら教えていただきたのですが、Visual Studioの

       [ツール]-[オプション]-[デバッグ]にある、「デバッグの停止時に自動的にコンソールを閉じる

    の項目ですが、この機能の実現ってどういうふうに行っているのでしょうか?(おそらくVS2019のデバッガにそう言う機能があるのだと思うのですが。)

    最初の投稿で書きましたが、このオプションにチェックを入れれば、VS2019のデバッガ動作での例外は発生しません。

    そもそもプログラムは

    #include <iostream>
    int main()
    {
        std::cout << "Hello World!" << std::endl;
    }
    

    と、どこで例外が発生するの?というコードです。

    確かに、Windowsのシステムがおかしい可能性は0ではないと思います。(考えたくはないですが)ウィルスやマルウェアの可能性ももしかするとあるかもしれません。

    でも、より可能性の高さから言うと、VS2019のデバッガではないかと思うのです。

    2019年6月12日 5:34
  • LdrLoadDll() がロードしようとしている DLL の名前を確認しましたか?
    VS デバッガには関数呼び出し時のパラメータ値を表示させる機能があるので、それを使えば確認できます。
    LdrLoadDll() の場合、3rd パラメータに DLL モジュール名が UNICODE_STRING 構造体としてセットされるので、その中身を確認すれば、どの DLL をロードしようとしているのかが分かります。

    提示されているコールスタックを見る限り、私には外部プロセスから DLL Injection されているような状態に見えます。


    以下は、Windows 10 x64 環境で notepad.exe を起動時の LdrLoadDll() コールを、WinDBG でトレースしたものです。

     # Child-SP          RetAddr           : Args to Child                                                           : Call Site
    00 000000f6`6f07eea8 00007ffc`6e68ee41 : 00000000`00000100 00000000`00001010 00000000`00000000 0000029d`19120000 : ntdll!LdrLoadDll
    01 000000f6`6f07eeb0 00007ffc`6e50d132 : 00000000`00000000 00007ffc`6e5a9b10 00007ffc`6e5b7878 00000000`00000000 : KERNELBASE!LoadLibraryExW+0x161
    02 000000f6`6f07ef20 00007ffc`6e50d095 : 00007ffc`6e5a9b10 00007ffc`6e5a9b14 ffffffff`ffffffff 00000000`00000040 : ucrtbase!try_get_module+0x4a
    03 000000f6`6f07ef50 00007ffc`6ead92bb : 0000029d`19137ea0 00000000`00000000 00007ffc`6eb662b0 00007ffc`6eae3657 : ucrtbase!_lock_locales+0x585
    04 000000f6`6f07ef80 00007ffc`6ead543d : 00000000`00000000 00007ffc`6e5009ed 0000029d`19137ea0 00000000`00000000 : msvcp_win!std::locale::_Init+0x2b
    05 000000f6`6f07efd0 00007ffc`6ead114e : 00007ffc`6eb28410 00000000`00000005 00007ffc`6ead0000 00000000`00000001 : msvcp_win!std::basic_filebuf<unsigned short,std::char_traits<unsigned short> >::basic_filebuf<unsigned short,std::char_traits<unsigned short> >+0x3d
    06 000000f6`6f07f010 00007ffc`6e50dab3 : 00000000`0000001f 00000000`7ffe0300 000000f6`6f07f3d0 00007ffc`6e505774 : msvcp_win!std::`dynamic initializer for 'wfout''+0x1e
    07 000000f6`6f07f040 00007ffc`6eae31a2 : 00000000`7ffe0300 000000f6`6f07f3d0 000000f6`6f07f8e0 00007ffc`721b6a03 : ucrtbase!initterm+0x43
    08 000000f6`6f07f070 00007ffc`6eae3324 : 00000000`7ffe0385 000000f6`6f07f8e0 00000000`7ffe0300 00000000`00000001 : msvcp_win!dllmain_crt_process_attach+0x9a
    09 000000f6`6f07f0a0 00007ffc`721b8f07 : 00007ffc`6ead0000 00000000`00000001 000000f6`6f07f8e0 00000000`7ffe0385 : msvcp_win!dllmain_dispatch+0x74
    0a 000000f6`6f07f100 00007ffc`721b4865 : 0000029d`19127410 00007ffc`6ead0000 00000000`00000001 0000029d`19127900 : ntdll!LdrpCallInitRoutine+0x6f
    0b 000000f6`6f07f170 00007ffc`721b4648 : 0000029d`19127560 0000029d`19127500 000000f6`6f07f301 0000029d`00000001 : ntdll!LdrpInitializeNode+0x1c1
    0c 000000f6`6f07f2c0 00007ffc`721b4672 : 0000029d`19124a00 0000029d`19126750 000000f6`6f07f3d0 0000029d`191285e0 : ntdll!LdrpInitializeGraphRecurse+0x80
    0d 000000f6`6f07f300 00007ffc`721b4672 : 00007ffc`722d5200 0000029d`19122b00 000000f6`6f07f3d0 0000029d`1912e460 : ntdll!LdrpInitializeGraphRecurse+0xaa
    0e 000000f6`6f07f340 00007ffc`722462ca : 00000000`00000000 00000000`00000010 00000000`00000000 00007ffc`7229d100 : ntdll!LdrpInitializeGraphRecurse+0xaa
    0f 000000f6`6f07f380 00007ffc`72233879 : 00000000`00000001 00000000`00000000 00000000`00000000 00000000`00000001 : ntdll!LdrpInitializeProcess+0x1e16
    10 000000f6`6f07f7c0 00007ffc`721e56c3 : 00000000`00000000 00007ffc`72170000 00000000`00000000 000000f6`6efc9000 : ntdll!_LdrpInitialize+0x4e19d
    11 000000f6`6f07f860 00007ffc`721e566e : 000000f6`6f07f8e0 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!LdrpInitialize+0x3b
    12 000000f6`6f07f890 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!LdrInitializeThunk+0xe
    
     "kernel32"
       +0x000 Length           : 0x10
       +0x002 MaximumLength    : 0x12
       +0x008 Buffer           : 0x00007ffc`6e5b7878  "kernel32"
    ntdll!LdrLoadDll:
    00007ffc`721b57d0 48895c2410      mov     qword ptr [rsp+10h],rbx ss:000000f6`6f07eeb8=0000000000001010
    上記コールスタックでは、ucrtbase!try_get_module 内部から KERNELBASE!LoadLibraryExW 経由で "kernel32" DLL のロード要求が発生していますが、通常の DLL ロード要求の場合、上記のようにコール スタックがいきなり ntdll!LdrLoadDll で始まることはありません。
    今回提示されている、いきなり ntdll!LdrLoadDll で始まる典型的なスレッドが、外部プロセスから DLL Injection です。
    該当プロセスはデバッガ環境下で実行されているので、VS デバッガが DLL Injection を仕掛けている可能性も考えられますが、それ以外のプロセスによる DLL Injection である可能性も現状では否定できません。
    なので、今回の ntdll!LdrLoadDll コールで何の DLL モジュールをロードしようとしているのか、きちんと確認されることをお薦めします。



    • 編集済み お馬鹿 2019年6月12日 6:56
    2019年6月12日 6:56
  • ありがとうございます!勉強になります。

    VS デバッガには関数呼び出し時のパラメータ値を表示させる機能があるので、それを使えば確認できます。

    とのことですが、これは、「呼び出し履歴」の画面で右クリックして「パラメータ値の表示」にチェックを入れるのですよね?どこに表示されるのでしょうか?それとも操作を間違ってますか?

    初歩的な質問で申し訳ありません。

    ※DLL Injectionとなると怪しいと思われるのはトレンドマイクロのウィルスバスター(コーポレート版)かもしれないです。他のプログラムのデバッグ時にProcess ExplorerでThreadを監視していると、トレンドマイクロのDLLがスレッドに現れてるのをよく見かけるので。そうなのかを確認したいのですが、呼び出し時のパラメータ値の表示の仕方がわかりません。よろしくお願いします。

    2019年6月12日 7:31
  • VS デバッガだと、外部モジュールの詳しい情報は表示してくれないんですね。。。。失礼しました。
    私、いつも WinDBG でデバッグしているので、VS のデバッガはあんまり詳しくないのですが。。。。
    (VS のデバッガ、私には超使いにくい。。。)

    VS のデバッガは WinDBG のように綺麗にコールスタックを表示してくれないし、自分以外のモジュールのパラメータ情報を表示してくれないから、スタック フレームを自分で漁るしかないのかも。
    x86 環境の場合、"Debug.ListRegisters" コマンドの esp や ebp でスタック フレームを確認して、そこから自分でオフセットを数えていくか、あるいは UNICODE_STRING 構造体っぽいデータを漁るか。。。。
    そこら辺は、VS でデバッグしている人の方が詳しいかも。

    もう1つ思いついたのは。。。。
    例外発生で VS デバッガに Break-in している状態から、タスク マネージャーからプロセス ダンプを生成して、そのプロセス ダンプ ファイルから確認するとか。
    2019年6月12日 8:05
  • 色々教えていただきありがとうございます。

    プロセスダンプを取ってWinDBGで解析してみました。

    Microsoft (R) Windows Debugger Version 6.3.9600.17298 X86
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    
    Loading Dump File [F:\Temp\ファイル検索\file_search2\file_search2.dmp]
    User Mini Dump File with Full Memory: Only application data is available
    
    
    ************* Symbol Path validation summary **************
    Response                         Time (ms)     Location
    Deferred                                       SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
    Symbol search path is: SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
    Executable search path is: 
    Windows 7 Version 7601 (Service Pack 1) MP (4 procs) Free x86 compatible
    Product: WinNt, suite: SingleUserTS
    Machine Name:
    Debug session time: Thu Jun 13 08:53:30.000 2019 (UTC + 9:00)
    System Uptime: 0 days 1:54:33.917
    Process Uptime: 0 days 0:05:26.000
    ..............
    eax=00000187 ebx=00000000 ecx=7ffde000 edx=0043f964 esi=778d8340 edi=00000000
    eip=77846c04 esp=0043f95c ebp=0043f9c0 iopl=0         nv up ei pl zr na pe cy
    cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000247
    ntdll!KiFastSystemCallRet:
    77846c04 c3              ret
    0:000> !analyze -v
    *******************************************************************************
    *                                                                             *
    *                        Exception Analysis                                   *
    *                                                                             *
    *******************************************************************************
    
    *** WARNING: Unable to verify checksum for file_search2.exe
    GetUrlPageData2 (WinHttp) failed: 12002.
    
    FAULTING_IP: 
    +74ca000003e7d9a0
    00000000 ??              ???
    
    EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
    ExceptionAddress: 00000000
       ExceptionCode: 80000003 (Break instruction exception)
      ExceptionFlags: 00000000
    NumberParameters: 0
    
    CONTEXT:  00000000 -- (.cxr 0x0;r)
    eax=00000187 ebx=00000000 ecx=7ffde000 edx=0043f964 esi=778d8340 edi=00000000
    eip=77846c04 esp=0043f95c ebp=0043f9c0 iopl=0         nv up ei pl zr na pe cy
    cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000247
    ntdll!KiFastSystemCallRet:
    77846c04 c3              ret
    
    FAULTING_THREAD:  00002e44
    
    DEFAULT_BUCKET_ID:  STATUS_BREAKPOINT
    
    PROCESS_NAME:  file_search2.exe
    
    ERROR_CODE: (NTSTATUS) 0x80000003 - {
    
    EXCEPTION_CODE: (NTSTATUS) 0x80000003 (2147483651) - {
    
    NTGLOBALFLAG:  0
    
    APPLICATION_VERIFIER_FLAGS:  0
    
    APP:  file_search2.exe
    
    ANALYSIS_VERSION: 6.3.9600.17336 (debuggers(dbg).150226-1500) x86fre
    
    PRIMARY_PROBLEM_CLASS:  STATUS_BREAKPOINT
    
    BUGCHECK_STR:  APPLICATION_FAULT_STATUS_BREAKPOINT
    
    LAST_CONTROL_TRANSFER:  from 778465ac to 77846c04
    
    STACK_TEXT:  
    0043f958 778465ac 77831db1 00000020 00000000 ntdll!KiFastSystemCallRet
    0043f95c 77831db1 00000020 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
    0043f9c0 77831c95 00000000 00000000 0043fa28 ntdll!RtlpWaitOnCriticalSection+0x13e
    0043f9e8 7785f82b 778d8340 77ad8961 64f618a0 ntdll!RtlEnterCriticalSection+0x150
    0043fa84 7786208c 76860000 0043fac0 00000000 ntdll!LdrGetProcedureAddressEx+0x159
    0043faa0 757b6d18 76860000 0043fac0 00000000 ntdll!LdrGetProcedureAddress+0x18
    0043fac8 64f6a79f 76860000 64f618a0 76860000 KERNELBASE!GetProcAddress+0x44
    0043fadc 64f6a59c 64f618a0 64f61898 64f618a0 VCRUNTIME140D!try_get_proc_address_from_first_available_module+0x2f
    0043fb00 64f6a4b9 00000002 64f618a0 64f61898 VCRUNTIME140D!try_get_function+0x4c
    0043fb18 64f6a89b 0043fb3c 0fa59122 00000004 VCRUNTIME140D!try_get_FlsGetValue+0x19
    0043fb2c 64f6a327 00000004 00000000 0043fb48 VCRUNTIME140D!__vcrt_FlsGetValue+0xb
    0043fb44 64f69c5b 0043fb60 0043fc58 0043fb64 VCRUNTIME140D!__vcrt_getptd_noinit+0x27
    0043fb58 0fce4838 0043fc50 001522a1 466c223c VCRUNTIME140D!__uncaught_exception+0xb
    0043fb60 001522a1 466c223c 0043fdbc 0043fc58 MSVCP140D!std::uncaught_exception+0x8
    0043fc50 00151c62 466c23a0 0043feac 0043fde0 file_search2+0x122a1
    0043fdcc 0015263f 0fd5cbe0 00159b30 001512a3 file_search2+0x11c62
    0043feac 00152e43 00000001 0022d538 0022f1b8 file_search2+0x1263f
    0043fecc 00152c97 466c2144 00000000 00000000 file_search2+0x12e43
    0043ff28 00152b2d 0043ff38 00152ec8 0043ff44 file_search2+0x12c97
    0043ff30 00152ec8 0043ff44 768aef3c 7ffdf000 file_search2+0x12b2d
    0043ff38 768aef3c 7ffdf000 0043ff84 77863618 file_search2+0x12ec8
    0043ff44 77863618 7ffdf000 77ad8c61 00000000 kernel32!BaseThreadInitThunk+0xe
    0043ff84 778635eb 001513b1 7ffdf000 00000000 ntdll!__RtlUserThreadStart+0x70
    0043ff9c 00000000 001513b1 7ffdf000 00000000 ntdll!_RtlUserThreadStart+0x1b
    
    
    FOLLOWUP_IP: 
    VCRUNTIME140D!try_get_proc_address_from_first_available_module+2f [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 183]
    64f6a79f 8be5            mov     esp,ebp
    
    FAULTING_SOURCE_LINE:  d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp
    
    FAULTING_SOURCE_FILE:  d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp
    
    FAULTING_SOURCE_LINE_NUMBER:  183
    
    SYMBOL_STACK_INDEX:  7
    
    SYMBOL_NAME:  vcruntime140d!try_get_proc_address_from_first_available_module+2f
    
    FOLLOWUP_NAME:  MachineOwner
    
    MODULE_NAME: VCRUNTIME140D
    
    IMAGE_NAME:  VCRUNTIME140D.dll
    
    DEBUG_FLR_IMAGE_TIMESTAMP:  5ccadb35
    
    STACK_COMMAND:  dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~0s; .ecxr ; kb
    
    FAILURE_BUCKET_ID:  STATUS_BREAKPOINT_80000003_VCRUNTIME140D.dll!try_get_proc_address_from_first_available_module
    
    BUCKET_ID:  APPLICATION_FAULT_STATUS_BREAKPOINT_vcruntime140d!try_get_proc_address_from_first_available_module+2f
    
    ANALYSIS_SOURCE:  UM
    
    FAILURE_ID_HASH_STRING:  um:status_breakpoint_80000003_vcruntime140d.dll!try_get_proc_address_from_first_available_module
    
    FAILURE_ID_HASH:  {8ae96455-5f56-0857-0a17-317572e9744b}
    
    Followup: MachineOwner
    ---------
    
    

    スタックトレースにntdll!LdrLoadDllらしきものが見当たりませんが、もしかして、アプリを子プロセスとして起動しているVsDebugConsole.exeのダンプが必要なんでしょうか?

    ただ、気になるのは、例外が発生してVSにブレークインした時に、アプリの子プロセスにcmd.exeが無いのですよね。デバッグ無しでの起動ならcmd.exeが子プロセスで起動するのですが。(このときは::system("pause")でキー入力待ちにしています)

    2019年6月13日 0:39
  • VsDebugConsole.exeのダンプも取ってみました。

    Microsoft (R) Windows Debugger Version 6.3.9600.17298 X86
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    
    Loading Dump File [F:\Temp\ファイル検索\file_search2\VsDebugConsole.dmp]
    User Mini Dump File with Full Memory: Only application data is available
    
    
    ************* Symbol Path validation summary **************
    Response                         Time (ms)     Location
    Deferred                                       SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
    Symbol search path is: SRV*c:\symbols*https://msdl.microsoft.com/download/symbols
    Executable search path is: 
    Windows 7 Version 7601 (Service Pack 1) MP (4 procs) Free x86 compatible
    Product: WinNt, suite: SingleUserTS
    Machine Name:
    Debug session time: Thu Jun 13 08:59:59.000 2019 (UTC + 9:00)
    System Uptime: 0 days 2:01:02.527
    Process Uptime: 0 days 0:11:57.000
    ........................
    eax=00000185 ebx=002bfd64 ecx=76afab78 edx=002bfd1c esi=00000002 edi=00000000
    eip=77846c04 esp=002bfd14 ebp=002bfdb0 iopl=0         nv up ei pl zr na pe cy
    cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000247
    ntdll!KiFastSystemCallRet:
    77846c04 c3              ret
    0:000> !analyze -v
    *******************************************************************************
    *                                                                             *
    *                        Exception Analysis                                   *
    *                                                                             *
    *******************************************************************************
    
    *** ERROR: Symbol file could not be found.  Defaulted to export symbols for tmmon.dll - 
    *** ERROR: Symbol file could not be found.  Defaulted to export symbols for TmUmEvt.dll - 
    GetUrlPageData2 (WinHttp) failed: 12002.
    
    FAULTING_IP: 
    +5d749f003e8d3a0
    00000000 ??              ???
    
    EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
    ExceptionAddress: 00000000
       ExceptionCode: 80000003 (Break instruction exception)
      ExceptionFlags: 00000000
    NumberParameters: 0
    
    CONTEXT:  00000000 -- (.cxr 0x0;r)
    eax=00000185 ebx=002bfd64 ecx=76afab78 edx=002bfd1c esi=00000002 edi=00000000
    eip=77846c04 esp=002bfd14 ebp=002bfdb0 iopl=0         nv up ei pl zr na pe cy
    cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000247
    ntdll!KiFastSystemCallRet:
    77846c04 c3              ret
    
    FAULTING_THREAD:  00002d24
    
    DEFAULT_BUCKET_ID:  STATUS_BREAKPOINT
    
    PROCESS_NAME:  VsDebugConsole.exe
    
    ERROR_CODE: (NTSTATUS) 0x80000003 - {
    
    EXCEPTION_CODE: (NTSTATUS) 0x80000003 (2147483651) - {
    
    NTGLOBALFLAG:  0
    
    APPLICATION_VERIFIER_FLAGS:  0
    
    APP:  vsdebugconsole.exe
    
    ANALYSIS_VERSION: 6.3.9600.17336 (debuggers(dbg).150226-1500) x86fre
    
    PRIMARY_PROBLEM_CLASS:  STATUS_BREAKPOINT
    
    BUGCHECK_STR:  APPLICATION_FAULT_STATUS_BREAKPOINT
    
    LAST_CONTROL_TRANSFER:  from 7784658c to 77846c04
    
    STACK_TEXT:  
    002bfd10 7784658c 757b6a8e 00000002 002bfd64 ntdll!KiFastSystemCallRet
    002bfd14 757b6a8e 00000002 002bfd64 00000001 ntdll!NtWaitForMultipleObjects+0xc
    002bfdb0 768abf46 002bfd64 002bfdd8 00000000 KERNELBASE!WaitForMultipleObjectsEx+0x100
    002bfdf8 768abfb4 00000002 7ffdf000 00000000 kernel32!WaitForMultipleObjectsExImplementation+0xe0
    002bfe14 003979db 00000002 002bfe34 00000000 kernel32!WaitForMultipleObjects+0x18
    002bfe40 00397d44 000000dc 7ffdf000 000daf10 VsDebugConsole!WaitForInput+0x2e
    002bfe78 003983fd 00000003 000daf10 000e74c0 VsDebugConsole!wmain+0x133
    002bfec0 768aef3c 7ffdf000 002bff0c 77863618 VsDebugConsole!__scrt_common_main_seh+0xf8
    002bfecc 77863618 7ffdf000 77c5a357 00000000 kernel32!BaseThreadInitThunk+0xe
    002bff0c 778635eb 00398473 7ffdf000 00000000 ntdll!__RtlUserThreadStart+0x70
    002bff24 00000000 00398473 7ffdf000 00000000 ntdll!_RtlUserThreadStart+0x1b
    
    
    STACK_COMMAND:  ~0s; .ecxr ; kb
    
    FOLLOWUP_IP: 
    VsDebugConsole!WaitForInput+2e
    003979db 83e800          sub     eax,0
    
    SYMBOL_STACK_INDEX:  5
    
    SYMBOL_NAME:  vsdebugconsole!WaitForInput+2e
    
    FOLLOWUP_NAME:  MachineOwner
    
    MODULE_NAME: VsDebugConsole
    
    IMAGE_NAME:  VsDebugConsole.exe
    
    DEBUG_FLR_IMAGE_TIMESTAMP:  5cf832f0
    
    FAILURE_BUCKET_ID:  STATUS_BREAKPOINT_80000003_VsDebugConsole.exe!WaitForInput
    
    BUCKET_ID:  APPLICATION_FAULT_STATUS_BREAKPOINT_vsdebugconsole!WaitForInput+2e
    
    ANALYSIS_SOURCE:  UM
    
    FAILURE_ID_HASH_STRING:  um:status_breakpoint_80000003_vsdebugconsole.exe!waitforinput
    
    FAILURE_ID_HASH:  {19b59c22-7bce-aaf5-ddd5-382215c23f89}
    
    Followup: MachineOwner
    ---------
    
    

    2019年6月13日 0:43
  • 頑張りますねぇ。
    このフォーラムで、私からの提案をこんなに前向きに聞いてくれる人って、はじめてかも。
    (しかも、こっちが説明していないことも、ちゃんと自分で調べているし。)
    私の投稿は大抵の場合、「お前は何を言っている?」的な扱いなので。www
    ちょっとびっくり。(ちょっとうれしい。)

    今回はユーザ モード側の解析なので、必要なダンプは、デバッグ対象となるプロセスだけ、つまりコンソール アプリのプロセスだけでいいです。
    (余談ですが、Hyper-V や VMWare などの仮想環境下でのデバッグ環境を持っているなら、WinDBG をカーネル デバッグ モードで接続しておくととても便利です。)

    ntdll!LdrLoadDll が見当たらないのは、プロセス ダンプを採取したタイミングで Active だったのが別の Thread だったから。。。ということなんだろうと思います。
    そのプロセス内の全部のスレッドを表示させたい場合は、"~*kvn" です。
    (ちなみに、画面をクリアするのは ".cls")
    とりあえず、"~*kvn" の出力結果をコピペしてみてください。
    2019年6月13日 1:10
  • まあ、こんなに頑張らなくても、VSのオプションにチェックを入れて、::system("pause")でデバッグすればいいのですけど(^^;)、わけが分からずに対処療法的なやり方はどうも不安感が拭えなくて。

    下記が"~*kvn"の結果です。これ見ると、ntdll!LdrLoadDllのフレームが壊れているようなワーニングが出てます。むむむ???どういうことでしょう?

    0:000> ~*kvn
    
    .  0  Id: 2e40.2e44 Suspend: 0 Teb: 7ffde000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 0043f958 778465ac 77831db1 00000020 00000000 ntdll!KiFastSystemCallRet (FPO: [0,0,0])
    01 0043f95c 77831db1 00000020 00000000 00000000 ntdll!NtWaitForSingleObject+0xc (FPO: [3,0,0])
    02 0043f9c0 77831c95 00000000 00000000 0043fa28 ntdll!RtlpWaitOnCriticalSection+0x13e (FPO: [Non-Fpo])
    03 0043f9e8 7785f82b 778d8340 77ad8961 64f618a0 ntdll!RtlEnterCriticalSection+0x150 (FPO: [Non-Fpo])
    04 0043fa84 7786208c 76860000 0043fac0 00000000 ntdll!LdrGetProcedureAddressEx+0x159 (FPO: [Non-Fpo])
    05 0043faa0 757b6d18 76860000 0043fac0 00000000 ntdll!LdrGetProcedureAddress+0x18 (FPO: [Non-Fpo])
    06 0043fac8 64f6a79f 76860000 64f618a0 76860000 KERNELBASE!GetProcAddress+0x44 (FPO: [Non-Fpo])
    07 0043fadc 64f6a59c 64f618a0 64f61898 64f618a0 VCRUNTIME140D!try_get_proc_address_from_first_available_module+0x2f (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 183]
    08 0043fb00 64f6a4b9 00000002 64f618a0 64f61898 VCRUNTIME140D!try_get_function+0x4c (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 211]
    09 0043fb18 64f6a89b 0043fb3c 0fa59122 00000004 VCRUNTIME140D!try_get_FlsGetValue+0x19 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 254]
    0a 0043fb2c 64f6a327 00000004 00000000 0043fb48 VCRUNTIME140D!__vcrt_FlsGetValue+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 281]
    0b 0043fb44 64f69c5b 0043fb60 0043fc58 0043fb64 VCRUNTIME140D!__vcrt_getptd_noinit+0x27 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\per_thread_data.cpp @ 152]
    0c 0043fb58 0fce4838 0043fc50 001522a1 466c223c VCRUNTIME140D!__uncaught_exception+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\uncaught_exception.cpp @ 21]
    *** WARNING: Unable to verify checksum for file_search2.exe
    *** ERROR: Module load completed but symbols could not be loaded for file_search2.exe
    0d 0043fb60 001522a1 466c223c 0043fdbc 0043fc58 MSVCP140D!std::uncaught_exception+0x8 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 9]
    WARNING: Stack unwind information not available. Following frames may be wrong.
    0e 0043fc50 00151c62 466c23a0 0043feac 0043fde0 file_search2+0x122a1
    0f 0043fdcc 0015263f 0fd5cbe0 00159b30 001512a3 file_search2+0x11c62
    10 0043feac 00152e43 00000001 0022d538 0022f1b8 file_search2+0x1263f
    11 0043fecc 00152c97 466c2144 00000000 00000000 file_search2+0x12e43
    12 0043ff28 00152b2d 0043ff38 00152ec8 0043ff44 file_search2+0x12c97
    13 0043ff30 00152ec8 0043ff44 768aef3c 7ffdf000 file_search2+0x12b2d
    14 0043ff38 768aef3c 7ffdf000 0043ff84 77863618 file_search2+0x12ec8
    15 0043ff44 77863618 7ffdf000 77ad8c61 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
    16 0043ff84 778635eb 001513b1 7ffdf000 00000000 ntdll!__RtlUserThreadStart+0x70 (FPO: [Non-Fpo])
    17 0043ff9c 00000000 001513b1 7ffdf000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
    
       1  Id: 2e40.2e88 Suspend: 0 Teb: 7ffdd000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 005af448 778609ba 77b48721 00000001 00000000 ntdll!RtlActivateActivationContextUnsafeFast+0x9c (FPO: [Non-Fpo])
    01 005af4c4 7785fa3e 0022eb70 778d82e0 00000000 ntdll!LdrpProcessStaticImports+0x1b8 (FPO: [Non-Fpo])
    02 005af640 77862105 005af694 778d82e0 00000000 ntdll!LdrpLoadDll+0x33d (FPO: [Non-Fpo])
    03 005af678 000700c5 00000000 00000000 005af694 ntdll!LdrLoadDll+0xaf (FPO: [Non-Fpo])
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    04 005af6b8 77846acd 00070000 00000000 00000000 0x700c5
    05 005af9e8 77863486 005afa0c 77800000 00000000 ntdll!KiUserApcDispatcher+0x25
    06 005af9f8 00000000 005afa0c 77800000 00000000 ntdll!LdrInitializeThunk+0x10 (FPO: [Non-Fpo])
    

    追記:最初コメント頂いたときアカウント名があれだし(笑)、「ん?どう見てもVSの問題じゃないの?」と正直思いました(笑)。でも、せっかくお付き合いしてくださってるんだし頑張ってみるかと。でも、DLL Injectonじゃないのかと言われたときは、「ああ、なるほど。それがあるのか」と思いました。ここは経験の差ですね。ACCESS_VIOLATIONはたまに遭遇するのですが、よくわからない場合が多いので、トライ・アンド・エラー的な対応しかやってなかったので、この際いい機会なのでとちょっと頑張ってます。

    2019年6月13日 2:10
  • このアカウント名は、超お気に入りです。
    もっともこのアカウント名が原因 (?) で、私は Microsoft コミュニティを追放されましたけど。wwww

    Call Stack の表示で waring が出るのは、よくあることです。
    warnig が出る理由は。。。。
    Stack Frame はシステム (NT カーネル?) により最適化される場合があるので、その場合関数コール時のパラメータ値が Stack Frame に残っていないケースがあり、そのときに warining が出るようです。
    つまり、「この Stack Frame を調べるときは注意しろ!!」という意味なんだと思います。
    もっとも x64 環境の場合は、関数コール時の Parameter 1~4 まではレジスタ経由になってしまったので、昨今のデバッグでは Stack Frame を無条件で信頼するケースはほとんどありませんけど。

    で、全スレッドの Call Stack ですが、Thread 1 はやっぱり外部プロセスからの DLL Injection 用に生成された Thread っぽいですね。
    しかも、KERNELBASE!LoadLibraryExW ぢゃなくて ntdll!LdrLoadDll を利用してくるとは。wwww
    今回のダンプは幸いにも 32 Bit Process なので、以下のコマンドでロードしようとしている DLL を特定できると思います。
    (ちなみに、DLL Injection を仕掛けたプロセスを知りたいなら、"Process Monitor" と併用して調べれば特定できると思います。)

    dt ntdll!_UNICODE_STRING 005af694 -r
    • 回答としてマーク pine 2019年6月13日 3:46
    • 回答としてマークされていない pine 2019年6月17日 1:14
    2019年6月13日 2:42
  • でました。

    0:000> dt ntdll!_UNICODE_STRING 005af694 -r
     "C:\Windows\system32\tmumh\20019\AddOn\7.0.0.1162\TmUmEvt.dll"
       +0x000 Length           : 0x78
       +0x002 MaximumLength    : 0x78
       +0x004 Buffer           : 0x00070428  "C:\Windows\system32\tmumh\20019\AddOn\7.0.0.1162\TmUmEvt.dll"
    

    予想通り、トレンドマイクロのウィルスバスター関係のDLLでした。(DLLの詳細を見ると、「Trend Micro User-Mode Hook Event Module」というものらしいです。

    推測ですが、VSのデバッガーがコンソールウィンドウを閉じないようにするためにシステムを何かHookするような処理がウィルスバスターのリアルタイム検出の処理がなにかバッティングしてるんでしょうね。(ウィルスバスターがウィルスみたいな行為をしてるようにも見えますが。)

    ここまでですね。これ以上はウィルスバスターを外さないとだめなので。(コーポレートエディションなので一時的に無効にしたりできない)。うちのシステム担当に報告してもいいけどそれもまた面倒だし、トレンドマイクロがすぐに対応してくれるとは限らないので。

    色々とお付き合いして頂きありがとうございました。また、何かの機会がありましたらよろしくおねがいします。

    ではでは。

    2019年6月13日 3:46
  • うーーーーーん。。。。謎がさらに深まってしまいました。
    "TmUmEvt.dll" は恐らく API Hook 用の DLL だと思いますが、ロード要求のタイミングが遅すぎる。
    一般的に、アンチウィルス系ソフトウェアは、カーネル モード側でプロセスやスレッドの生成/消滅状況を監視していて、生成要求が発生すると、その初期段階で API Hook DLL をターゲット プロセス内にインジェクションします。
    そう考えると、Thread 1 の "TmUmEvt.dll" ロード要求は、明らかに遅すぎる。
    根本原因は、もっと別のところにありそうな気がします。

    もしまだ調べる気があるなら、Thread 0 と Thread 1 の相関関係を調べれば何かわかるかも。
    Thread 1 の "ntdll!RtlActivateActivationContextUnsafeFast+0x9c" での STATUS_ACCESS_VIOLATION (0xC0000005) が発生するとき、メイン スレッドである Thread 0 の状態が常に同じならば、問題は Visual Studio 側にあるような気がしてきました。
    Thread 0 の以下の部分で何が起きたのが、非常に気になる。。。

    0d 0043fb60 001522a1 466c223c 0043fdbc 0043fc58 MSVCP140D!std::uncaught_exception+0x8 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 9]
    0e 0043fc50 00151c62 466c23a0 0043feac 0043fde0 file_search2+0x122a1

    2019年6月14日 0:27
  • > Thread 1 の "ntdll!RtlActivateActivationContextUnsafeFast+0x9c" での STATUS_ACCESS_VIOLATION (0xC0000005) が発生するとき、メイン スレッドである Thread 0 の状態が常に同じならば、問題は Visual Studio 側にあるような気がしてきました。

    これ、具体的にどうやって何を調べんたらいいんでしょう?(まだ調べることは可能です)

    ウィルスバスターで読み込まれるDLLはもう一つあるようで、「tmmon.dll」というDLLで、User Monitor Hookingのエンジンらしいです。(例外発生時にはまだ読み込まれていないみたいですが)

    それと、Windows10 x64では起きないって言いましたけど、32bitアプリとしてコンソールアプリを動かしたときは起きないのですが、64bitアプリとしてコンソールアプリを起動したときは発生することがわかりました。でも、エラー内容が違います。

    例外の内容は、

    例外がスローされました:読み取りアクセス違反。
    wer_NULL_THUNK_DATA_DLA が 0x11101110111011A でした。

    で、呼出履歴は、

    >	combase.dll!Microsoft::WRL::Module<1,Microsoft::WRL::Details::DefaultModule<1> >::Create() 行 1471	C++
     	combase.dll!Microsoft::WRL::Module<1,Microsoft::WRL::Details::DefaultModule<1> >::StaticInitialize() 行 1447	C++
     	combase.dll!`dynamic initializer for 'Microsoft::WRL::Module<1,Microsoft::WRL::Details::DefaultModule<1> >::isInitialized''() 行 1554	C++
     	ucrtbase.dll!_initterm()	不明
     	combase.dll!dllmain_crt_process_attach(HINSTANCE__ * const instance=0x00007ffb60ca0000, void * const reserved=0x0000000000000000) 行 65	C++
     	combase.dll!dllmain_dispatch(HINSTANCE__ * const instance=0x00007ffb60ca0000, const unsigned long reason=1, void * const reserved=0x0000000000000000) 行 194	C++
     	ntdll.dll!LdrpCallInitRoutine()	不明
     	ntdll.dll!LdrpInitializeNode()	不明
     	ntdll.dll!LdrpInitializeGraphRecurse()	不明
     	ntdll.dll!LdrpInitializeGraphRecurse()	不明
     	ntdll.dll!LdrpInitializeGraphRecurse()	不明
     	ntdll.dll!LdrpPrepareModuleForExecution()	不明
     	ntdll.dll!LdrpLoadDllInternal()	不明
     	ntdll.dll!LdrpLoadDll()	不明
     	ntdll.dll!LdrLoadDll()	不明
     	0000028e28900124()	不明
    

    と、なっており、例外発生はntdll.dllではなくcombase.dllになっていました。

    実は、今月末くらいで、会社のデスクトップがWindows10 x64に切り替わる事になっていて、実際の移行には時間がかかりますが、精々来月半ばくらいまでがWindows7 x86で確認できるリミットになると思います。

    (Windows7も来年早々にサポート切れになるので)

    2019年6月14日 5:16
  • > これ、具体的にどうやって何を調べんたらいいんでしょう?(まだ調べることは可能です)

    前回同様、VS 2019 上で対象プログラムを実行し例外現象を発生させ、その状態のプロセス ダンプを複数個採取してください。
    それら採取した複数のダンプ ファイルを WinDBG 上で開き、"~*kvn" コマンドで Thread 0, 1 の状態を確認し、それぞれの Thread の Call Stack の状態が常に同じなのか、それとも異なるのかを確認してみてください。

    何を気にしているかというと。。。。
    外部プロセスからの DLL Injection が今回の例外の要因になっているとしても、それが STATUS_ACCESS_VIOLATION エラー発生の理由にはなり得ないと思うのです。
    DLL Injection の処理自体が、STATUS_ACCESS_VIOLATION を発生させるわけでもないし、とにかくこの現象を説明できるシナリオが思い浮かばない。(要するに、論理的にこの現象を説明できない。)
    となると、今回確認した DLL Injection は単にタイミング的にそうなっただけで、それ以外にも例外が発生するケースがあるのでは。。。。と思えてきたのです。
    なので、同一状況下での複数のダンプを採取し、それらの共通項を見つけられれば、この問題の根本原因を突き止められるのでは。。。。と思うのです。
    なお、x64 環境でのデバッグは x86 よりも面倒なので、コールスタックだけを見ても、なんともいえません。
    2019年6月14日 6:13
  • それぞれ3~4分間をおいて3回取りました。

    1回め

    0:000> ~*kvn
    
    .  0  Id: 15e8.2608 Suspend: 0 Teb: 7ffde000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 0031f7cc 770a65ac 77091db1 00000020 00000000 ntdll!KiFastSystemCallRet (FPO: [0,0,0])
    01 0031f7d0 77091db1 00000020 00000000 00000000 ntdll!NtWaitForSingleObject+0xc (FPO: [3,0,0])
    02 0031f834 77091c95 00000000 00000000 0031f89c ntdll!RtlpWaitOnCriticalSection+0x13e (FPO: [Non-Fpo])
    03 0031f85c 770bf82b 77138340 76f0ef11 0f5e18a0 ntdll!RtlEnterCriticalSection+0x150 (FPO: [Non-Fpo])
    04 0031f8f8 770c208c 757f0000 0031f934 00000000 ntdll!LdrGetProcedureAddressEx+0x159 (FPO: [Non-Fpo])
    05 0031f914 750a6d18 757f0000 0031f934 00000000 ntdll!LdrGetProcedureAddress+0x18 (FPO: [Non-Fpo])
    06 0031f93c 0f5ea79f 757f0000 0f5e18a0 757f0000 KERNELBASE!GetProcAddress+0x44 (FPO: [Non-Fpo])
    07 0031f950 0f5ea59c 0f5e18a0 0f5e1898 0f5e18a0 VCRUNTIME140D!try_get_proc_address_from_first_available_module+0x2f (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 183]
    08 0031f974 0f5ea4b9 00000002 0f5e18a0 0f5e1898 VCRUNTIME140D!try_get_function+0x4c (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 211]
    09 0031f98c 0f5ea89b 0031f9b0 0f899122 00000004 VCRUNTIME140D!try_get_FlsGetValue+0x19 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 254]
    0a 0031f9a0 0f5ea327 00000004 00000000 0031f9bc VCRUNTIME140D!__vcrt_FlsGetValue+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 281]
    0b 0031f9b8 0f5e9c5b 0031f9d4 0031facc 0031f9d8 VCRUNTIME140D!__vcrt_getptd_noinit+0x27 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\per_thread_data.cpp @ 152]
    0c 0031f9cc 10004838 0031fac4 00f123c1 c512599b VCRUNTIME140D!__uncaught_exception+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\uncaught_exception.cpp @ 21]
    *** WARNING: Unable to verify checksum for file_search2.exe
    0d 0031f9d4 00f123c1 c512599b 0031fc30 0031facc MSVCP140D!std::uncaught_exception+0x8 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 9]
    0e 0031fac4 00f11cd2 c5125f1f 0031fd3c 00000000 file_search2+0x123c1 (FPO: [Non-Fpo])
    0f 0031fc40 00f12885 1007cbe0 00f19b58 c5125e13 file_search2+0x11cd2 (FPO: [Non-Fpo])
    10 0031fd4c 00f131f3 00000001 000fd398 000ff0a8 file_search2+0x12885 (FPO: [Non-Fpo])
    11 0031fd6c 00f13047 c5125e97 00000000 00000000 file_search2+0x131f3 (FPO: [Non-Fpo])
    12 0031fdc8 00f12edd 0031fdd8 00f13278 0031fde4 file_search2+0x13047 (FPO: [Non-Fpo])
    13 0031fdd0 00f13278 0031fde4 7583ef3c 7ffdf000 file_search2+0x12edd (FPO: [Non-Fpo])
    14 0031fdd8 7583ef3c 7ffdf000 0031fe24 770c3618 file_search2+0x13278 (FPO: [Non-Fpo])
    15 0031fde4 770c3618 7ffdf000 76f0e9cd 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
    16 0031fe24 770c35eb 00f113e3 7ffdf000 00000000 ntdll!__RtlUserThreadStart+0x70 (FPO: [Non-Fpo])
    17 0031fe3c 00000000 00f113e3 7ffdf000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
    
       1  Id: 15e8.2c48 Suspend: 0 Teb: 7ffdd000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 0052f3c8 770c09ba 7693e3ad 00000001 00000000 ntdll!RtlActivateActivationContextUnsafeFast+0x9c (FPO: [Non-Fpo])
    01 0052f444 770bfa3e 000fe9d0 771382e0 00000000 ntdll!LdrpProcessStaticImports+0x1b8 (FPO: [Non-Fpo])
    02 0052f5c0 770c2105 0052f614 771382e0 00000000 ntdll!LdrpLoadDll+0x33d (FPO: [Non-Fpo])
    03 0052f5f8 000700c5 00000000 00000000 0052f614 ntdll!LdrLoadDll+0xaf (FPO: [Non-Fpo])
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    04 0052f638 770a6acd 00070000 00000000 00000000 0x700c5
    05 0052f968 770c3486 0052f98c 77060000 00000000 ntdll!KiUserApcDispatcher+0x25
    06 0052f978 00000000 0052f98c 77060000 00000000 ntdll!LdrInitializeThunk+0x10 (FPO: [Non-Fpo])
    

    2回め

    0:000> ~*kvn
    
    .  0  Id: 248c.3598 Suspend: 0 Teb: 7ffdf000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 0015f31c 770a65ac 77091db1 00000020 00000000 ntdll!KiFastSystemCallRet (FPO: [0,0,0])
    01 0015f320 77091db1 00000020 00000000 00000000 ntdll!NtWaitForSingleObject+0xc (FPO: [3,0,0])
    02 0015f384 77091c95 00000000 00000000 0015f3ec ntdll!RtlpWaitOnCriticalSection+0x13e (FPO: [Non-Fpo])
    03 0015f3ac 770bf82b 77138340 76d1f817 0f9118a0 ntdll!RtlEnterCriticalSection+0x150 (FPO: [Non-Fpo])
    04 0015f448 770c208c 757f0000 0015f484 00000000 ntdll!LdrGetProcedureAddressEx+0x159 (FPO: [Non-Fpo])
    05 0015f464 750a6d18 757f0000 0015f484 00000000 ntdll!LdrGetProcedureAddress+0x18 (FPO: [Non-Fpo])
    06 0015f48c 0f91a79f 757f0000 0f9118a0 757f0000 KERNELBASE!GetProcAddress+0x44 (FPO: [Non-Fpo])
    07 0015f4a0 0f91a59c 0f9118a0 0f911898 0f9118a0 VCRUNTIME140D!try_get_proc_address_from_first_available_module+0x2f (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 183]
    08 0015f4c4 0f91a4b9 00000002 0f9118a0 0f911898 VCRUNTIME140D!try_get_function+0x4c (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 211]
    09 0015f4dc 0f91a89b 0015f500 0fd39122 00000004 VCRUNTIME140D!try_get_FlsGetValue+0x19 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 254]
    0a 0015f4f0 0f91a327 00000004 00000000 0015f50c VCRUNTIME140D!__vcrt_FlsGetValue+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 281]
    0b 0015f508 0f919c5b 0015f524 0015f61c 0015f528 VCRUNTIME140D!__vcrt_getptd_noinit+0x27 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\per_thread_data.cpp @ 152]
    0c 0015f51c 0f2d4838 0015f614 00f123c1 c5653452 VCRUNTIME140D!__uncaught_exception+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\uncaught_exception.cpp @ 21]
    *** WARNING: Unable to verify checksum for file_search2.exe
    0d 0015f524 00f123c1 c5653452 0015f780 0015f61c MSVCP140D!std::uncaught_exception+0x8 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 9]
    0e 0015f614 00f11cd2 c56535d6 0015f88c 00000000 file_search2+0x123c1 (FPO: [Non-Fpo])
    0f 0015f790 00f12885 0f34cbe0 00f19b58 c5653ada file_search2+0x11cd2 (FPO: [Non-Fpo])
    10 0015f89c 00f131f3 00000001 0037d398 0037f0a8 file_search2+0x12885 (FPO: [Non-Fpo])
    11 0015f8bc 00f13047 c5653b5e 00000000 00000000 file_search2+0x131f3 (FPO: [Non-Fpo])
    12 0015f918 00f12edd 0015f928 00f13278 0015f934 file_search2+0x13047 (FPO: [Non-Fpo])
    13 0015f920 00f13278 0015f934 7583ef3c 7ffdd000 file_search2+0x12edd (FPO: [Non-Fpo])
    14 0015f928 7583ef3c 7ffdd000 0015f974 770c3618 file_search2+0x13278 (FPO: [Non-Fpo])
    15 0015f934 770c3618 7ffdd000 76d1f52b 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
    16 0015f974 770c35eb 00f113e3 7ffdd000 00000000 ntdll!__RtlUserThreadStart+0x70 (FPO: [Non-Fpo])
    17 0015f98c 00000000 00f113e3 7ffdd000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
    
       1  Id: 248c.2bc8 Suspend: 0 Teb: 7ffde000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 002bf438 770c09ba 76eff8eb 00000001 00000000 ntdll!RtlActivateActivationContextUnsafeFast+0x9c (FPO: [Non-Fpo])
    01 002bf4b4 770bfa3e 0037e9d0 771382e0 00000000 ntdll!LdrpProcessStaticImports+0x1b8 (FPO: [Non-Fpo])
    02 002bf630 770c2105 002bf684 771382e0 00000000 ntdll!LdrpLoadDll+0x33d (FPO: [Non-Fpo])
    03 002bf668 001700c5 00000000 00000000 002bf684 ntdll!LdrLoadDll+0xaf (FPO: [Non-Fpo])
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    04 002bf6a8 770a6acd 00170000 00000000 00000000 0x1700c5
    05 002bf9d8 770c3486 002bf9fc 77060000 00000000 ntdll!KiUserApcDispatcher+0x25
    06 002bf9e8 00000000 002bf9fc 77060000 00000000 ntdll!LdrInitializeThunk+0x10 (FPO: [Non-Fpo])
    

    3回目

    0:000> ~*kvn
    
    .  0  Id: 3298.251c Suspend: 0 Teb: 7ffde000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 002af5a4 770a65ac 77091db1 00000020 00000000 ntdll!KiFastSystemCallRet (FPO: [0,0,0])
    01 002af5a8 77091db1 00000020 00000000 00000000 ntdll!NtWaitForSingleObject+0xc (FPO: [3,0,0])
    02 002af60c 77091c95 00000000 00000000 002af674 ntdll!RtlpWaitOnCriticalSection+0x13e (FPO: [Non-Fpo])
    03 002af634 770bf82b 77138340 76e32319 0f4c18a0 ntdll!RtlEnterCriticalSection+0x150 (FPO: [Non-Fpo])
    04 002af6d0 770c208c 757f0000 002af70c 00000000 ntdll!LdrGetProcedureAddressEx+0x159 (FPO: [Non-Fpo])
    05 002af6ec 750a6d18 757f0000 002af70c 00000000 ntdll!LdrGetProcedureAddress+0x18 (FPO: [Non-Fpo])
    06 002af714 0f4ca79f 757f0000 0f4c18a0 757f0000 KERNELBASE!GetProcAddress+0x44 (FPO: [Non-Fpo])
    07 002af728 0f4ca59c 0f4c18a0 0f4c1898 0f4c18a0 VCRUNTIME140D!try_get_proc_address_from_first_available_module+0x2f (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 183]
    08 002af74c 0f4ca4b9 00000002 0f4c18a0 0f4c1898 VCRUNTIME140D!try_get_function+0x4c (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 211]
    09 002af764 0f4ca89b 002af788 0f249122 00000004 VCRUNTIME140D!try_get_FlsGetValue+0x19 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 254]
    0a 002af778 0f4ca327 00000004 00000000 002af794 VCRUNTIME140D!__vcrt_FlsGetValue+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_downlevel.cpp @ 281]
    0b 002af790 0f4c9c5b 002af7ac 002af8a4 002af7b0 VCRUNTIME140D!__vcrt_getptd_noinit+0x27 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\per_thread_data.cpp @ 152]
    0c 002af7a4 0fb74838 002af89c 00f123c1 84a6c7d0 VCRUNTIME140D!__uncaught_exception+0xb (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\uncaught_exception.cpp @ 21]
    *** WARNING: Unable to verify checksum for file_search2.exe
    0d 002af7ac 00f123c1 84a6c7d0 002afa08 002af8a4 MSVCP140D!std::uncaught_exception+0x8 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 9]
    0e 002af89c 00f11cd2 84a6c554 002afb14 00000000 file_search2+0x123c1 (FPO: [Non-Fpo])
    0f 002afa18 00f12885 0fbecbe0 00f19b58 84a6c468 file_search2+0x11cd2 (FPO: [Non-Fpo])
    10 002afb24 00f131f3 00000001 005bd398 005bf0a8 file_search2+0x12885 (FPO: [Non-Fpo])
    11 002afb44 00f13047 84a6c4ec 00000000 00000000 file_search2+0x131f3 (FPO: [Non-Fpo])
    12 002afba0 00f12edd 002afbb0 00f13278 002afbbc file_search2+0x13047 (FPO: [Non-Fpo])
    13 002afba8 00f13278 002afbbc 7583ef3c 7ffdf000 file_search2+0x12edd (FPO: [Non-Fpo])
    14 002afbb0 7583ef3c 7ffdf000 002afbfc 770c3618 file_search2+0x13278 (FPO: [Non-Fpo])
    15 002afbbc 770c3618 7ffdf000 76e32e35 00000000 kernel32!BaseThreadInitThunk+0xe (FPO: [Non-Fpo])
    16 002afbfc 770c35eb 00f113e3 7ffdf000 00000000 ntdll!__RtlUserThreadStart+0x70 (FPO: [Non-Fpo])
    17 002afc14 00000000 00f113e3 7ffdf000 00000000 ntdll!_RtlUserThreadStart+0x1b (FPO: [Non-Fpo])
    
       1  Id: 3298.34c0 Suspend: 0 Teb: 7ffdd000 Unfrozen
     # ChildEBP RetAddr  Args to Child              
    00 0048f4c8 770c09ba 7681208d 00000001 00000000 ntdll!RtlActivateActivationContextUnsafeFast+0x9c (FPO: [Non-Fpo])
    01 0048f544 770bfa3e 005be9d0 771382e0 00000000 ntdll!LdrpProcessStaticImports+0x1b8 (FPO: [Non-Fpo])
    02 0048f6c0 770c2105 0048f714 771382e0 00000000 ntdll!LdrpLoadDll+0x33d (FPO: [Non-Fpo])
    03 0048f6f8 000700c5 00000000 00000000 0048f714 ntdll!LdrLoadDll+0xaf (FPO: [Non-Fpo])
    WARNING: Frame IP not in any known module. Following frames may be wrong.
    04 0048f738 770a6acd 00070000 00000000 00000000 0x700c5
    05 0048fa68 770c3486 0048fa8c 77060000 00000000 ntdll!KiUserApcDispatcher+0x25
    06 0048fa78 00000000 0048fa8c 77060000 00000000 ntdll!LdrInitializeThunk+0x10 (FPO: [Non-Fpo])
    

    どこを比較すればいいのか・・・。実行の度にアドレスが変わるので。

    よろしくおねがいします。

    2019年6月14日 6:45
  • 3 つとも、Thread 0 と 1 の状態が全く同じ。。。。ということは、Thread 1 での ntdll!LdrLoadDll が問題なのではなく、Thread 0 の file_search2+0x123c1 での例外が、Thread 1 の ntdll!LdrLoadDll を誘発させている可能性があります。
    VS デバッガ上で例外が発生したときに、デバッグ対象スレッドをコンソール プログラムのメイン スレッドんび切り替え、file_search2+0x123c1 で何の処理を行っているのか、確認してみてください。
    (VS デバッガの場合、デバッグ 対象スレッドの切り替えは、画面上部の "スレッド" リスト ボックスで変更できるみたいです。)
    2019年6月14日 7:03
  • メインスレッドに切り替えるとソースコードでは「cout << "Hello world!" << endl;」を指していました。アセンブラで見ると

    010E286E  mov         dword ptr [ebp-4],0  
    		std::cout << "Hello World!" << std::endl;
    010E2875  push        offset string "Hello World!" (010E9B58h)  
    010E287A  mov         eax,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (010ED0D4h)]  
    010E287F  push        eax  
    010E2880  call        std::operator<<<std::char_traits<char> > (010E1221h)  
    010E2885  add         esp,8  
    010E2888  mov         dword ptr [ebp-0ECh],eax  
    010E288E  mov         esi,esp  
    010E2890  push        offset std::endl<char,std::char_traits<char> > (010E12C6h)  
    010E2895  mov         ecx,dword ptr [ebp-0ECh]  
    010E289B  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (010ED0A0h)]  
    010E28A1  cmp         esi,esp  
    010E28A3  call        __RTC_CheckEsp (010E12A3h)  

    「アドレス010E2885 add esp,8」を指しているので、その直前のcall文で例外が発生しているようです。

    コンソールにはHello world!は表示されているので、表示した直後ということなのでしょうね。

    追記:

    実際にアセンブラ表示でステップ実行してみました。やはりcall文の中の何処かのようです。アセンブラ表示に切り替えてステップ実行で見てみましたが、なかなか難しいですね。(何年ぶりだろうアセンブラでデバッグしたのは・・・)

    追追記:

    意地になってアセンブラを追いかけてみました。どうも<ostrem>の~sentryの中で呼ばれているuncaught_exceptionの中の、__vcrt_FlsGetValueの、_LdrGetProcedureAddressExの中で落ちていました。

    ostremaのC++ライブラリが臭い?

    • 編集済み pine 2019年6月14日 8:23
    2019年6月14日 7:39
  • > 010E2880  call        std::operator<<<std::char_traits<char> > (010E1221h)  

    上記のようなアドレス表示になっている場合は、以下のコマンドを入力し、その出力結果を教えてください。
    (要するに、カッコ表示されているアドレスで u コマンドを実行してほしいです。)
    u 010E1221 10

    それから、Build 時の Run-time Library を以下の設定に変更したバイナリで、もう一度試してもらえますか?
    --------------------------------
    <お願いしたいこと>
    Target Project のプロパティを開き、[構成プロパティ] -> [C/C++] -> [コード生成] の「ランタイム ライブラリ」の設定を確認してください。
    現在は恐らく、「マルチスレッド デバッグ DLL (/MDd)」になっていると思います。
    これを「マルチスレッド デバッグ (/MTd)」 および「マルチスレッド DLL (/MD)」に変更し、リビルドおよびデバッグ実行した場合の結果が知りたい。
    --------------------------------
    2019年6月14日 8:23
  • uコマンドの結果は「認識されないトークンです」と表示されます。(callのところでブレークして確認)

    また、確かに/MDdになっていたので/MTdや/MDにしましたが同じ様に例外が発生します。

    追記:

    すいません。今日はもう帰宅するので月曜日にやってみます。何かやることがあれば書いておいてください。よろしくお願いします。


    • 編集済み pine 2019年6月14日 8:41
    2019年6月14日 8:38
  • VS デバッガ上で "std::cout << "Hello World!" << std::endl;" の行に Breakpoint を設定後実行し、ここに Break-in した状態で以下のコマンドを実行し、その出力結果を教えてください。
    なお下記のアドレス部分は、先に提示された下記逆アセンブリ コードを基にしたものですが、リビルド等によりアドレスが変化している可能性があるので、事前に確認してからコマンド結果を採取して下ください。

    コマンド採取例の前提となるコード

    010E286E  mov         dword ptr [ebp-4],0  
      std::cout << "Hello World!" << std::endl;
    010E2875  push        offset string "Hello World!" (010E9B58h)  
    010E287A  mov         eax,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (010ED0D4h)]  
    010E287F  push        eax  
    010E2880  call        std::operator<<<std::char_traits<char> > (010E1221h)  
    010E2885  add         esp,8  
    010E2888  mov         dword ptr [ebp-0ECh],eax  
    010E288E  mov         esi,esp  
    010E2890  push        offset std::endl<char,std::char_traits<char> > (010E12C6h)  
    010E2895  mov         ecx,dword ptr [ebp-0ECh]  
    010E289B  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (010ED0A0h)]  
    010E28A1  cmp         esi,esp  
    010E28A3  call        __RTC_CheckEsp (010E12A3h)  

    -------------------------------------
    <確認してほしいコマンド>
    ☆ db 0x010E9B58
    ☆ u 0x010ED0D4
    ☆ u 0x010E1221
    -------------------------------------

    比較参考のため、私が (不慣れな) VS デバッガで採取した結果を添付しておきます。

         9: 	std::cout << "Hello World!" << std::endl;
    012B243E 8B F4                mov         esi,esp  
    012B2440 68 96 10 2B 01       push        offset std::endl<char,std::char_traits<char> > (012B1096h)  
                                                                                             ^^^^^^^^^^^
                                                                                                 ①
    012B2445 68 30 8B 2B 01       push        offset string "Hello World!" (012B8B30h)  
                                                                           ^^^^^^^^^^^
                                                                                ②
    012B244A A1 D4 C0 2B 01       mov         eax,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (012BC0D4h)]  
                                                                                                                           ^^^^^^^^^^^
                                                                                                                               ③
    012B244F 50                   push        eax  
    012B2450 E8 25 EF FF FF       call        std::operator<<<std::char_traits<char> > (012B137Ah)  
                                                                                       ^^^^^^^^^^^
                                                                                           ④
    012B2455 83 C4 08             add         esp,8  
    012B2458 8B C8                mov         ecx,eax  
    012B245A FF 15 A0 C0 2B 01    call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (012BC0A0h)]  
    012B2460 3B F4                cmp         esi,esp  
    012B2462 E8 FC EC FF FF       call        __RTC_CheckEsp (012B1163h)  

    ++++++++++++++++++++++++++++

    >u 0x012b1096
    std::endl<char,std::char_traits<char> >:
    012B1096  jmp         std::endl<char,std::char_traits<char> > (012B1DB0h)
    ^^^^^^^^
    >u 0x012B1DB0
    --- c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.14.26428\include\ostream
    012B1DB0  push        ebp 
    012B1DB1  mov         ebp,esp
    012B1DB3  sub         esp,0C0h
    012B1DB9  push        ebx 
    012B1DBA  push        esi 
    012B1DBB  push        edi 
    012B1DBC  lea         edi,[ebp-0C0h]
    012B1DC2  mov         ecx,30h
    ++++++++++++++++++++++++++++

    >db 0x012B8B30
    0x012B8B30  48 65 6c 6c 6f 20 57 6f 72 6c 64 21 00 00 00 00 
                        ^^^^^^^^^^^^^^^^^^^^^^^
                                          Hello World!
    ++++++++++++++++++++++++++++

    >u 0x012BC0D4
    012BC0D4  loopne      KERNEL32_NULL_THUNK_DATA+35h (012BC091h)
    012BC0D6  stc             
    012BC0D7  push        ecx 
    012BC0D8  ror         byte ptr [edx+esi*8+51h],0
    012BC0DD  add         byte ptr [eax],al
    012BC0DF  add         byte ptr [eax],al
    012BC0E1  add         byte ptr [eax],al
    012BC0E3  add         byte ptr [eax],al
    0x012BC0D4 : ConsoleApplication1!_imp_?coutstd:
    ++++++++++++++++++++++++++++

    >u 0x012b137a
    std::operator<<<std::char_traits<char> >:
    012B137A  jmp         std::operator<<<std::char_traits<char> > (012B17E0h)
    _sprintf_s:
    012B137F  jmp         sprintf_s (012B3470h)
    _InitializeSListHead@4:
    012B1384  jmp         _InitializeSListHead@4 (012B58FDh)
    ___scrt_stub_for_is_c_termination_complete:
    012B1389  jmp         __scrt_stub_for_is_c_termination_complete (012B5990h)
    >u 0x012B17E0
    --- c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.14.26428\include\ostream
    std::operator<<<std::char_traits<char> >:
    012B17E0  push        ebp 
    012B17E1  mov         ebp,esp
    012B17E3  push        0FFFFFFFFh
    012B17E5  push        12B6D58h
    012B17EA  mov         eax,dword ptr fs:[00000000h]
    012B17F0  push        eax 
    012B17F1  push        ecx 
    012B17F2  sub         esp,154h
    ++++++++++++++++++++++++++++



    • 編集済み お馬鹿 2019年6月15日 5:46
    2019年6月15日 5:39
  • おはようございます。

    もし、足りないものがあれば言ってください。

    00C3283E  mov         dword ptr [ebp-4],0  
    		std::cout << "Hello World!" << std::endl;
    00C32845  push        offset string "Hello World!" (0C38B58h)  
    00C3284A  mov         eax,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (0C3C0D4h)]  
    00C3284F  push        eax  
    00C32850  call        std::operator<<<std::char_traits<char> > (0C3121Ch)  
    00C32855  add         esp,8  
    00C32858  mov         dword ptr [ebp-0ECh],eax  
    00C3285E  mov         esi,esp  
    00C32860  push        offset std::endl<char,std::char_traits<char> > (0C312C1h)  
    00C32865  mov         ecx,dword ptr [ebp-0ECh]  
    00C3286B  call        dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0C3C0A0h)]  
    00C32871  cmp         esi,esp  
    00C32873  call        __RTC_CheckEsp (0C3129Eh)  
    
    >db 0x0c38B58
    0x00C38B58  48 65 6c 6c 6f 20 57 6f 72 6c 64 21 00 00 00 00
    
    >u 0x0C3C0D4
    00C3C0D4  loopne      __imp_std::basic_ostream<char,std::char_traits<char> >::operator<<+1h (0C3C0A1h) 
    00C3C0D6  cmps        byte ptr [esi],byte ptr es:[edi] 
    00C3C0D7  wrmsr            
    00C3C0D9  dec         eax  
    00C3C0DA  lahf             
    00C3C0DB  sldt        word ptr [eax] 
    00C3C0DE  add         byte ptr [eax],al 
    00C3C0E0  add         byte ptr [eax],al 
    
    >u 0x0C3121C
    std::operator<<<std::char_traits<char> >:
    00C3121C  jmp         std::operator<<<std::char_traits<char> > (0C31850h) 
    std::basic_ostream<char,std::char_traits<char> >::operator<<:
    00C31221  jmp         std::basic_ostream<char,std::char_traits<char> >::operator<< (0C329EAh) 
    ___scrt_is_nonwritable_in_current_image:
    00C31226  jmp         __scrt_is_nonwritable_in_current_image (0C33EF3h) 
    std::basic_ios<char,std::char_traits<char> >::widen:
    00C3122B  jmp         std::basic_ios<char,std::char_traits<char> >::widen (0C329DEh) 
    _GetCurrentProcessId@0:
    00C31230  jmp         _GetCurrentProcessId@0 (0C34FBAh) 
    __initterm:
    00C31235  jmp         __initterm (0C34EE2h) 
    __JustMyCode_Default:
    00C3123A  jmp         _JustMyCode_Default (0C327E0h) 
    __RTC_SetErrorFunc:
    00C3123F  jmp         _RTC_SetErrorFunc (0C33BC6h) 
    
    >u 0x0C31850
    --- C:\Program Files\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\ostream 
    std::operator<<<std::char_traits<char> >:
    00C31850  push        ebp  
    00C31851  mov         ebp,esp 
    00C31853  push        0FFFFFFFFh 
    00C31855  push        0C363A8h 
    00C3185A  mov         eax,dword ptr fs:[00000000h] 
    00C31860  push        eax  
    00C31861  push        ecx  
    00C31862  sub         esp,154h 
    

    2019年6月17日 0:03
  • うーーーーーん、全く問題ありませんね。。。。まぁ、当然なんですけど。。。根本的な発想が間違ってるのかな。。。。
    Thread 1 の DLL Injection のスレッドで例外が発生するとき、Thread 0 の状態は常に同じ。。。。ということは、Thread 1 は Thread 0 での何らかの処理に起因して生成されていると思うのです。
    で、それが本問題の一番大元となる要因では。。。と考え、とりあえず "Hello World!" 文字列出力処理での各関数が仮想メモリ上にロードされているかを確認してもらったわけですけど、当然それらはロードされていた。
    となると、Thread 0 の "KERNELBASE!GetProcAddress" では、なんの関数アドレスを調べてるんだろう?

    。。。。という訳で、以下の内容を確認してもらえますか?
    -----------------------------------------------------
    <確認してほしいこと>

    どれでもいいので、過去に採取したプロセス ダンプを WinDBG で開き、Thread 0 の下記 Frame 06 部分に着目してください。

    06 002af714 0f4ca79f 757f0000 0f4c18a0 757f0000 KERNELBASE!GetProcAddress+0x44 (FPO: [Non-Fpo])

    で、以下のコマンドを実行し、モジュールの先頭アドレスが "757f0000" の DLL と、"0f4c18a0" にセットされている関数名を確認してください。

    ~*kvn
    lmi
    da 0f4c18a0
    -----------------------------------------------------

    • 編集済み お馬鹿 2019年6月17日 1:17
    2019年6月17日 1:16
  • 06 0031f93c 0f5ea79f 757f0000 0f5e18a0 757f0000 KERNELBASE!GetProcAddress+0x44 (FPO: [Non-Fpo])

    0:000> lmi start end module name 00f00000 00f23000 file_search2 C (no symbols) 0f5e0000 0f5fb000 VCRUNTIME140D (private pdb symbols) VCRUNTIME140D.dll 0f7f0000 0f964000 ucrtbased (deferred) 0ffd0000 10088000 MSVCP140D (private pdb symbols) MSVCP140D.dll 68600000 68603000 api_ms_win_core_file_l1_2_0 (deferred) 68610000 68613000 api_ms_win_core_processthreads_l1_1_1 (deferred) 68620000 68623000 api_ms_win_core_localization_l1_2_0 (deferred) 68630000 68633000 api_ms_win_core_file_l2_1_0 (deferred) 68640000 68643000 api_ms_win_core_timezone_l1_1_0 (deferred) 6ffd0000 6ffd3000 api_ms_win_core_synch_l1_2_0 (deferred) 74740000 747d1000 TmUmEvt (deferred) 750a0000 750eb000 KERNELBASE (pdb symbols) KERNELBASE.dll 757f0000 758c5000 kernel32 (pdb symbols) kernel32.dll 77060000 771a2000 ntdll (pdb symbols) ntdll.dll 0:000> da 0f5e18a0 0f5e18a0 "FlsGetValue"

    KERNEBASE.DLLのFlsGetValue関数ですね。
    2019年6月17日 1:55
  • > ということは、Thread 1 は Thread 0 での何らかの処理に起因して生成されていると思うのです。

    これをヒントにデバッグオプションの「デバッグの停止時に自動的にコンソールを閉じる」にチェックを入れた場合(例外は起きない)と外した場合(例外が起きる)で、std::coutでブレークインしたときのスレッドを確認してみました。チェックを入れたときは

    で、チェックを外したときは、

    でした。チェックを入れたときはウィルスバスター関係のDLLが入っていますが、チェックを外したときつまり例外が発生するときは、ntdll.dll!_DbgUiRemoteBreakinというスレッドが動いています。起因となっているのはこの関数じゃないでしょうか?


    • 編集済み pine 2019年6月17日 2:18
    2019年6月17日 2:13
  • WinDBG から該当アプリを起動させ、起動直後に Break-in したタイミングで下記 Breakpoint をセットし、ここに引っかかるか確認してみてください。
    もし WinDBG 環境でヒットしないのであれば、確かにこれが要因になってるのかも。

    bp ntdll!DbgUiRemoteBreakin ".echo \"-----------------------------\"; .echo \"!!!!! Hit ntdll!DbgUiRemoteBreakin !!!!!\"; kvn; g"

    ちなみに、私は VS デバッガに関しては全くの素人なのですが、VS デバッガ上で "ntdll.dll" や "kernelbase.dll" といった外部モジュール内の関数に "Breakpoint" を張るのって、どーやればいいんですかね?
    VS に詳しい人、教えてください。

    2019年6月17日 2:52
  • ヒットしないです。

    デバッグオプションのチェックの有無で、アプリの実行形態が変わっています。以下は、Process Explorerでcoutでブレークしたときの状態です。

    チェックなし

    チェックあり

    このVsDebugConsole.exeの子プロセスとして動くときは例外が出て、devenv.exe直接の子プロセスとしてアプリが動くときは、例外が出ません。たぶん、VsDebugConsole.exeがアプリが終了してもコンソール画面を表示し続けるためのプロセスだと思いますが、これが例外を起こしている可能性が高いのでしょうね。

    (となるとVisual Stduio側の問題になりますかね・・・)

    2019年6月17日 3:57
  • VS デバッガ上で "ntdll.dll" や "kernelbase.dll" といった外部モジュール内の関数に "Breakpoint" を張るのって、どーやればいいんですかね?
    関数ブレークポイントで設定できますよ。ntdll!DbgUiRemoteBreakinという指定方法も受け付けます。
    2019年6月17日 4:57
  • もしかして、TrendMicro のモジュールがデバッグ関連の API を Hook していて、それが ntdll!DbgUiRemoteBreakin コールを阻害しているのかなぁ。。。

    以下のコマンドの出力結果をもらえますか?

    x kernelbase!Debug*
    !chkimg -db kernelbase

    x ntdll!Dbg*
    !chkimg -db ntdll

    2019年6月17日 4:58
  • これは、WinDBGのコマンドですよね。

    0:000> x kernelbase!Debug*
    750d4b65          KERNELBASE!DebugBreak (<no parameter info>)
    0:000> !chkimg -db kernelbase
    0 errors : kernelbase 
    0:000> x ntdll!Dbg*
    770fed23          ntdll!DbgUiDebugActiveProcess (<no parameter info>)
    77093c44          ntdll!DbgUserBreakPoint (<no parameter info>)
    770febf8          ntdll!DbgUiSetThreadDebugObject (<no parameter info>)
    770feb94          ntdll!DbgUiConnectToDbg (<no parameter info>)
    770fec83          ntdll!DbgUiRemoteBreakin (<no parameter info>)
    770fed65          ntdll!DbgUiConvertStateChangeStructure (<no parameter info>)
    77108f54          ntdll!DbgPrompt (<no parameter info>)
    770febe6          ntdll!DbgUiGetThreadDebugObject (<no parameter info>)
    770fecdc          ntdll!DbgUiIssueRemoteBreakin (<no parameter info>)
    77109019          ntdll!DbgPrintReturnControlC (<no parameter info>)
    770fec3c          ntdll!DbgUiContinue (<no parameter info>)
    770fec15          ntdll!DbgUiWaitStateChange (<no parameter info>)
    77093c48          ntdll!DbgBreakPoint (<no parameter info>)
    770fec61          ntdll!DbgUiStopDebugging (<no parameter info>)
    7707f7eb          ntdll!DbgPrint (<no parameter info>)
    77093c3c          ntdll!DbgBreakPointWithStatus (<no parameter info>)
    77108faa          ntdll!DbgSetDebugFilterState (<no parameter info>)
    77108f9a          ntdll!DbgQueryDebugFilterState (<no parameter info>)
    77081c7e          ntdll!DbgPrintEx (<no parameter info>)
    0:000> !chkimg -db ntdll
    0 errors : ntdll 
    

    両方共エラーなしですね。

    2019年6月17日 5:25
  • > 関数ブレークポイントで設定できますよ。
    > ntdll!DbgUiRemoteBreakinという指定方法も受け付けます。

    ご教授いただき、ありがとうございます。
    おかげ様で Breakpoint の設定ができました。

    > 両方共エラーなしですね。
    ????
    "!chkimg -db kernelbase" と "!chkimg -db ntdll" が "0 errors" ?
    ぢゃぁ、TmUmEvt.dll はなにをしているんだろう。。。。てっきり API Hook しているんだと思ってたけど。
    ウィルスバスターって、監視を除外する例外設定ってできるんですよね?
    コンソール アプリと "VsDebugConsole.exe" を、ウィルスバスター監視下から除外する設定をした場合にどうなるか、試してもらえますか?
    それで変化が無ければ、申し訳ないけど私にはお手上げ。
    2019年6月17日 7:22
  • chkimgコマンドですけど、例外発生後にプロセスダンプしたものや、EXEをロードして1ステップ実行後にやってみたりとかやりましたけど、エラーなしでした。

    > ウィルスバスターって、監視を除外する例外設定ってできるんですよね?
    > コンソール アプリと "VsDebugConsole.exe" を、ウィルスバスター監視下から除外する設定をした場合にどうなるか、試してもらえますか?

    ああ、自動検索除外はコーポレート版なのでシステム管理者にお願いしないとできないんですよ。それも絶対パスを指定しなといけないので、プログラム開発者からしたらはっきり言って使えないです。(手動検索の除外設定は各PCで設定できるんですけどね。ただし絶対パス。なので、一時的にアンインストールするしか無いのですが、パスワードでアンインストできないように保護されているし・・・)

    英語のフォーラムを少し覗いてみたんですが、VS2017で同じような例外に遭遇してる人がいるみたいです。ただ、デバッグオプションのチェックにまで言及しているものはなくて、全く同じかどうか不明です。また、「対応をしているところです」的な返信もあるんですけど、解決したかどうかが動きがないのでわからない。

    Virtual PCでゲストOSにVS2019をインストールして確かめる手はありそうですが、そこまでやるかどうか悩みどころ。


    追記:

    例外が発生してブレークインした時にProcess Explorerで見ると、VsDebugConsole.exeのThreadにはTmUmEvt.dllとtmmon.dllが動いていますが、コンソールアプリの方のThreadにはこの2つは見当たらないです。

    • 編集済み pine 2019年6月17日 8:31
    2019年6月17日 8:23
  • あんまり意味ないかもしれませんが、一応下記コマンドも実行してみてください。(WinDBG で。)
    !chkimg -db kernel32

    > 英語のフォーラムを少し覗いてみたんですが、
    > VS2017で同じような例外に遭遇してる人がいるみたいです。
    US の OSR とかのフォーラムでは VS2013, 2015, 2017 で、今回と同じようなコール スタック状態で落ちている事例がいくつか報告されています。
    そのうちのいくつかは、「デバッグの停止時に自動的にコンソールを閉じる」をチェックすることで改善することも確認されています。
    つまり今回と同じ現象なんですけど、いずれも未解決。。。
    個人的には、該当プロセスにインジェクションされた 3rd ベンダー製 DLL の影響だと思うんですけど、いまいち確証が得られない。。。
    TmUmEvt.dll が何をやってるのか、ちょっと調べたい気もするけど、その手順を説明するのもさすがにめんどくさいし。。。
    あとは、TmUmEvt.dll を強制的に Unload させた場合にどうなるか。。。くらいしか思い浮かばないです。

    追記
    > 例外が発生してブレークインした時にProcess Explorerで見ると、
    > VsDebugConsole.exeのThreadにはTmUmEvt.dllとtmmon.dllが動いていますが、
    > コンソールアプリの方のThreadにはこの2つは見当たらないです。

    採取したダンプを lmi コマンドで確認する限り、TmUmEvt.dll はロードされているようなのですが、以下のコマンドで TmUmEvt.dll の PE Header が読めるか確認してもらえますか?

    !dh -a TmUmEvt

    • 編集済み お馬鹿 2019年6月17日 9:22
    2019年6月17日 9:14
  • > あんまり意味ないかもしれませんが、一応下記コマンドも実行してみてください。(WinDBG で。)
    > !chkimg -db kernel32

    エラーなしですね。

    cout直前でブレークし、VsDebugConsole.exeに張り付いているトレンドマイクロのDLLをProcess ExplorerでSuspend状態にした後に実行しましたが同じでした。例外発生後も活動してないことは確認済み。(例外が出てるのがコンソールアプリの方なのでそうでしょうね。)

    確かにウイルスバスターの無い環境でどうなのかは見てみたいところですよね・・・。

    x64のコンソールアプリで落ちている例もUSサイトにありましたね。それも未解決みたいですが。デバッグオプションにチェックを入れたら改善するので、MSもあまりやる気がでないのかも?

    2019年6月17日 9:28
  • PE Header で思い出しましたが、コンソール アプリの IAT を確認すのをわすれてました。
    TmUmEvt が IAT の書き換えによる API Hook をしている可能性は低いのですが、念のため WinDBG でコンソール アプリ (file_search2) のシンボルを合わせた状態で、以下のコマンドを実行してください。

    lmi
    !dh -i file_search2
    2019年6月18日 0:40
  • dhコマンドに i オプションがないと言われたので、f オプションで表示させました。

    0:000> lmi
    start    end        module name
    00c40000 00c62000   file_search2   (deferred)             
    0f1c0000 0f1d3000   VCRUNTIME140   (deferred)             
    0f460000 0f47b000   VCRUNTIME140D   (deferred)             
    0f8d0000 0f988000   MSVCP140D   (deferred)             
    0fd60000 0fed4000   ucrtbased   (deferred)             
    63910000 63913000   api_ms_win_crt_locale_l1_1_0   (deferred)             
    63980000 63a5f000   ucrtbase   (deferred)             
    63ae0000 63ae5000   api_ms_win_crt_math_l1_1_0   (deferred)             
    63c50000 63c54000   api_ms_win_crt_convert_l1_1_0   (deferred)             
    63c60000 63c64000   api_ms_win_crt_stdio_l1_1_0   (deferred)             
    63c70000 63c73000   api_ms_win_crt_heap_l1_1_0   (deferred)             
    63c80000 63c84000   api_ms_win_crt_string_l1_1_0   (deferred)             
    63c90000 63c93000   api_ms_win_core_file_l1_2_0   (deferred)             
    63ca0000 63ca3000   api_ms_win_core_processthreads_l1_1_1   (deferred)             
    63f10000 63f13000   api_ms_win_core_localization_l1_2_0   (deferred)             
    63f20000 63f23000   api_ms_win_core_file_l2_1_0   (deferred)             
    64130000 64133000   api_ms_win_core_timezone_l1_1_0   (deferred)             
    65440000 65444000   api_ms_win_crt_runtime_l1_1_0   (deferred)             
    6fe60000 6fe63000   api_ms_win_core_synch_l1_2_0   (deferred)             
    74e90000 74edb000   KERNELBASE   (deferred)             
    75600000 756d5000   kernel32   (deferred)             
    76e90000 76fd2000   ntdll      (pdb symbols)          C:\Windows\SYSTEM32\ntdll.dll
    0:000> !dh -f file_search2
    
    File Type: EXECUTABLE IMAGE
    FILE HEADER VALUES
         14C machine (i386)
           9 number of sections
    5D035CAD time date stamp Fri Jun 14 17:37:01 2019
    
           0 file pointer to symbol table
           0 number of symbols
          E0 size of optional header
         102 characteristics
                Executable
                32 bit word machine
    
    OPTIONAL HEADER VALUES
         10B magic #
       14.21 linker version
        6600 size of code
        5200 size of initialized data
           0 size of uninitialized data
       113D4 address of entry point
        1000 base of code
             ----- new -----
    00c40000 image base
        1000 section alignment
         200 file alignment
           3 subsystem (Windows CUI)
        6.00 operating system version
        0.00 image version
        6.00 subsystem version
       22000 size of image
         400 size of headers
           0 checksum
    00100000 size of stack reserve
    00001000 size of stack commit
    00100000 size of heap reserve
    00001000 size of heap commit
        8140  DLL characteristics
                Dynamic base
                NX compatible
                Terminal server aware
           0 [       0] address [size] of Export Directory
       1C2FC [      C8] address [size] of Import Directory
       20000 [     43C] address [size] of Resource Directory
           0 [       0] address [size] of Exception Directory
           0 [       0] address [size] of Security Directory
       21000 [     458] address [size] of Base Relocation Directory
       194D0 [      38] address [size] of Debug Directory
           0 [       0] address [size] of Description Directory
           0 [       0] address [size] of Special Directory
           0 [       0] address [size] of Thread Storage Directory
       19508 [      40] address [size] of Load Configuration Directory
           0 [       0] address [size] of Bound Import Directory
       1C000 [     2FC] address [size] of Import Address Table Directory
           0 [       0] address [size] of Delay Import Directory
           0 [       0] address [size] of COR20 Header Directory
           0 [       0] address [size] of Reserved Directory
    

    2019年6月18日 2:06
  • > dhコマンドに i オプションがないと言われたので、f オプションで表示させました。

    ない訳ないと思います。
    実際に、"file_search2" の IAT には、Import Function が定義されてるし。

     1C000 [     2FC] address [size] of Import Address Table Directory

    "!dh -?" の出力はっどうなってますか?
    1: kd> !dh -?
    Usage: dh [options] address
    Dumps headers from an image based at address
    Options:
       -a      Dump everything
       -f      Dump file headers
       -s      Dump section headers
       -e      Dump exports
       -i      Dump imports
    2019年6月18日 2:53
  • 0:000> !dh -?
    Usage: dh [options] address

    Dumps headers from an image based at address

    Options:

       -a      Dump everything
       -f      Dump file headers
       -s      Dump section headers

    Microsoft (R) Windows Debugger Version 6.3.9600.17298 X86

    バージョンが古いですか?ちょっと新しいバージョンにアップデートしてみます。

    2019年6月18日 3:53
  • 使ってる WinDBG かなり古いですね。。。。10年ぐらい前のやつ?
    新しくインストールするなら、"WinDbg Preview" がお勧めです。
    Microsoft ストアーから単体でインストールできます。
    "WinDbg Preview" では TTD (Time Travel Debugging) という機能がサポートされているので、アプリ開発でのデバッグでは、VS デバッガより強力かも。

    ちなみに PE Header のIAT は、 d コマンドでも一応確認出来ます。
    例えば、"!dh -f" で以下のように IAT の Offset およびサイズが判明している場合、

    0:000> !dh -f file_search2
    .....
       1C000 [     2FC] address [size] of Import Address Table Directory
    .....

    以下のコマンドで Import Function のリストを表示できます。

    dds file_search2+0x1C000 file_search2+0x1C000+0x2FC

    もっとも、"!dh -i" 方が見やすいですけど。
    2019年6月18日 5:22
  • 5年前ですね。Windows Kits 8.1ってやつです。

    WinDBG PreviewはWindows10でないと使えない?

    とりあえず、ddsコマンドの内容を貼り付けます。

    0:000> dds file_search2+0x1C000 file_search2+0x1C000+0x2FC
    0012c000  7564ff05 kernel32!GetProcessHeapStub
    0012c004  75647ff2 kernel32!IsDebuggerPresentStub
    0012c008  7563f362 kernel32!RaiseExceptionStub
    0012c00c  7564f0d7 kernel32!MultiByteToWideCharStub
    0012c010  7564f0ca kernel32!WideCharToMultiByteStub
    0012c014  756608b9 kernel32!UnhandledExceptionFilter
    0012c018  7564f6cb kernel32!SetUnhandledExceptionFilter
    0012c01c  7564d970 kernel32!GetCurrentProcessStub
    0012c020  75642e0d kernel32!TerminateProcessStub
    0012c024  75656e4e kernel32!IsProcessorFeaturePresent
    0012c028  7564c5f2 kernel32!QueryPerformanceCounterStub
    0012c02c  7564d985 kernel32!GetCurrentProcessIdStub
    0012c030  7564d9e6 kernel32!GetSystemTimeAsFileTimeStub
    0012c034  76ef5d85 ntdll!RtlInitializeSListHead
    0012c038  7564e4ad kernel32!GetStartupInfoWStub
    0012c03c  7564ce7c kernel32!GetModuleHandleWStub
    0012c040  7564cfb0 kernel32!GetLastErrorStub
    0012c044  7564ce64 kernel32!GetProcAddressStub
    0012c048  7564f137 kernel32!FreeLibraryStub
    0012c04c  75656e6f kernel32!VirtualQueryStub
    0012c050  7564c5e0 kernel32!GetCurrentThreadIdStub
    0012c054  7564c590 kernel32!HeapFree
    0012c058  76ee296e ntdll!RtlAllocateHeap
    0012c05c  00000000
    0012c060  00000000
    0012c064  00000000
    0012c068  00000000
    0012c06c  00000000
    0012c070  00000000
    0012c074  00000000
    0012c078  00000000
    0012c07c  00000000
    0012c080  00000000
    0012c084  00000000
    0012c088  00000000
    0012c08c  00000000
    0012c090  00000000
    0012c094  00000000
    0012c098  0f7baf10 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::flush [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 507]
    0012c09c  0f803d00 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::put [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 470]
    0012c0a0  0f7f8770 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::operator<< [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 171]
    0012c0a4  0f7bae30 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::_Osfx [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 142]
    0012c0a8  0f7b71b0 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::widen [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 110]
    0012c0ac  0f7fec00 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::fill [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 96]
    0012c0b0  0f7bb000 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::rdbuf [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 76]
    0012c0b4  0f7bb020 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::tie [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 66]
    0012c0b8  0f7b6630 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::setstate [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 49]
    0012c0bc  0f8070a0 MSVCP140D!std::basic_streambuf<char,std::char_traits<char> >::sputn [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\streambuf @ 167]
    0012c0c0  0f7c1670 MSVCP140D!std::basic_streambuf<char,std::char_traits<char> >::sputc [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\streambuf @ 162]
    0012c0c4  0f7b73c0 MSVCP140D!std::ios_base::width [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 392]
    0012c0c8  0f7b7400 MSVCP140D!std::ios_base::width [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 388]
    0012c0cc  0f7b4e50 MSVCP140D!std::ios_base::flags [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 351]
    0012c0d0  0f7b4f60 MSVCP140D!std::ios_base::good [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 320]
    0012c0d4  0f83cbe0 MSVCP140D!std::cout
    0012c0d8  0f7c4830 MSVCP140D!std::uncaught_exception [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 7]
    0012c0dc  00000000
    0012c0e0  00000000
    0012c0e4  00000000
    0012c0e8  00000000
    0012c0ec  00000000
    0012c0f0  00000000
    0012c0f4  00000000
    0012c0f8  00000000
    0012c0fc  00000000
    0012c100  00000000
    0012c104  00000000
    0012c108  00000000
    0012c10c  00000000
    0012c110  00000000
    0012c114  000f7cc0 VCRUNTIME140!__vcrt_GetModuleFileNameW [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_thunks.cpp @ 20]
    0012c118  000f4080 VCRUNTIME140!_except_handler4_common [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\i386\chandler4.c @ 316]
    0012c11c  000fd7e0 VCRUNTIME140!__CxxFrameHandler2 [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\i386\trnsctrl.cpp @ 196]
    0012c120  000f7cf0 VCRUNTIME140!__vcrt_LoadLibraryExW [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_thunks.cpp @ 60]
    0012c124  000f3930 VCRUNTIME140!memset [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\string\i386\memset.asm @ 61]
    0012c128  000f75c0 VCRUNTIME140!__std_type_info_destroy_list [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\std_type_info.cpp @ 139]
    0012c12c  000f7540 VCRUNTIME140!__std_exception_destroy [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\std_exception.cpp @ 43]
    0012c130  00000000
    0012c134  00000000
    0012c138  00000000
    0012c13c  00000000
    0012c140  00000000
    0012c144  00000000
    0012c148  00000000
    0012c14c  00000000
    0012c150  00000000
    0012c154  00000000
    0012c158  00000000
    0012c15c  00000000
    0012c160  639bf990 ucrtbase!_set_new_mode
    0012c164  639b0740 ucrtbase!free
    0012c168  00000000
    0012c16c  00000000
    0012c170  00000000
    0012c174  00000000
    0012c178  00000000
    0012c17c  00000000
    0012c180  00000000
    0012c184  00000000
    0012c188  00000000
    0012c18c  00000000
    0012c190  00000000
    0012c194  639bf310 ucrtbase!_configthreadlocale
    0012c198  00000000
    0012c19c  00000000
    0012c1a0  00000000
    0012c1a4  00000000
    0012c1a8  00000000
    0012c1ac  00000000
    0012c1b0  00000000
    0012c1b4  00000000
    0012c1b8  00000000
    0012c1bc  00000000
    0012c1c0  00000000
    0012c1c4  63a276c0 ucrtbase!__setusermatherr
    0012c1c8  00000000
    0012c1cc  00000000
    0012c1d0  00000000
    0012c1d4  00000000
    0012c1d8  00000000
    0012c1dc  00000000
    0012c1e0  00000000
    0012c1e4  00000000
    0012c1e8  00000000
    0012c1ec  00000000
    0012c1f0  00000000
    0012c1f4  63a07d80 ucrtbase!terminate
    0012c1f8  639ad440 ucrtbase!_initialize_onexit_table
    0012c1fc  63a084f0 ucrtbase!__p___argv
    0012c200  639bec50 ucrtbase!_controlfp_s
    0012c204  63a09da0 ucrtbase!_crt_at_quick_exit
    0012c208  63a09d40 ucrtbase!_register_thread_local_exe_atexit_callback
    0012c20c  639bfb50 ucrtbase!_crt_atexit
    0012c210  639b4d90 ucrtbase!_execute_onexit_table
    0012c214  639c03f0 ucrtbase!__p___argc
    0012c218  63a09d00 ucrtbase!_c_exit
    0012c21c  63a09ce0 ucrtbase!_Exit
    0012c220  639a9c00 ucrtbase!exit
    0012c224  639ac2a0 ucrtbase!_initterm_e
    0012c228  639bcef0 ucrtbase!_initterm
    0012c22c  63a33bc0 ucrtbase!_get_initial_narrow_environment
    0012c230  639c0a60 ucrtbase!_initialize_narrow_environment
    0012c234  639bc900 ucrtbase!_configure_narrow_argv
    0012c238  63a06ff0 ucrtbase!_seh_filter_dll
    0012c23c  639c00a0 ucrtbase!_set_app_type
    0012c240  639a5c90 ucrtbase!_seh_filter_exe
    0012c244  639afb30 ucrtbase!_register_onexit_function
    0012c248  63a37bc0 ucrtbase!system
    0012c24c  63a09d20 ucrtbase!_cexit
    0012c250  00000000
    0012c254  00000000
    0012c258  00000000
    0012c25c  00000000
    0012c260  00000000
    0012c264  00000000
    0012c268  00000000
    0012c26c  00000000
    0012c270  00000000
    0012c274  00000000
    0012c278  00000000
    0012c27c  00000000
    0012c280  00000000
    0012c284  00000000
    0012c288  00000000
    0012c28c  639b9870 ucrtbase!__stdio_common_vsprintf_s
    0012c290  639bfe80 ucrtbase!__p__commode
    0012c294  639bf960 ucrtbase!_set_fmode
    0012c298  00000000
    0012c29c  00000000
    0012c2a0  00000000
    0012c2a4  00000000
    0012c2a8  00000000
    0012c2ac  00000000
    0012c2b0  00000000
    0012c2b4  00000000
    0012c2b8  00000000
    0012c2bc  00000000
    0012c2c0  00000000
    0012c2c4  639c1410 ucrtbase!strcpy_s
    0012c2c8  639c1220 ucrtbase!strcat_s
    0012c2cc  639c1720 ucrtbase!strlen
    0012c2d0  00000000
    0012c2d4  00000000
    0012c2d8  00000000
    0012c2dc  00000000
    0012c2e0  00000000
    0012c2e4  00000000
    0012c2e8  00000000
    0012c2ec  00000000
    0012c2f0  00000000
    0012c2f4  00000000
    0012c2f8  00000000
    0012c2fc  0001c45c
    

    2019年6月18日 5:40
  • Windows10のパソコンにWinDBG Previewを入れて、Windows7で採取したプロセスダンプとPDBファイルを読み込ませて、dh -iで出力させました。

    0:000> !dh -i file_search2
      _IMAGE_IMPORT_DESCRIPTOR 0012c2fc
        MSVCP140D.dll
                  0012C098 Import Address Table
                  0012C45C Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           0F7BAF10  370 ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ
           0F803D00  469 ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z
           0F7F8770  10C ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z
           0F7BAE30  24C ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ
           0F7B71B0  53C ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z
           0F7FEC00  369 ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ
           0F7BB000  48F ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ
           0F7BB020  512 ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ
           0F7B6630  4CD ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z
           0F8070A0  4E9 ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z
           0F7C1670  4E6 ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z
           0F7B73C0  545 ?width@ios_base@std@@QAE_J_J@Z
           0F7B7400  546 ?width@ios_base@std@@QBE_JXZ
           0F7B4E50  36F ?flags@ios_base@std@@QBEHXZ
           0F7B4F60  3CD ?good@ios_base@std@@QBE_NXZ
           0F83CBE0  2BC ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
           0F7C4830  526 ?uncaught_exception@std@@YA_NXZ
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c310
        VCRUNTIME140.dll
                  0012C114 Import Address Table
                  0012C4D8 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           000F7CC0   2E __vcrt_GetModuleFileNameW
           000F4080   35 _except_handler4_common
           000FD7E0   10 __CxxFrameHandler3
           000F7CF0   31 __vcrt_LoadLibraryExW
           000F3930   48 memset
           000F75C0   25 __std_type_info_destroy_list
           000F7540   22 __std_exception_destroy
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c324
        api-ms-win-crt-runtime-l1-1-0.dll
                  0012C1F4 Import Address Table
                  0012C5B8 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           63A07D80   6A terminate
           639AD440   36 _initialize_onexit_table
           63A084F0    6 __p___argv
           639BEC50   1D _controlfp_s
           63A09DA0   1E _crt_at_quick_exit
           63A09D40   3F _register_thread_local_exe_atexit_callback
           639BFB50   1F _crt_atexit
           639B4D90   24 _execute_onexit_table
           639C03F0    5 __p___argc
           63A09D00   16 _c_exit
           63A09CE0   25 _exit
           639A9C00   58 exit
           639AC2A0   39 _initterm_e
           639BCEF0   38 _initterm
           63A33BC0   2A _get_initial_narrow_environment
           639C0A60   35 _initialize_narrow_environment
           639BC900   19 _configure_narrow_argv
           63A06FF0   41 _seh_filter_dll
           639C00A0   44 _set_app_type
           639A5C90   42 _seh_filter_exe
           639AFB30   3E _register_onexit_function
           63A37BC0   69 system
           63A09D20   17 _cexit
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c338
        api-ms-win-crt-string-l1-1-0.dll
                  0012C2C4 Import Address Table
                  0012C688 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639C1410   89 strcpy_s
           639C1220   85 strcat_s
           639C1720   8B strlen
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c34c
        api-ms-win-crt-math-l1-1-0.dll
                  0012C1C4 Import Address Table
                  0012C588 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           63A276C0   2E __setusermatherr
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c360
        api-ms-win-crt-stdio-l1-1-0.dll
                  0012C28C Import Address Table
                  0012C650 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639B9870    F __stdio_common_vsprintf_s
           639BFE80    1 __p__commode
           639BF960   54 _set_fmode
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c374
        api-ms-win-crt-locale-l1-1-0.dll
                  0012C194 Import Address Table
                  0012C558 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639BF310    8 _configthreadlocale
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c388
        api-ms-win-crt-heap-l1-1-0.dll
                  0012C160 Import Address Table
                  0012C524 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639BF990   16 _set_new_mode
           639B0740   18 free
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c39c
        KERNEL32.dll
                  0012C000 Import Address Table
                  0012C3C4 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           7564FF05  2B4 GetProcessHeap
           75647FF2  37F IsDebuggerPresent
           7563F362  462 RaiseException
           7564F0D7  3EF MultiByteToWideChar
           7564F0CA  5FE WideCharToMultiByte
           756608B9  5AD UnhandledExceptionFilter
           7564F6CB  56D SetUnhandledExceptionFilter
           7564D970  217 GetCurrentProcess
           75642E0D  58C TerminateProcess
           75656E4E  386 IsProcessorFeaturePresent
           7564C5F2  44D QueryPerformanceCounter
           7564D985  218 GetCurrentProcessId
           7564D9E6  2E9 GetSystemTimeAsFileTime
           76EF5D85  363 InitializeSListHead
           7564E4AD  2D0 GetStartupInfoW
           7564CE7C  278 GetModuleHandleW
           7564CFB0  261 GetLastError
           7564CE64  2AE GetProcAddress
           7564F137  1AB FreeLibrary
           75656E6F  5CE VirtualQuery
           7564C5E0  21C GetCurrentThreadId
           7564C590  349 HeapFree
           76EE296E  345 HeapAlloc
    

    2019年6月18日 5:52
  • "WinDbg Preview" は、Windows 7 でも使えたはず。
    Windows 8.1 では絶対に使える。

    何気に以下の関数アドレスが、モジュールのマップ状態を一致していませんねぇ。

    0012c098  0f7baf10 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::flush [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 507]
    0012c09c  0f803d00 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::put [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 470]
    0012c0a0  0f7f8770 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::operator<< [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 171]
    0012c0a4  0f7bae30 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::_Osfx [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 142]
    0012c0a8  0f7b71b0 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::widen [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 110]
    0012c0ac  0f7fec00 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::fill [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 96]
    0012c0b0  0f7bb000 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::rdbuf [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 76]
    0012c0b4  0f7bb020 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::tie [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 66]
    0012c0b8  0f7b6630 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::setstate [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 49]
    0012c0bc  0f8070a0 MSVCP140D!std::basic_streambuf<char,std::char_traits<char> >::sputn [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\streambuf @ 167]
    0012c0c0  0f7c1670 MSVCP140D!std::basic_streambuf<char,std::char_traits<char> >::sputc [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\streambuf @ 162]
    0012c0c4  0f7b73c0 MSVCP140D!std::ios_base::width [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 392]
    0012c0c8  0f7b7400 MSVCP140D!std::ios_base::width [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 388]
    0012c0cc  0f7b4e50 MSVCP140D!std::ios_base::flags [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 351]
    0012c0d0  0f7b4f60 MSVCP140D!std::ios_base::good [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 320]
    0012c0d4  0f83cbe0 MSVCP140D!std::cout
    0012c0d8  0f7c4830 MSVCP140D!std::uncaught_exception [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 7]
    
    0012c114  000f7cc0 VCRUNTIME140!__vcrt_GetModuleFileNameW [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_thunks.cpp @ 20]
    0012c118  000f4080 VCRUNTIME140!_except_handler4_common [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\i386\chandler4.c @ 316]
    0012c11c  000fd7e0 VCRUNTIME140!__CxxFrameHandler2 [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\i386\trnsctrl.cpp @ 196]
    0012c120  000f7cf0 VCRUNTIME140!__vcrt_LoadLibraryExW [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_thunks.cpp @ 60]
    0012c124  000f3930 VCRUNTIME140!memset [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\string\i386\memset.asm @ 61]
    0012c128  000f75c0 VCRUNTIME140!__std_type_info_destroy_list [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\std_type_info.cpp @ 139]
    0012c12c  000f7540 VCRUNTIME140!__std_exception_destroy [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\std_exception.cpp @ 43]
    
    0012c2fc  0001c45c

    このダンプで lmi コマンドを実行した際の各関数アドレスは、下記のように表示されてますか?

    0:000> lmi
    start    end        module name
    00c40000 00c62000   file_search2   (deferred)            
    0f1c0000 0f1d3000   VCRUNTIME140   (deferred)            
    0f460000 0f47b000   VCRUNTIME140D   (deferred)            
    0f8d0000 0f988000   MSVCP140D   (deferred)            
    0fd60000 0fed4000   ucrtbased   (deferred)            
    63910000 63913000   api_ms_win_crt_locale_l1_1_0   (deferred)            
    63980000 63a5f000   ucrtbase   (deferred)            
    63ae0000 63ae5000   api_ms_win_crt_math_l1_1_0   (deferred)            
    63c50000 63c54000   api_ms_win_crt_convert_l1_1_0   (deferred)            
    63c60000 63c64000   api_ms_win_crt_stdio_l1_1_0   (deferred)            
    63c70000 63c73000   api_ms_win_crt_heap_l1_1_0   (deferred)            
    63c80000 63c84000   api_ms_win_crt_string_l1_1_0   (deferred)            
    63c90000 63c93000   api_ms_win_core_file_l1_2_0   (deferred)            
    63ca0000 63ca3000   api_ms_win_core_processthreads_l1_1_1   (deferred)            
    63f10000 63f13000   api_ms_win_core_localization_l1_2_0   (deferred)            
    63f20000 63f23000   api_ms_win_core_file_l2_1_0   (deferred)            
    64130000 64133000   api_ms_win_core_timezone_l1_1_0   (deferred)            
    65440000 65444000   api_ms_win_crt_runtime_l1_1_0   (deferred)            
    6fe60000 6fe63000   api_ms_win_core_synch_l1_2_0   (deferred)            
    74e90000 74edb000   KERNELBASE   (deferred)            
    75600000 756d5000   kernel32   (deferred)            
    76e90000 76fd2000   ntdll      (pdb symbols)          C:\Windows\SYSTEM32\ntdll.d


    追記

    やっぱり VCRUNTIME140.dll と VCRUNTIME140D.dll 内の関数アドレスが、モジュールのロード アドレスと一致してませんねぇ。
    っていうことは、わざわざ Code Injection をしているのかなぁ。。。。
    とりあえず、そのダンプで以下のコマンドの出力結果が見たいです。

    u 000F7CF0 l10


    • 編集済み お馬鹿 2019年6月18日 6:59 誤記訂正
    2019年6月18日 6:08
  • "WinDbg Preview" では TTD (Time Travel Debugging) という機能がサポートされているので、アプリ開発でのデバッグでは、VS デバッガより強力かも。
    Visual Studioの場合、Time Travel DebuggingはEnterprise限定の機能として提供されていますね。
    2019年6月18日 6:11
  • lmiの結果です。

    0:000> lmi
    start    end        module name
    000f0000 00103000   VCRUNTIME140   (deferred)             
    00110000 00132000   file_search2 C (pdb symbols)          file_search2.exe
    004a0000 00614000   ucrtbased   (deferred)             
    0f790000 0f848000   MSVCP140D   (private pdb symbols)  MSVCP140D.dll
    0fe50000 0fe6b000   VCRUNTIME140D   (private pdb symbols)  VCRUNTIME140D.dll
    63910000 63913000   api_ms_win_crt_locale_l1_1_0   (deferred)             
    63980000 63a5f000   ucrtbase   (deferred)             
    63ae0000 63ae5000   api_ms_win_crt_math_l1_1_0   (deferred)             
    63c50000 63c54000   api_ms_win_crt_convert_l1_1_0   (deferred)             
    63c60000 63c64000   api_ms_win_crt_stdio_l1_1_0   (deferred)             
    63c70000 63c73000   api_ms_win_crt_heap_l1_1_0   (deferred)             
    63c80000 63c84000   api_ms_win_crt_string_l1_1_0   (deferred)             
    63c90000 63c93000   api_ms_win_core_file_l1_2_0   (deferred)             
    63ca0000 63ca3000   api_ms_win_core_processthreads_l1_1_1   (deferred)             
    63f10000 63f13000   api_ms_win_core_localization_l1_2_0   (deferred)             
    63f20000 63f23000   api_ms_win_core_file_l2_1_0   (deferred)             
    64130000 64133000   api_ms_win_core_timezone_l1_1_0   (deferred)             
    65440000 65444000   api_ms_win_crt_runtime_l1_1_0   (deferred)             
    6fe60000 6fe63000   api_ms_win_core_synch_l1_2_0   (deferred)             
    74470000 74501000   TmUmEvt    (deferred)             
    74e90000 74edb000   KERNELBASE   (pdb symbols)          KERNELBASE.dll
    75600000 756d5000   kernel32   (pdb symbols)          kernel32.dll
    76e90000 76fd2000   ntdll      (pdb symbols)          ntdll.dll

    TmUmEvtは今までなかったのに出ていますね。なんで?

    u 000F7CF0 10は以下のようにRange errorが出ます。

    0:000> u 000F7CF0 10
                       ^ Range error in 'u 000F7CF0 10'
    

    2019年6月18日 6:52
  • さっきと、モジュールのロードアドレスが全く違うのですが。。。
    当たり前の話ですが、プロフラム実行時のベース アドレスはその都度変化する可能性があるので、関数アドレスからの調査を行うときは、同一ダンプで行わないと意味がないのです。
    この lmi コマンドのは、先の !dh -i コマンドのダンプと間違いなく同一なのでしょうか?
    同じである保証が無いと、確認しても意味がありません。

    2019年6月18日 7:07
  • 少なくとも今日の分は全く同じダンプファイルを使ってるんですが。。。

    さっきWinDBGのバージョンが古いということで、SDK 8.1のインストールをやり直したせいでしょうか?

    モジュールの位置がいくつか変わってますよね。TmUmEvtが出現しているし・・・。

    とりあえず再度取り直しました。

    0:000> lmi
    start    end        module name
    000f0000 00103000   VCRUNTIME140   (deferred)             
    00110000 00132000   file_search2   (deferred)             
    004a0000 00614000   ucrtbased   (deferred)             
    0f790000 0f848000   MSVCP140D   (deferred)             
    0fe50000 0fe6b000   VCRUNTIME140D   (deferred)             
    63910000 63913000   api_ms_win_crt_locale_l1_1_0   (deferred)             
    63980000 63a5f000   ucrtbase   (deferred)             
    63ae0000 63ae5000   api_ms_win_crt_math_l1_1_0   (deferred)             
    63c50000 63c54000   api_ms_win_crt_convert_l1_1_0   (deferred)             
    63c60000 63c64000   api_ms_win_crt_stdio_l1_1_0   (deferred)             
    63c70000 63c73000   api_ms_win_crt_heap_l1_1_0   (deferred)             
    63c80000 63c84000   api_ms_win_crt_string_l1_1_0   (deferred)             
    63c90000 63c93000   api_ms_win_core_file_l1_2_0   (deferred)             
    63ca0000 63ca3000   api_ms_win_core_processthreads_l1_1_1   (deferred)             
    63f10000 63f13000   api_ms_win_core_localization_l1_2_0   (deferred)             
    63f20000 63f23000   api_ms_win_core_file_l2_1_0   (deferred)             
    64130000 64133000   api_ms_win_core_timezone_l1_1_0   (deferred)             
    65440000 65444000   api_ms_win_crt_runtime_l1_1_0   (deferred)             
    6fe60000 6fe63000   api_ms_win_core_synch_l1_2_0   (deferred)             
    74470000 74501000   TmUmEvt    (deferred)             
    74e90000 74edb000   KERNELBASE   (deferred)             
    75600000 756d5000   kernel32   (deferred)             
    76e90000 76fd2000   ntdll      (pdb symbols)          ntdll.dll
    0:000> !dh -f file_search2
    
    File Type: EXECUTABLE IMAGE
    FILE HEADER VALUES
         14C machine (i386)
           9 number of sections
    5D035CAD time date stamp Fri Jun 14 17:37:01 2019
    
           0 file pointer to symbol table
           0 number of symbols
          E0 size of optional header
         102 characteristics
                Executable
                32 bit word machine
    
    OPTIONAL HEADER VALUES
         10B magic #
       14.21 linker version
        6600 size of code
        5200 size of initialized data
           0 size of uninitialized data
       113D4 address of entry point
        1000 base of code
             ----- new -----
    00110000 image base
        1000 section alignment
         200 file alignment
           3 subsystem (Windows CUI)
        6.00 operating system version
        0.00 image version
        6.00 subsystem version
       22000 size of image
         400 size of headers
           0 checksum
    00100000 size of stack reserve
    00001000 size of stack commit
    00100000 size of heap reserve
    00001000 size of heap commit
        8140  DLL characteristics
                Dynamic base
                NX compatible
                Terminal server aware
           0 [       0] address [size] of Export Directory
       1C2FC [      C8] address [size] of Import Directory
       20000 [     43C] address [size] of Resource Directory
           0 [       0] address [size] of Exception Directory
           0 [       0] address [size] of Security Directory
       21000 [     458] address [size] of Base Relocation Directory
       194D0 [      38] address [size] of Debug Directory
           0 [       0] address [size] of Description Directory
           0 [       0] address [size] of Special Directory
           0 [       0] address [size] of Thread Storage Directory
       19508 [      40] address [size] of Load Configuration Directory
           0 [       0] address [size] of Bound Import Directory
       1C000 [     2FC] address [size] of Import Address Table Directory
           0 [       0] address [size] of Delay Import Directory
           0 [       0] address [size] of COR20 Header Directory
           0 [       0] address [size] of Reserved Directory
    
    0:000> dds file_search2+0x1C000 file_search2+0x1C000+0x2FC
    0012c000  7564ff05 kernel32!GetProcessHeapStub
    0012c004  75647ff2 kernel32!IsDebuggerPresentStub
    0012c008  7563f362 kernel32!RaiseExceptionStub
    0012c00c  7564f0d7 kernel32!MultiByteToWideCharStub
    0012c010  7564f0ca kernel32!WideCharToMultiByteStub
    0012c014  756608b9 kernel32!UnhandledExceptionFilter
    0012c018  7564f6cb kernel32!SetUnhandledExceptionFilter
    0012c01c  7564d970 kernel32!GetCurrentProcessStub
    0012c020  75642e0d kernel32!TerminateProcessStub
    0012c024  75656e4e kernel32!IsProcessorFeaturePresent
    0012c028  7564c5f2 kernel32!QueryPerformanceCounterStub
    0012c02c  7564d985 kernel32!GetCurrentProcessIdStub
    0012c030  7564d9e6 kernel32!GetSystemTimeAsFileTimeStub
    0012c034  76ef5d85 ntdll!RtlInitializeSListHead
    0012c038  7564e4ad kernel32!GetStartupInfoWStub
    0012c03c  7564ce7c kernel32!GetModuleHandleWStub
    0012c040  7564cfb0 kernel32!GetLastErrorStub
    0012c044  7564ce64 kernel32!GetProcAddressStub
    0012c048  7564f137 kernel32!FreeLibraryStub
    0012c04c  75656e6f kernel32!VirtualQueryStub
    0012c050  7564c5e0 kernel32!GetCurrentThreadIdStub
    0012c054  7564c590 kernel32!HeapFree
    0012c058  76ee296e ntdll!RtlAllocateHeap
    0012c05c  00000000
    0012c060  00000000
    0012c064  00000000
    0012c068  00000000
    0012c06c  00000000
    0012c070  00000000
    0012c074  00000000
    0012c078  00000000
    0012c07c  00000000
    0012c080  00000000
    0012c084  00000000
    0012c088  00000000
    0012c08c  00000000
    0012c090  00000000
    0012c094  00000000
    0012c098  0f7baf10 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::flush [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 507]
    0012c09c  0f803d00 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::put [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 470]
    0012c0a0  0f7f8770 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::operator<< [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 171]
    0012c0a4  0f7bae30 MSVCP140D!std::basic_ostream<char,std::char_traits<char> >::_Osfx [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ostream @ 142]
    0012c0a8  0f7b71b0 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::widen [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 110]
    0012c0ac  0f7fec00 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::fill [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 96]
    0012c0b0  0f7bb000 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::rdbuf [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 76]
    0012c0b4  0f7bb020 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::tie [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 66]
    0012c0b8  0f7b6630 MSVCP140D!std::basic_ios<char,std::char_traits<char> >::setstate [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\ios @ 49]
    0012c0bc  0f8070a0 MSVCP140D!std::basic_streambuf<char,std::char_traits<char> >::sputn [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\streambuf @ 167]
    0012c0c0  0f7c1670 MSVCP140D!std::basic_streambuf<char,std::char_traits<char> >::sputc [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\streambuf @ 162]
    0012c0c4  0f7b73c0 MSVCP140D!std::ios_base::width [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 392]
    0012c0c8  0f7b7400 MSVCP140D!std::ios_base::width [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 388]
    0012c0cc  0f7b4e50 MSVCP140D!std::ios_base::flags [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 351]
    0012c0d0  0f7b4f60 MSVCP140D!std::ios_base::good [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdhpp\xiosbase @ 320]
    0012c0d4  0f83cbe0 MSVCP140D!std::cout
    0012c0d8  0f7c4830 MSVCP140D!std::uncaught_exception [d:\agent\_work\4\s\src\vctools\crt\crtw32\stdcpp\uncaught_exception.cpp @ 7]
    0012c0dc  00000000
    0012c0e0  00000000
    0012c0e4  00000000
    0012c0e8  00000000
    0012c0ec  00000000
    0012c0f0  00000000
    0012c0f4  00000000
    0012c0f8  00000000
    0012c0fc  00000000
    0012c100  00000000
    0012c104  00000000
    0012c108  00000000
    0012c10c  00000000
    0012c110  00000000
    0012c114  000f7cc0 VCRUNTIME140!__vcrt_GetModuleFileNameW [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_thunks.cpp @ 20]
    0012c118  000f4080 VCRUNTIME140!_except_handler4_common [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\i386\chandler4.c @ 316]
    0012c11c  000fd7e0 VCRUNTIME140!__CxxFrameHandler2 [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\i386\trnsctrl.cpp @ 196]
    0012c120  000f7cf0 VCRUNTIME140!__vcrt_LoadLibraryExW [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_thunks.cpp @ 60]
    0012c124  000f3930 VCRUNTIME140!memset [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\string\i386\memset.asm @ 61]
    0012c128  000f75c0 VCRUNTIME140!__std_type_info_destroy_list [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\std_type_info.cpp @ 139]
    0012c12c  000f7540 VCRUNTIME140!__std_exception_destroy [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\std_exception.cpp @ 43]
    0012c130  00000000
    0012c134  00000000
    0012c138  00000000
    0012c13c  00000000
    0012c140  00000000
    0012c144  00000000
    0012c148  00000000
    0012c14c  00000000
    0012c150  00000000
    0012c154  00000000
    0012c158  00000000
    0012c15c  00000000
    0012c160  639bf990 ucrtbase!_set_new_mode
    0012c164  639b0740 ucrtbase!free
    0012c168  00000000
    0012c16c  00000000
    0012c170  00000000
    0012c174  00000000
    0012c178  00000000
    0012c17c  00000000
    0012c180  00000000
    0012c184  00000000
    0012c188  00000000
    0012c18c  00000000
    0012c190  00000000
    0012c194  639bf310 ucrtbase!_configthreadlocale
    0012c198  00000000
    0012c19c  00000000
    0012c1a0  00000000
    0012c1a4  00000000
    0012c1a8  00000000
    0012c1ac  00000000
    0012c1b0  00000000
    0012c1b4  00000000
    0012c1b8  00000000
    0012c1bc  00000000
    0012c1c0  00000000
    0012c1c4  63a276c0 ucrtbase!__setusermatherr
    0012c1c8  00000000
    0012c1cc  00000000
    0012c1d0  00000000
    0012c1d4  00000000
    0012c1d8  00000000
    0012c1dc  00000000
    0012c1e0  00000000
    0012c1e4  00000000
    0012c1e8  00000000
    0012c1ec  00000000
    0012c1f0  00000000
    0012c1f4  63a07d80 ucrtbase!terminate
    0012c1f8  639ad440 ucrtbase!_initialize_onexit_table
    0012c1fc  63a084f0 ucrtbase!__p___argv
    0012c200  639bec50 ucrtbase!_controlfp_s
    0012c204  63a09da0 ucrtbase!_crt_at_quick_exit
    0012c208  63a09d40 ucrtbase!_register_thread_local_exe_atexit_callback
    0012c20c  639bfb50 ucrtbase!_crt_atexit
    0012c210  639b4d90 ucrtbase!_execute_onexit_table
    0012c214  639c03f0 ucrtbase!__p___argc
    0012c218  63a09d00 ucrtbase!_c_exit
    0012c21c  63a09ce0 ucrtbase!_Exit
    0012c220  639a9c00 ucrtbase!exit
    0012c224  639ac2a0 ucrtbase!_initterm_e
    0012c228  639bcef0 ucrtbase!_initterm
    0012c22c  63a33bc0 ucrtbase!_get_initial_narrow_environment
    0012c230  639c0a60 ucrtbase!_initialize_narrow_environment
    0012c234  639bc900 ucrtbase!_configure_narrow_argv
    0012c238  63a06ff0 ucrtbase!_seh_filter_dll
    0012c23c  639c00a0 ucrtbase!_set_app_type
    0012c240  639a5c90 ucrtbase!_seh_filter_exe
    0012c244  639afb30 ucrtbase!_register_onexit_function
    0012c248  63a37bc0 ucrtbase!system
    0012c24c  63a09d20 ucrtbase!_cexit
    0012c250  00000000
    0012c254  00000000
    0012c258  00000000
    0012c25c  00000000
    0012c260  00000000
    0012c264  00000000
    0012c268  00000000
    0012c26c  00000000
    0012c270  00000000
    0012c274  00000000
    0012c278  00000000
    0012c27c  00000000
    0012c280  00000000
    0012c284  00000000
    0012c288  00000000
    0012c28c  639b9870 ucrtbase!__stdio_common_vsprintf_s
    0012c290  639bfe80 ucrtbase!__p__commode
    0012c294  639bf960 ucrtbase!_set_fmode
    0012c298  00000000
    0012c29c  00000000
    0012c2a0  00000000
    0012c2a4  00000000
    0012c2a8  00000000
    0012c2ac  00000000
    0012c2b0  00000000
    0012c2b4  00000000
    0012c2b8  00000000
    0012c2bc  00000000
    0012c2c0  00000000
    0012c2c4  639c1410 ucrtbase!strcpy_s
    0012c2c8  639c1220 ucrtbase!strcat_s
    0012c2cc  639c1720 ucrtbase!strlen
    0012c2d0  00000000
    0012c2d4  00000000
    0012c2d8  00000000
    0012c2dc  00000000
    0012c2e0  00000000
    0012c2e4  00000000
    0012c2e8  00000000
    0012c2ec  00000000
    0012c2f0  00000000
    0012c2f4  00000000
    0012c2f8  00000000
    0012c2fc  0001c45c
    

    000f7cf0のアドレスは VCRUNTIME140!__vcrt_LoadLibraryExWのアドレスですよね?

    uコマンドですが、WinDBGが古いので、10の引数がいらないのかもと打ち込むと次のように出ました。

    0:000> u 0x000f7cf0
    VCRUNTIME140!__vcrt_LoadLibraryExW [d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\internal\winapi_thunks.cpp @ 60]:
    000f7cf0 55              push    ebp
    000f7cf1 8bec            mov     ebp,esp
    000f7cf3 ff7510          push    dword ptr [ebp+10h]
    000f7cf6 ff750c          push    dword ptr [ebp+0Ch]
    000f7cf9 ff7508          push    dword ptr [ebp+8]
    000f7cfc ff1530001000    call    dword ptr [VCRUNTIME140!_imp__LoadLibraryExW (00100030)]
    000f7d02 5d              pop     ebp
    000f7d03 c3              ret
    

    2019年6月18日 7:58
  • デバッガが古いと変な出力をすることがあるから、その影響かも。

    今度のは、問題なさそう。
    VCRUNTIME140!__vcrt_LoadLibraryExW も Hook されている形跡はないし、TmUmEvt はなんのために Injection してるんだろう?

    下記コマンドもお願いします。

    u 0001c45c l10
    dds 00100030 l2
    !dh -i TmUmEvt
    2019年6月18日 8:58
  • dh -iは使えないので!dh -fでアドレスとサイズを得てからddsで取りました。

    0:000> u 0001c45c l10
    0001c45c 0000            add     byte ptr [eax],al
    0001c45e 0000            add     byte ptr [eax],al
    0001c460 0000            add     byte ptr [eax],al
    0001c462 0000            add     byte ptr [eax],al
    0001c464 0000            add     byte ptr [eax],al
    0001c466 0000            add     byte ptr [eax],al
    0001c468 0000            add     byte ptr [eax],al
    0001c46a 0000            add     byte ptr [eax],al
    0001c46c 0000            add     byte ptr [eax],al
    0001c46e 0000            add     byte ptr [eax],al
    0001c470 0000            add     byte ptr [eax],al
    0001c472 0000            add     byte ptr [eax],al
    0001c474 0000            add     byte ptr [eax],al
    0001c476 0000            add     byte ptr [eax],al
    0001c478 0000            add     byte ptr [eax],al
    0001c47a 0000            add     byte ptr [eax],al
    0:000> dds 00100030 l2
    00100030  756452d1 kernel32!LoadLibraryExWStub
    00100034  7564ce64 kernel32!GetProcAddressStub
    0:000> !dh -i TmUmEvt
    Usage: dh [options] address
    
    Dumps headers from an image based at address
    
    Options:
    
       -a      Dump everything
       -f      Dump file headers
       -s      Dump section headers
    
    0:000> !dh -f TmUmEvt
    
    File Type: DLL
    FILE HEADER VALUES
         14C machine (i386)
           5 number of sections
    5BA22BB3 time date stamp Wed Sep 19 19:57:55 2018
    
           0 file pointer to symbol table
           0 number of symbols
          E0 size of optional header
        2102 characteristics
                Executable
                32 bit word machine
                DLL
    
    OPTIONAL HEADER VALUES
         10B magic #
       11.00 linker version
       54A00 size of code
       39E00 size of initialized data
           0 size of uninitialized data
       3855E address of entry point
        1000 base of code
             ----- new -----
    74470000 image base
        1000 section alignment
         200 file alignment
           2 subsystem (Windows GUI)
        5.01 operating system version
        0.00 image version
        5.01 subsystem version
       91000 size of image
         400 size of headers
       96D9E checksum
    00100000 size of stack reserve
    00001000 size of stack commit
    00100000 size of heap reserve
    00001000 size of heap commit
         140  DLL characteristics
                Dynamic base
                NX compatible
       7EAF0 [      DA] address [size] of Export Directory
       7DDA4 [      64] address [size] of Import Directory
       8B000 [     6F0] address [size] of Resource Directory
           0 [       0] address [size] of Exception Directory
       8AE00 [    80D0] address [size] of Security Directory
       8C000 [    4B24] address [size] of Base Relocation Directory
       563B0 [      38] address [size] of Debug Directory
           0 [       0] address [size] of Description Directory
           0 [       0] address [size] of Special Directory
           0 [       0] address [size] of Thread Storage Directory
       7BE70 [      40] address [size] of Load Configuration Directory
           0 [       0] address [size] of Bound Import Directory
       56000 [     23C] address [size] of Import Address Table Directory
           0 [       0] address [size] of Delay Import Directory
           0 [       0] address [size] of COR20 Header Directory
           0 [       0] address [size] of Reserved Directory
    
    0:000> dds TmUmEvt+0x56000 TmUmEvt+0x56000+0x23C
    744c6000  0007e65c
    744c6004  0007e648
    744c6008  0007e638
    744c600c  0007e62a
    744c6010  0007e694
    744c6014  00000000
    744c6018  0007ea76
    744c601c  0007ea68
    744c6020  0007ea52
    744c6024  0007e0e4
    744c6028  0007e0fc
    744c602c  0007e114
    744c6030  0007e120
    744c6034  0007e130
    744c6038  0007e13e
    744c603c  0007e14e
    744c6040  0007e160
    744c6044  0007e176
    744c6048  0007e18a
    744c604c  0007e19a
    744c6050  0007e1b0
    744c6054  0007e1ce
    744c6058  0007e1de
    744c605c  0007e1f4
    744c6060  0007e202
    744c6064  0007e214
    744c6068  0007e224
    744c606c  0007e240
    744c6070  0007e258
    744c6074  0007e270
    744c6078  0007e288
    744c607c  0007e29e
    744c6080  0007e2b8
    744c6084  0007e2c0
    744c6088  0007e2ce
    744c608c  0007e2e4
    744c6090  0007e2f4
    744c6094  0007e310
    744c6098  0007e320
    744c609c  0007e33a
    744c60a0  0007e356
    744c60a4  0007e364
    744c60a8  0007ea84
    744c60ac  0007e388
    744c60b0  0007e39a
    744c60b4  0007e3b4
    744c60b8  0007e3c8
    744c60bc  0007e3e6
    744c60c0  0007e408
    744c60c4  0007e418
    744c60c8  0007e428
    744c60cc  0007e43a
    744c60d0  0007e44a
    744c60d4  0007e462
    744c60d8  0007e478
    744c60dc  0007e48a
    744c60e0  0007e49a
    744c60e4  0007e4a8
    744c60e8  0007e4ba
    744c60ec  0007e4ce
    744c60f0  0007e4e2
    744c60f4  0007e4f6
    744c60f8  0007e50a
    744c60fc  0007e526
    744c6100  0007e536
    744c6104  0007e546
    744c6108  0007e554
    744c610c  0007e560
    744c6110  0007e56e
    744c6114  0007e57c
    744c6118  0007e594
    744c611c  0007eada
    744c6120  0007e5b6
    744c6124  0007e5c2
    744c6128  0007e5d2
    744c612c  0007e5e2
    744c6130  0007e5f0
    744c6134  0007e606
    744c6138  0007ea94
    744c613c  0007eaa6
    744c6140  0007eaba
    744c6144  0007eaca
    744c6148  0007e378
    744c614c  0007e5aa
    744c6150  0007e6b2
    744c6154  0007e6c8
    744c6158  0007e6de
    744c615c  0007e6f2
    744c6160  0007e702
    744c6164  0007e712
    744c6168  0007e724
    744c616c  0007e730
    744c6170  0007e744
    744c6174  0007e760
    744c6178  0007e76c
    744c617c  0007e778
    744c6180  0007e78e
    744c6184  0007e7a0
    744c6188  0007e7b0
    744c618c  0007e7c8
    744c6190  0007e7d6
    744c6194  0007e7e8
    744c6198  0007e7f4
    744c619c  0007e804
    744c61a0  0007e820
    744c61a4  0007e83e
    744c61a8  0007e866
    744c61ac  0007e87a
    744c61b0  0007e884
    744c61b4  0007e896
    744c61b8  0007e8aa
    744c61bc  0007e8bc
    744c61c0  0007e8c6
    744c61c4  0007e8d2
    744c61c8  0007e8de
    744c61cc  0007e8f0
    744c61d0  0007e902
    744c61d4  0007e910
    744c61d8  0007e926
    744c61dc  0007e940
    744c61e0  0007e95a
    744c61e4  0007e974
    744c61e8  0007e984
    744c61ec  0007e99a
    744c61f0  0007e9ac
    744c61f4  0007e9bc
    744c61f8  0007e9d4
    744c61fc  0007e9e6
    744c6200  0007e9f8
    744c6204  0007ea0a
    744c6208  0007ea1a
    744c620c  0007ea2c
    744c6210  0007ea3c
    744c6214  00000000
    744c6218  0007e05a
    744c621c  0007e070
    744c6220  0007e088
    744c6224  0007e044
    744c6228  00000000
    744c622c  0007e0bc
    744c6230  0007e0ca
    744c6234  0007e0aa
    744c6238  00000000
    744c623c  00000000
    

    2019年6月18日 9:11
  • 以下をお願いします。

    0007e65c l10

    2019年6月18日 9:35
  • 0:000> u 0007e65c l10
    0007e65c ??              ???
                        ^ Memory access error in 'u 0007e65c l10'

    Memory access errorになります。

    2019年6月18日 22:52
  • WinDBG PreviewはWindows 10 バージョン 14257.0 以降がシステム要件になっていました。Win7では使えないです。
    2019年6月18日 23:12
  • では、その Windows 7 環境に最新の WinDBG をインストールしてください。
    最新の WinDBG は Windows SDK からインストールできます。
    今の古い WinDBG では、TmUmEvt.dll の IAT が確認できないのでお話になりません。

    2019年6月19日 0:34

  • とりあえず、Windows10のPCにインストールしたWinDBG Previewにダンプファイルとシンボルを読み込ませて取り直しました。取り直したのは、!dh -i TmUmEvtまでです。

    0:000> lmi
    start    end        module name
    000f0000 00103000   VCRUNTIME140   (deferred)             
    00110000 00132000   file_search2 C (pdb symbols)          file_search2.exe
    004a0000 00614000   ucrtbased   (deferred)             
    0f790000 0f848000   MSVCP140D   (private pdb symbols)  MSVCP140D.dll
    0fe50000 0fe6b000   VCRUNTIME140D   (private pdb symbols)  VCRUNTIME140D.dll
    63910000 63913000   api_ms_win_crt_locale_l1_1_0   (deferred)             
    63980000 63a5f000   ucrtbase   (deferred)             
    63ae0000 63ae5000   api_ms_win_crt_math_l1_1_0   (deferred)             
    63c50000 63c54000   api_ms_win_crt_convert_l1_1_0   (deferred)             
    63c60000 63c64000   api_ms_win_crt_stdio_l1_1_0   (deferred)             
    63c70000 63c73000   api_ms_win_crt_heap_l1_1_0   (deferred)             
    63c80000 63c84000   api_ms_win_crt_string_l1_1_0   (deferred)             
    63c90000 63c93000   api_ms_win_core_file_l1_2_0   (deferred)             
    63ca0000 63ca3000   api_ms_win_core_processthreads_l1_1_1   (deferred)             
    63f10000 63f13000   api_ms_win_core_localization_l1_2_0   (deferred)             
    63f20000 63f23000   api_ms_win_core_file_l2_1_0   (deferred)             
    64130000 64133000   api_ms_win_core_timezone_l1_1_0   (deferred)             
    65440000 65444000   api_ms_win_crt_runtime_l1_1_0   (deferred)             
    6fe60000 6fe63000   api_ms_win_core_synch_l1_2_0   (deferred)             
    74470000 74501000   TmUmEvt    (deferred)             
    74e90000 74edb000   KERNELBASE   (pdb symbols)          KERNELBASE.dll
    75600000 756d5000   kernel32   (pdb symbols)          kernel32.dll
    76e90000 76fd2000   ntdll      (pdb symbols)          ntdll.dll
    0:000> u 0001c45c l10
    0001c45c 0000            add     byte ptr [eax],al
    0001c45e 0000            add     byte ptr [eax],al
    0001c460 0000            add     byte ptr [eax],al
    0001c462 0000            add     byte ptr [eax],al
    0001c464 0000            add     byte ptr [eax],al
    0001c466 0000            add     byte ptr [eax],al
    0001c468 0000            add     byte ptr [eax],al
    0001c46a 0000            add     byte ptr [eax],al
    0001c46c 0000            add     byte ptr [eax],al
    0001c46e 0000            add     byte ptr [eax],al
    0001c470 0000            add     byte ptr [eax],al
    0001c472 0000            add     byte ptr [eax],al
    0001c474 0000            add     byte ptr [eax],al
    0001c476 0000            add     byte ptr [eax],al
    0001c478 0000            add     byte ptr [eax],al
    0001c47a 0000            add     byte ptr [eax],al
    0:000> dds 00100030 l2
    00100030  756452d1 kernel32!LoadLibraryExWStub
    00100034  7564ce64 kernel32!GetProcAddressStub
    0:000> !dh -i TmUmEvt
      _IMAGE_IMPORT_DESCRIPTOR 744edda4
        PSAPI.DLL
                  744C6218 Import Address Table
                  744EE020 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           0007E05A    E GetModuleBaseNameW
           0007E070   10 GetModuleFileNameExW
           0007E088   11 GetModuleInformation
           0007E044    4 EnumProcessModules
    
      _IMAGE_IMPORT_DESCRIPTOR 744eddb8
        SHLWAPI.dll
                  744C622C Import Address Table
                  744EE034 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           0007E0BC   6C PathIsUNCA
           0007E0CA   71 PathIsUNCW
           0007E0AA   45 PathFileExistsW
    
      _IMAGE_IMPORT_DESCRIPTOR 744eddcc
        KERNEL32.dll
                  744C6018 Import Address Table
                  744EDE20 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           0007EA76  2D2 HeapReAlloc
           0007EA68  162 FreeLibrary
           0007EA52  10F EnumSystemLocalesW
           0007E0E4  2AF GetWindowsDirectoryW
           0007E0FC  2A7 GetVolumeInformationW
           0007E114  348 LocalFree
           0007E120  202 GetLastError
           0007E130   52 CloseHandle
           0007E13E  357 MapViewOfFile
           0007E14E  4D6 UnmapViewOfFile
           0007E160   8C CreateFileMappingW
           0007E176  379 OpenFileMappingW
           0007E18A  2A4 GetVersionExW
           0007E19A  2EC InterlockedExchange
           0007E1B0  2E9 InterlockedCompareExchange
           0007E1CE   B5 CreateThread
           0007E1DE  1C5 GetCurrentThreadId
           0007E1F4  385 OpenThread
           0007E202  4C1 TerminateThread
           0007E214  413 ResumeThread
           0007E224  2E2 InitializeCriticalSection
           0007E240   EE EnterCriticalSection
           0007E258  339 LeaveCriticalSection
           0007E270   D1 DeleteCriticalSection
           0007E288  4F9 WaitForSingleObject
           0007E29E  4F7 WaitForMultipleObjects
           0007E2B8  4B2 Sleep
           0007E2C0  375 OpenEventW
           0007E2CE  1C1 GetCurrentProcessId
           0007E2E4  277 GetSystemTime
           0007E2F4  415 RtlCaptureStackBackTrace
           0007E310  4F1 VirtualQuery
           0007E320  3A7 QueryPerformanceCounter
           0007E33A  3A8 QueryPerformanceFrequency
           0007E356  380 OpenProcess
           0007E364  1C0 GetCurrentProcess
           0007EA84  19A GetConsoleCP
           0007E388   E8 DuplicateHandle
           0007E39A  1DC GetEnvironmentVariableW
           0007E3B4   81 CreateDirectoryW
           0007E3C8    E AddVectoredExceptionHandler
           0007E3E6  408 RemoveVectoredExceptionHandler
           0007E408  354 LockResource
           0007E418  341 LoadResource
           0007E428  4B1 SizeofResource
           0007E43A  14E FindResourceW
           0007E44A  399 ProcessIdToSessionId
           0007E462  367 MultiByteToWideChar
           0007E478  245 GetProcAddress
           0007E48A  4E9 VirtualAlloc
           0007E49A  4EC VirtualFree
           0007E4A8  4EF VirtualProtect
           0007E4BA  218 GetModuleHandleW
           0007E4CE  1C4 GetCurrentThread
           0007E4E2  499 SetThreadPriority
           0007E4F6  28E GetThreadPriority
           0007E50A   BE CreateToolhelp32Snapshot
           0007E526  4C3 Thread32First
           0007E536  4C4 Thread32Next
           0007E546  344 LocalAlloc
           0007E554  4C5 TlsAlloc
           0007E560  4C7 TlsGetValue
           0007E56E  4C8 TlsSetValue
           0007E57C  2EF InterlockedIncrement
           0007E594  238 GetOverlappedResult
           0007EADA  157 FlushFileBuffers
           0007E5B6  3C0 ReadFile
           0007E5C2  293 GetTickCount
           0007E5D2   85 CreateEventW
           0007E5E2   8F CreateFileW
           0007E5F0  217 GetModuleHandleExW
           0007E606  214 GetModuleFileNameW
           0007EA94  1AC GetConsoleMode
           0007EAA6  467 SetFilePointerEx
           0007EABA  487 SetStdHandle
           0007EACA  524 WriteConsoleW
           0007E378  24C GetProcessId
           0007E5AA  525 WriteFile
           0007E6B2  4E4 VerSetConditionMask
           0007E6C8  4E8 VerifyVersionInfoW
           0007E6DE  20F GetLongPathNameW
           0007E6F2   EA EncodePointer
           0007E702   CA DecodePointer
           0007E712  3B1 RaiseException
           0007E724  418 RtlUnwind
           0007E730  300 IsDebuggerPresent
           0007E744  304 IsProcessorFeaturePresent
           0007E760  2CF HeapFree
           0007E76C  2CB HeapAlloc
           0007E778  511 WideCharToMultiByte
           0007E78E  186 GetCommandLineA
           0007E7A0  264 GetStdHandle
           0007E7B0  2EB InterlockedDecrement
           0007E7C8  119 ExitProcess
           0007E7D6   15 AreFileApisANSI
           0007E7E8  2D4 HeapSize
           0007E7F4  473 SetLastError
           0007E804  4D3 UnhandledExceptionFilter
           0007E820  4A5 SetUnhandledExceptionFilter
           0007E83E  2E3 InitializeCriticalSectionAndSpinCount
           0007E866  4C0 TerminateProcess
           0007E87A  4C6 TlsFree
           0007E884  263 GetStartupInfoW
           0007E896   AE CreateSemaphoreW
           0007E8AA  30A IsValidCodePage
           0007E8BC  168 GetACP
           0007E8C6  237 GetOEMCP
           0007E8D2  172 GetCPInfo
           0007E8DE  24A GetProcessHeap
           0007E8F0  269 GetStringTypeW
           0007E902  1F3 GetFileType
           0007E910  213 GetModuleFileNameA
           0007E926  279 GetSystemTimeAsFileTime
           0007E940  1DA GetEnvironmentStringsW
           0007E95A  161 FreeEnvironmentStringsW
           0007E974  120 FatalAppExitA
           0007E984  38A OutputDebugStringW
           0007E99A  33E LoadLibraryExW
           0007E9AC  33F LoadLibraryW
           0007E9BC  42D SetConsoleCtrlHandler
           0007E9D4  1C8 GetDateFormatW
           0007E9E6  297 GetTimeFormatW
           0007E9F8   64 CompareStringW
           0007EA0A  32D LCMapStringW
           0007EA1A  206 GetLocaleInfoW
           0007EA2C  30C IsValidLocale
           0007EA3C  29B GetUserDefaultLCID
    
      _IMAGE_IMPORT_DESCRIPTOR 744edde0
        ADVAPI32.dll
                  744C6000 Import Address Table
                  744EDE08 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           0007E65C   72 ConvertStringSecurityDescriptorToSecurityDescriptorW
           0007E648  26E RegQueryValueExW
           0007E638  261 RegOpenKeyExW
           0007E62A  230 RegCloseKey
           0007E694  165 GetUserNameW
    


    u 0007e65c l10の結果は、Preview版でも同じ結果になります。

    Windows7に最新版のWinDBGをインストールし直して取り直すのはちょっとお待ち下さい。

    追記:

    !dh -i file_search2の結果もつけておきます。

    0:000> !dh -i file_search2
      _IMAGE_IMPORT_DESCRIPTOR 0012c2fc
        MSVCP140D.dll
                  0012C098 Import Address Table
                  0012C45C Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           0F7BAF10  370 ?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ
           0F803D00  469 ?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z
           0F7F8770  10C ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z
           0F7BAE30  24C ?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ
           0F7B71B0  53C ?widen@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDD@Z
           0F7FEC00  369 ?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEDXZ
           0F7BB000  48F ?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ
           0F7BB020  512 ?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ
           0F7B6630  4CD ?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z
           0F8070A0  4E9 ?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAE_JPBD_J@Z
           0F7C1670  4E6 ?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z
           0F7B73C0  545 ?width@ios_base@std@@QAE_J_J@Z
           0F7B7400  546 ?width@ios_base@std@@QBE_JXZ
           0F7B4E50  36F ?flags@ios_base@std@@QBEHXZ
           0F7B4F60  3CD ?good@ios_base@std@@QBE_NXZ
           0F83CBE0  2BC ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
           0F7C4830  526 ?uncaught_exception@std@@YA_NXZ
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c310
        VCRUNTIME140.dll
                  0012C114 Import Address Table
                  0012C4D8 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           000F7CC0   2E __vcrt_GetModuleFileNameW
           000F4080   35 _except_handler4_common
           000FD7E0   10 __CxxFrameHandler3
           000F7CF0   31 __vcrt_LoadLibraryExW
           000F3930   48 memset
           000F75C0   25 __std_type_info_destroy_list
           000F7540   22 __std_exception_destroy
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c324
        api-ms-win-crt-runtime-l1-1-0.dll
                  0012C1F4 Import Address Table
                  0012C5B8 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           63A07D80   6A terminate
           639AD440   36 _initialize_onexit_table
           63A084F0    6 __p___argv
           639BEC50   1D _controlfp_s
           63A09DA0   1E _crt_at_quick_exit
           63A09D40   3F _register_thread_local_exe_atexit_callback
           639BFB50   1F _crt_atexit
           639B4D90   24 _execute_onexit_table
           639C03F0    5 __p___argc
           63A09D00   16 _c_exit
           63A09CE0   25 _exit
           639A9C00   58 exit
           639AC2A0   39 _initterm_e
           639BCEF0   38 _initterm
           63A33BC0   2A _get_initial_narrow_environment
           639C0A60   35 _initialize_narrow_environment
           639BC900   19 _configure_narrow_argv
           63A06FF0   41 _seh_filter_dll
           639C00A0   44 _set_app_type
           639A5C90   42 _seh_filter_exe
           639AFB30   3E _register_onexit_function
           63A37BC0   69 system
           63A09D20   17 _cexit
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c338
        api-ms-win-crt-string-l1-1-0.dll
                  0012C2C4 Import Address Table
                  0012C688 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639C1410   89 strcpy_s
           639C1220   85 strcat_s
           639C1720   8B strlen
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c34c
        api-ms-win-crt-math-l1-1-0.dll
                  0012C1C4 Import Address Table
                  0012C588 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           63A276C0   2E __setusermatherr
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c360
        api-ms-win-crt-stdio-l1-1-0.dll
                  0012C28C Import Address Table
                  0012C650 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639B9870    F __stdio_common_vsprintf_s
           639BFE80    1 __p__commode
           639BF960   54 _set_fmode
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c374
        api-ms-win-crt-locale-l1-1-0.dll
                  0012C194 Import Address Table
                  0012C558 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639BF310    8 _configthreadlocale
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c388
        api-ms-win-crt-heap-l1-1-0.dll
                  0012C160 Import Address Table
                  0012C524 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           639BF990   16 _set_new_mode
           639B0740   18 free
    
      _IMAGE_IMPORT_DESCRIPTOR 0012c39c
        KERNEL32.dll
                  0012C000 Import Address Table
                  0012C3C4 Import Name Table
                         0 time date stamp
                         0 Index of first forwarder reference
    
           7564FF05  2B4 GetProcessHeap
           75647FF2  37F IsDebuggerPresent
           7563F362  462 RaiseException
           7564F0D7  3EF MultiByteToWideChar
           7564F0CA  5FE WideCharToMultiByte
           756608B9  5AD UnhandledExceptionFilter
           7564F6CB  56D SetUnhandledExceptionFilter
           7564D970  217 GetCurrentProcess
           75642E0D  58C TerminateProcess
           75656E4E  386 IsProcessorFeaturePresent
           7564C5F2  44D QueryPerformanceCounter
           7564D985  218 GetCurrentProcessId
           7564D9E6  2E9 GetSystemTimeAsFileTime
           76EF5D85  363 InitializeSListHead
           7564E4AD  2D0 GetStartupInfoW
           7564CE7C  278 GetModuleHandleW
           7564CFB0  261 GetLastError
           7564CE64  2AE GetProcAddress
           7564F137  1AB FreeLibrary
           75656E6F  5CE VirtualQuery
           7564C5E0  21C GetCurrentThreadId
           7564C590  349 HeapFree
           76EE296E  345 HeapAlloc
    
    

    • 編集済み pine 2019年6月19日 1:26
    2019年6月19日 1:21
  • なるほど、この手があったか!!!
    この方法は全く想定していませんでした。
    (だからリバース エンジニアリングは面白い。wwww)
    さすがはトレンド マイクロさん、伊達にセキュリティ ソフトを作ってませんね。

    この問題、やっぱりウィルスバスターの影響だと思います。
    TmUmEvt.dll はかなり手の込んだ方法で API Hook をしているようです。
    (具体的な手法はちゃんとデバッグ トレースして調べないと分かんないけど、少なくとも一般的に知られている API Hook とは別物。)

    TmUmEvt.dll を正常にアンロードさせることができれば、多分今回の問題現象は起きないと思いますが、ウィルスバスター側は恐らくそれも想定してブロックしてくるだろうから無理かな。
    ダメ元で、以下のコードで実行してみてください。
    #include <iostream>
    #include <tchar.h>
    #include <windows.h>
    
    int main()
    {
        HMODULE     hModule;
    
        while( TRUE )
        {
            hModule = ::GetModuleHandle( TEXT("TmUmEvt.dll") );
            if( hModule == NULL) 
            {
                break;
            }
            ::FreeLibrary(hModule);
        }
    
        std::cout << "Hello World!" << std::endl;
    }


    2019年6月19日 2:00
  • > なるほど、この手があったか!!!
    > この方法は全く想定していませんでした。

    どういう手法なのでしょう?後学のために教えていただければ幸いです。

    それと、FreeLibraryする方法はだめでした。元のソースでは"Hello world!"が表示されていましたが、今回は表示されずに例外発生しているので、whileループの中で落ちているのだと思います。

    一応ダンプは保存したので、WinDBGで見ることは可能です。(lmiするとTmUmEvtがしっかりといました)

    トレンドマイクロDLLの影響にはほぼ間違いなさそうですが、それを回避するようなデバッグができるようにVisual Studio側でなんとかできないのでしょうかね?そうでないとあのデバッグオプションは環境によっては使えないということになります。

    2019年6月19日 2:26
  • > どういう手法なのでしょう?

    私が自分でデバッグ トレースして詳細に調べたのでは無いので、すべてをきちんと把握している訳ではないですが、このログを見る限りインジェクションされたトレンドマイクロ DLL は、自身のため専用の システム DLL を二重にロードしているようです。
    例えば今回のログから、PSAPI.DLL, SHLWAPI.dll, KERNEL32.dll, ADVAPI32.dll の3つの DLL を独自にロードおよび管理している形跡が読み取れます。
    なんでそんなことをするのかというと、恐らく自分以外の「第三者」が仕込んだ API Hook の影響を排除するためと考えられます。
    例えば。。。
    マルウェアが CreateFile() や ReadFile(), WriteFile() 等の API に Hook を仕掛けていたとして、セキュリティ ソフトの DLL がそれら API を「そのまま」使うと、マルウェアの影響を受けてしまう。。。。つまり正しいセキュリティ監視が出来ないことになってしまう。
    だからセキュリティ ソフトは、個々のユーザー モード プロセス空間の空き領域にそれら システム DLL を独自にロード (正確にはマップ。。。かな) させ、自身の DLL が使うそれら API コールはすべてそっちを使うように IAT も書き換える。
    これによって、セキュリティ ソフトは「第三者」が仕込んだ API Hook の影響を排除することができる。
    さらにこの Hook は、プロローグ コードの書き換えではなく IAT の書き換えと Code Injection をベースにしているので、恐らくマルウェア側からも見えにくいはず。
    いずれにせよ TmUmEvt.dll はかなり手の込んだ方法で、API Hook をしているようです。
    (それにしても灯台下暗し。。。目から鱗。。。)


    > それと、FreeLibraryする方法はだめでした。

    そうでしょうね。
    こんな手の込んだことしているセキュリティ ソフトが、あんなお手軽コードですり抜けられる訳がありませんね。wwww

    > 一応ダンプは保存したので、WinDBGで見ることは可能です。

    これ以上は、ユーザー モード ダンプを見ても、あんまり意味がないかも。
    (個人的には、そのダンプ欲しいけど。www)
    カーネル モード デバッグできっちりトレースしないと、具体的な挙動は把握できないと思います。

    > トレンドマイクロDLLの影響にはほぼ間違いなさそうですが、
    > それを回避するようなデバッグができるようにVisual Studio側で
    > なんとかできないのでしょうかね?
    それを私に聞かれも。。。
    とりあえず「デバッグの停止時に自動的にコンソールを閉じる」の設定で回避するしかないと思います。
    そもそもこの問題の原因は、マイクロソフトとトレンドマイクロのどっちが悪いのか、白黒つけるのが難しいと思いますし。

    という訳で、私が手伝えるのはここまで。
    • 回答としてマーク pine 2019年6月19日 6:23
    2019年6月19日 5:56
  • > (個人的には、そのダンプ欲しいけど。www)

    ああ、よければダンプとPDBファイルを差し上げます。下記リンクにおいておきましたのでご自由に。

    クラッシュダンプ

    どうも、長々とありがとうございました。また、機会があればよろしくお願いします。

    2019年6月19日 6:23
  • この度Windows7(32bit)からWindows10(64bit)へPCが入れ替えになったのを期に、入れ替え前にLANを抜いた状態でウィルスバスターを外してやってみました。予想通り例外は発生しませんでした。
    2019年8月7日 23:51