VSがビルドした直後の「xxx.exeは有効なWin32アプリケーションではありません」

ミック

私は、Windows-7-64PCのVisualStudio 2015(IDEを使用)でWinAPIアプリケーションの開発に成功しています。私は通常、リリースモードでプログラムをテストします。

次に、ソースを編集しました。プログラムはエラーなしでコンパイルおよびリンクされましたが、プログラムが期待どおりに動作しなかったため、デバッグモードに切り替えて、ビルドして実行しようとしました。再びVSはエラーなしでコンパイルおよびリンクされましたが、その後不平を言いました

「プログラム 'f:\ dropbox \ blah \ x64 \ Debug \ xxx.exe'を起動できません。'f:\ dropbox \ blah \ x64 \ Debug \ xxx.exe 'は有効なWin32アプリケーションではありません。」

変だと思ったので、リリースモードに戻ってもう一度試してみました。プログラムは正常に起動しました。私はいくつかの編集を行い、数回再構築しましたが、後でVSが宣言しました

「プログラム 'f:\ dropbox \ blah \ x64 \ Release \ xxx.exe'を起動できません。'f:\ dropbox \ blah \ x64 \ Release \ xxx.exe 'は有効なWin32アプリケーションではありません。」

私はすべてをきれいにし、VSを再起動し、PCを再起動しました。しかし、まったく役に立たなかったのですが、それでもまったく同じエラーが発生します。

編集:同様のレポートについて読んだ後、Dropboxの同期を一時停止してみました。その後、動作しているように見えましたが、1回か2回しか動作せず、問題が再発しました。次に、マルチプロセッサコンパイルをオフにしてみましたが、これにより、プログラムのリリースバージョンを再度実行できるようになりました。それ以来、私は問題なく何度も(50回以上?)編集-再構築-実行しましたが、それでもデバッグバージョンの実行を拒否します。

編集:参考までに私のウイルス対策ソフトウェアはMicrosoft SecurityEssentialsです

編集: dumpbinを呼び出してmy(実行されていないdebug exe)を渡すと、次の出力が生成されます。

File Type: EXECUTABLE IMAGE

  Summary

        1000 .00cfg
    77BB8000 .data
        1000 .gfids
        4000 .idata
        4000 .pdata
       31000 .rdata
        4000 .reloc
        1000 .rsrc
       DD000 .text

編集:ドロップボックスを介してリンクされ、まったく同じ症状を持つ別のマシン(windows-10-64)でcompile-build-runを試してみました。つまり、リリースモードで実行されますが、デバッグモードでは実行されません。

編集: Michael Burrのアドバイスで、(動作していない)デバッグexeでdependency Walkerを実行すると、これらのエラーが報告さここに画像の説明を入力してくださいれました。好奇心から、dep-walkerが自分の(動作している)について言ったことを確認したいと思いました。 exeをリリースすると、まったく同じエラーのリストが表示されることがわかりました!...さらに検索すると、このSOの質問見つかりました。「要点:他の誰かが述べたように、ツールは今では少し古くなっています。また、新しいOSでは常に正しく動作するとは限りません。したがって、目を離さず、「API-MS-WIN-CORE-COM-L1-1-0.DLL」がないことで誤解を招くことはありません...問題はおそらくあります完全に他の場所です。」

編集:下の画像の左側にある選択ボックスからデバッグモードとリリースモードを切り替え、緑色の三角形をクリックしてプログラムを実行します。ここに画像の説明を入力してください

