【发布时间】:2023-01-10 16:18:45
【问题描述】:
颠倒了这个功能。有用。但逐步通过我无法弄清楚如何。为什么这行得通?
bool _Is64BitOS(void) {
unsigned int version = *(unsigned int*)0x7FFE026C;
unsigned int address = version == 10 ? 0x7FFE0308 : 0x7FFE0300;
ILog("Running %u-bit system\n", *(void**)address ? 32 : 64);
return (*(void**)address ? false : true);
};
为什么我们在 64 位 Windows 安装上在 0x7FFE026C 找到 0x0A?它超出了 32 位二进制文件上所有模块的地址空间,查看内存它看起来就在堆之前。
【问题讨论】: