在64位Windows系统运行的32位二进制中解析FS寄存器与Win32ThreadInfo地址
64位Windows下32位二进制汇编代码解析验证
提取到的32位汇编代码:
mov eax,dword ptr fs:[18] mov ecx,dword ptr [eax+F70] mov eax,dword ptr [ecx+78] ret
你的解读内容:
mov eax,dword ptr fs:[18] => eax = TIB地址 (32位视角) mov ecx,dword ptr [eax+F70] => F70偏移在公开TIB文档中未定义? mov eax,dword ptr [ecx+78] => eax = win32threadinfo (64位视角)
解读验证结论:
你的解读完全正确,具体拆解如下:
- 第一行
mov eax,dword ptr fs:[18]:在32位进程中(包括WoW64环境下的32位进程),fs:[18]确实指向32位TIB(线程信息块)的起始地址,这部分和原生32位系统的行为一致。 - 第二行
mov ecx,dword ptr [eax+0xF70]:这个0xF70属于WoW64环境下32位TIB的未公开内部偏移,公开的TIB结构文档中不会提及它。该偏移指向WoW64内部维护的线程关联结构,用来衔接32位进程与64位系统的线程数据。 - 第三行
mov eax,dword ptr [ecx+0x78]:这个0x78偏移对应的正是64位线程结构中Win32ThreadInfo的地址,通过这条指令,32位进程就能拿到目标结构的指针。
本质上这段代码是WoW64环境下,32位进程通过未公开的TIB内部字段,跨位获取系统级线程信息的典型逻辑。
内容的提问来源于stack exchange,提问作者Nerios
相关产品推荐
相关产品推荐