編集:デバッグexe用のマップファイルを生成しました。ここに表示するには大きすぎますが、次の行から始まります...

 Timestamp is 5811bed3 (Thu Oct 27 09:46:11 2016)

 Preferred load address is 0000000140000000

 Start         Length     Name                   Class
 0001:00000000 00002840H .text$di                CODE
 0001:00002840 000da860H .text$mn                CODE
 0001:000dd0a0 00001020H .text$mn$00             CODE
 0001:000de0c0 00001eb0H .text$x                 CODE
 0001:000dff70 0000104bH .text$yd                CODE
 0002:00000000 00000110H .CRT$XCA                DATA
 0002:00000110 00000110H .CRT$XCAA               DATA
 0002:00000220 00000110H .CRT$XCL                DATA
 0002:00000330 00000128H .CRT$XCU                DATA
 0002:00000458 00000110H .CRT$XCZ                DATA
 0002:00000568 00000110H .CRT$XIA                DATA
 0002:00000678 00000110H .CRT$XIAA               DATA
 0002:00000788 00000110H .CRT$XIAC               DATA
 0002:00000898 00000110H .CRT$XIZ                DATA
 0002:000009a8 00000110H .CRT$XPA                DATA
 0002:00000ab8 00000110H .CRT$XPZ                DATA
 0002:00000bc8 00000110H .CRT$XTA                DATA
 0002:00000cd8 00000118H .CRT$XTZ                DATA
 0002:00000df0 0002c960H .rdata                  DATA
 0002:0002d750 00000998H .rdata$r                DATA
 0002:0002e0e8 00000178H .rdata$zzzdbg           DATA
 0002:0002e260 00000110H .rtc$IAA                DATA
 0002:0002e370 00000188H .rtc$IMZ                DATA
 0002:0002e4f8 00000110H .rtc$IZZ                DATA
 0002:0002e608 00000110H .rtc$TAA                DATA
 0002:0002e718 00000188H .rtc$TMZ                DATA
 0002:0002e8a0 00000110H .rtc$TZZ                DATA
 0002:0002e9b0 00003b68H .xdata                  DATA
 0002:00032518 00000275H .xdata$x                DATA
 0002:0003278d 00000000H .edata                  DATA
 0003:00000000 000023e0H .data                   DATA
 0003:000023e0 00000580H .data$r                 DATA
 0003:00002960 77376001H .bss                    DATA
 0004:00000000 0000369cH .pdata                  DATA
 0005:00000000 00000ed0H .idata$5                DATA
 0005:00000ed0 000000c8H .idata$2                DATA
 0005:00000f98 00000018H .idata$3                DATA
 0005:00000fb0 00000ed0H .idata$4                DATA
 0005:00001e80 00001fc6H .idata$6                DATA
 0006:00000000 0000015eH .gfids$y                DATA
 0007:00000000 0000011bH .00cfg                  DATA
 0008:00000000 00000170H .rsrc$01                DATA
 0008:00000170 000002ccH .rsrc$02                DATA

  Address         Publics by Value              Rva+Base               Lib:Object

 0000:00000000       __guard_iat_table          0000000000000000     <absolute>
 0000:00000000       __guard_longjmp_count      0000000000000000     <absolute>
 0000:00000000       __guard_longjmp_table      0000000000000000     <absolute>
 0000:00000000       __guard_fids_count         0000000000000000     <absolute>
 0000:00000000       ___safe_se_handler_table   0000000000000000     <absolute>
 0000:00000000       ___safe_se_handler_count   0000000000000000     <absolute>
 0000:00000000       __guard_iat_count          0000000000000000     <absolute>
 0000:00000000       __guard_fids_table         0000000000000000     <absolute>
 0000:00000000       __dynamic_value_reloc_table 0000000000000000     <absolute>
 0000:00000100       __guard_flags              0000000000000100     <absolute>
 0000:00000000       __ImageBase                0000000140000000     <linker-defined>
 0001:00002aa0       ?readstring@@YAXPEAD0@Z    0000000140003aa0 f   COMMAND.obj
 0001:00002b70       ?make_phere@@YAXH@Z        0000000140003b70 f   COMMAND.obj
 0001:00002c50       ?load_snap@@YAXXZ          0000000140003c50 f   COMMAND.obj
 0001:00002d30       ?i_rand_0_n_inclusive@@YAHH@Z 0000000140003d30 f   COMMAND.obj
ハンスパッサン
  77BB8000 .data

それはほぼ間違いなく問題です非常に大きなデータセクションがあります。そのサイズは、Windows上の単一の実行可能モジュールで可能なサイズに疑わしいほど近いです。このサンプルCプログラムから、より一貫性のある再現を得ることができます。

unsigned char kaboom[0x7d000000];

int main()
{
    return 0;
}

