-
-
为什么在64位系统中读到了32位内核文件?
-
发表于:
2024-1-31 23:38
2335
-
void test()
{
char szPath[] = "C:\\Windows\\System32\\ntoskrnl.exe";
SYMSRV_INDEX_INFO info = { 0 };
info.sizeofstruct = sizeof(SYMSRV_INDEX_INFO);
if (!SymSrvGetFileIndexInfo(szPath, &info, 0))
{
printf("SymSrvGetFileIndexInfo error \r\n");
return;
}
printf("data1: %08X \r\n", info.guid.Data1);
}
这里SymSrvGetFileIndexInfo读取PE文件调试目录中保存的GUID。
编译成32位程序。首先在32位Win7下运行,得到内核GUID.data1值为0x487DC690;然后在64位win7下运行,得到同样结果。
然后将内核拷贝到程序相同目录下,把szPath改成"ntoskrnl.exe",得到的结果是0xECE191A2,似乎这才是64位内核的GUID.data1。
所以似乎通过C:\Windows\System32\ntoskrnl.exe这个路径,在32位程序和64位程序打开这个文件,读到的分别是32位内核和64位内核,这是为什么呢?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课