这是一个示例 C 代码,它直接从KUSER_SHARED_DATA 的地址打印 Windows 版本。仅在 Windows 10 中测试。原始内存地址在 Windows 版本中有所不同,但这不是重点。
#include <stdio.h>
int main(void)
{
wprintf(
L"Version: %lu.%lu.%lu\n",
*(unsigned int *)(0x7FFE0000 + 0x026C),
*(unsigned int *)(0x7FFE0000 + 0x0270),
*(unsigned int *)(0x7FFE0000 + 0x0260)
);
}
下面是反编译的代码:
在 GHIDRA 中:
int main(int _Argc,char **_Argv,char **_Env)
{
wprintf(L"Version: %lu.%lu.%lu\n",
(ulonglong)_DAT_7ffe026c,
(ulonglong)_DAT_7ffe0270,
(ulonglong)_DAT_7ffe0260);
return 0;
}
在 IDA Pro + Hex-Rays 中:
int __fastcall main()
{
wprintf(L"Version: %lu.%lu.%lu\n",
MEMORY[0x7FFE026C],
MEMORY[0x7FFE0270],
MEMORY[0x7FFE0260]);
return 0;
}
我的问题:在反编译代码中,是否可以将内存地址显示为 KUSER_SHARED_DATA 的成员?例如,我想显示MEMORY[0x7FFE0260]
为SharedData.NtBuildNumber
或类似的东西。