ところで、あまり良いエラーメッセージではありませんが、Microsoftはこのコーナーケースのエラーコードを予約していません。そして確かに、0x77BB8000でエッジに近づくと、それはうまく繰り返されません。実行可能イメージは、コードとデータをメモリにマップするためにローダーが作成するメモリマップファイルの単一のビューに適合している必要があります。ビューには2ギガバイトの厳しい上限があります。これは32ビットプロセスの基本であり、64ビットバージョンのWindowsでもMMFビューサイズの制限があります。

そのデータセクションに使用できるスペースの量は、実行ごとに異なります。ビューサイズから差し引かれるのは、アドレススペースの開始と終了のマップ不可能な領域と、32ビットEXEプロセスのオペレーティングシステムDLL(少なくともntdll.dllとkernel32.dll)に必要なスペースです。そして、ASLR(アドレス空間配置のランダム化)によって失われるスペースは、数が変化します。また、マルウェア対策やDropboxで使用されるDLLのように挿入されるDLL。

データセクションをこれほど大きくする必要がある理由は推測できません。リンカに.mapファイルを生成するように依頼して、セクションの内訳を取得します。大きなグローバル変数が飛び出すはずです。利用可能なアドレス空間がたくさんあるように、必ずx64をターゲットにして、フリーストア(mallocなど)を使用して大きな配列を割り当ててください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ノードprinter.nodeは有効なwin32アプリケーションではありません

分類Dev

SQL ServerforのSQLSRVPHPは有効なWin32アプリケーションではありません

分類Dev

Wampservergibinはphp5.4の有効なWin32アプリケーションではありません

分類Dev

Exeは有効なwin32アプリケーションではありませんが、64ビットで実行されています

分類Dev

WindowsでのPythonHadoopストリーミング、スクリプトは有効なWin32アプリケーションではありません

分類Dev

Python:DLLのロードに失敗しました:%1は有効なWin32アプリケーションではありません

分類Dev

DLLのロードに失敗しました:%1は有効なWin32アプリケーションではありません-Appcelerator

分類Dev

python cython ImportError:DLLのロードに失敗しました:%1は有効なWin32アプリケーションではありません

分類Dev

PythonでDLLをロード中にエラーが発生しました。有効なwin32アプリケーションではありません

分類Dev

NumPyでDLLのロードに失敗しました-有効なWin32アプリケーションではありません-

分類Dev

WindowsXPのInnoSetupインストーラーは「有効なwin32アプリケーションではありません」を提供します

分類Dev

「DLLの読み込みに失敗しました:%1は有効なWin32アプリケーションではありません。」Pygame

分類Dev

cx-freeze "ImportError:DLLの読み込みに失敗しました:%1は有効なWin32アプリケーションではありません"

分類Dev

Anaconda / Orange3はOSErrorを生成します:[WinError 193]%1は有効なWin32アプリケーションではありません

分類Dev

CreateProcessエラー= 193、%1は有効なWin32アプリケーションではありません-> [ヘルプ1]

分類Dev

Windows Server 2008でビルドするときに「有効なWin32アプリケーションではありません」

分類Dev

PHPロードエラー:%1は有効なWin32アプリケーションではありません。

分類Dev

VS 2017 c#インタラクティブは有効なWin32アプリケーションではありません

分類Dev

IPython Notebook(Anaconda 3)の起動時にエラー「%1は有効なWin32アプリケーションではありません」

分類Dev

インストーラーの起動中に有効なwin32アプリケーションではありません

分類Dev

MASM32アセンブルエラー-C:\ masm32 \ bin \ ml.exeは有効なWin32アプリケーションではありません

分類Dev

syscallを使用してmono-2.0-sgen.dllを呼び出すと、「有効なWin32アプリケーションではありません」

分類Dev

電子を使用したPycharm-runnerw.exe:CreateProcessがエラー193で失敗しました:%1は有効なWin32アプリケーションではありません

分類Dev

CMake:リンクコマンドの実行中にエラーが発生しました:%1は有効なWin32アプリケーションではありません

分類Dev

Nuitkaを使用してPythonプログラムをコンパイルした後、「有効なwin32アプリケーションではありません」というエラーが表示されます。

