-1

疑似変数とは何か、また以下の WinMain 関数の最初のパラメーターは正確には何なのか説明してもらえますか??

GetStartupInfo(&StartupInfo);
int nMainRetVal = WinMain((HINSTANCE)&__ImageBase, NULL, pszCommandLineAnsi,
   (StartupInfo.dwFlags & STARTF_USESHOWWINDOW)
      ? StartupInfo.wShowWindow : SW_SHOWDEFAULT);

また、次のステートメントは何をしますか??

extern "C" const IMAGE_DOS_HEADER __ImageBase;
4

2 に答える 2

0

の最初のパラメータWinMainは、いわゆる「アプリケーションインスタンスハンドル」です。これは、アプリケーションの実行中のインスタンスへのハンドルを示していた、古代のWindows3.x時代に端を発しています。ただし、Win32(Windows 9x / NT)以降、このパラメーターは、プロセス仮想アドレス空間での実行可能モジュールマッピングのベースアドレスです。

したがって、表示されるのは、署名を満たすために__ImageBaseキャストされるイメージベースアドレスです。HINSTANCEWinMain

さて、これ__ImageBaseはビルド時に生成された構造であり、イメージの開始アドレスに正確に存在すると思います。

そして、「疑似変数」とは何かわかりません。しかし、おそらくこれはまさに__ImageBaseです。

于 2012-05-21T20:32:35.637 に答える
0

__ImageBaseは、「静的ライブラリからの現在のモジュールのHINSTANCE」です。これは、リンカが提供するいわゆる疑似変数です。この疑似変数は、モジュールがメモリにロードされたアドレスです。この疑似変数を使用すると、メモリからマップされたイメージに直接アクセスして、そのコンテンツをアドレス指定できます。

于 2012-05-22T05:25:55.357 に答える