有人可以解释一下什么是伪变量以及下面函数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;
答案 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"。这是链接器提供的所谓的伪变量。此伪变量是模块已加载到内存中的地址。使用此伪变量,您可以直接从内存访问映射的图像并解决其内容。