分類Dev

ImportError:DLLのロードに失敗しました:%1は_imagingモジュールの有効なWin32アプリケーションではありません

分類Dev

ダイナミックライブラリをロードできませんphp_sqlsrv_7_nts.dllは有効なWin32アプリケーションではありません

分類Dev

ノードjs、%1は有効なWin32アプリケーションではありません、js-bson:c ++ bson拡張機能のロードに失敗しました、windows

分類Dev

.Net Framework 4.6インストールの結果、「%1は有効なwin32アプリケーションではありません」というエラーが発生します

Related 関連記事

  1. 1

    ノードprinter.nodeは有効なwin32アプリケーションではありません

  2. 2

    SQL ServerforのSQLSRVPHPは有効なWin32アプリケーションではありません

  3. 3

    Wampservergibinはphp5.4の有効なWin32アプリケーションではありません

  4. 4

    Exeは有効なwin32アプリケーションではありませんが、64ビットで実行されています

  5. 5

    WindowsでのPythonHadoopストリーミング、スクリプトは有効なWin32アプリケーションではありません

  6. 6

    Python:DLLのロードに失敗しました:%1は有効なWin32アプリケーションではありません

  7. 7

    DLLのロードに失敗しました:%1は有効なWin32アプリケーションではありません-Appcelerator

  8. 8

    python cython ImportError:DLLのロードに失敗しました:%1は有効なWin32アプリケーションではありません

  9. 9

    PythonでDLLをロード中にエラーが発生しました。有効なwin32アプリケーションではありません

  10. 10

    NumPyでDLLのロードに失敗しました-有効なWin32アプリケーションではありません-

  11. 11

    WindowsXPのInnoSetupインストーラーは「有効なwin32アプリケーションではありません」を提供します

  12. 12

    「DLLの読み込みに失敗しました:%1は有効なWin32アプリケーションではありません。」Pygame

  13. 13

    cx-freeze "ImportError:DLLの読み込みに失敗しました:%1は有効なWin32アプリケーションではありません"

  14. 14

    Anaconda / Orange3はOSErrorを生成します:[WinError 193]%1は有効なWin32アプリケーションではありません

  15. 15

    CreateProcessエラー= 193、%1は有効なWin32アプリケーションではありません-> [ヘルプ1]

  16. 16

    Windows Server 2008でビルドするときに「有効なWin32アプリケーションではありません」

  17. 17

    PHPロードエラー:%1は有効なWin32アプリケーションではありません。

  18. 18

    VS 2017 c#インタラクティブは有効なWin32アプリケーションではありません

  19. 19

    IPython Notebook(Anaconda 3)の起動時にエラー「%1は有効なWin32アプリケーションではありません」

  20. 20

    インストーラーの起動中に有効なwin32アプリケーションではありません

  21. 21

    MASM32アセンブルエラー-C:\ masm32 \ bin \ ml.exeは有効なWin32アプリケーションではありません

  22. 22

    syscallを使用してmono-2.0-sgen.dllを呼び出すと、「有効なWin32アプリケーションではありません」

  23. 23

    電子を使用したPycharm-runnerw.exe:CreateProcessがエラー193で失敗しました:%1は有効なWin32アプリケーションではありません

  24. 24

    CMake:リンクコマンドの実行中にエラーが発生しました:%1は有効なWin32アプリケーションではありません

  25. 25

    Nuitkaを使用してPythonプログラムをコンパイルした後、「有効なwin32アプリケーションではありません」というエラーが表示されます。

  26. 26

    ImportError:DLLのロードに失敗しました:%1は_imagingモジュールの有効なWin32アプリケーションではありません

  27. 27

    ダイナミックライブラリをロードできませんphp_sqlsrv_7_nts.dllは有効なWin32アプリケーションではありません

  28. 28

    ノードjs、%1は有効なWin32アプリケーションではありません、js-bson:c ++ bson拡張機能のロードに失敗しました、windows

  29. 29

    .Net Framework 4.6インストールの結果、「%1は有効なwin32アプリケーションではありません」というエラーが発生します

ホットタグ

アーカイブ