伪变量

时间:2012-05-21 20:23:29

标签: windows executable exe portable-executable

有人可以解释一下什么是伪变量以及下面函数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;

2 个答案:

答案 0 :(得分:0)

WinMain的第一个参数是所谓的“应用程序实例句柄”。这件事起源于古老的Windows 3.x次,它表示应用程序运行实例的句柄。但是从Win32(Windows 9x / NT)开始,此参数是进程虚拟地址空间中可执行模块映射的基址。

因此,您看到的是图片基地__ImageBase,它被投射到HINSTANCE以符合WinMain签名。

现在,__ImageBase - 我猜这是一个构建时生成的结构,它完全位于图像的起始地址。

而且,我不确定什么是“伪变量”。但也许这正是__ImageBase

答案 1 :(得分:0)

__ ImageBase是"current module's HINSTANCE from a static library"。这是链接器提供的所谓的伪变量。此伪变量是模块已加载到内存中的地址。使用此伪变量,您可以直接从内存访问映射的图像并解决其内容。