首页
社区
课程
招聘
为什么在64位系统中读到了32位内核文件?
发表于: 2024-1-31 23:38 2284

为什么在64位系统中读到了32位内核文件?

2024-1-31 23:38
2284
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直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 3760
活跃值: (5921)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
2
32位进程在64位系统下文件系统和注册表都有重定向  https://learn.microsoft.com/zh-cn/windows/win32/winprog64/file-system-redirector
2024-2-1 10:30
1
游客
登录 | 注册 方可回帖
返回
//