解释在 Windows 64 位系统上运行的 32 位二进制文件中的 fs 寄存器

问题描述 投票:0回答:1

我在 Windows 64 位系统上运行的 32 位二进制文件中找到了以下代码:

mov eax,dword ptr fs:[18]
mov ecx,dword ptr [eax+F70]
mov eax,dword ptr [ecx+78]
ret

它似乎返回 win32threadinfo 地址,但由于 32 位/64 位混淆,我很难解释偏移量。这是正确的吗?

mov eax,dword ptr fs:[18]    => eax = TIB address (32-bit interpretation)
mov ecx,dword ptr [eax+F70]  => F70 offset undocumented in TIB ?
mov eax,dword ptr [ecx+78]   => eax = win32threadinfo (64-bit interpretation)
assembly cpu-registers portable-executable malware
1个回答
0
投票

WOW64 进程有两个 TEB(和两个 PEBS)。 32 位 TEB (TEB32) 可通过

fs
(及其位于
[fs:0x18]
的线性地址)以通常的方式访问,而本机 64 位 TEB (TEB64) 可通过偏移量
0xf70
处的指针访问TEB32(参见 this)或什至通过
gs
[gs:0x30]
(尽管这可能是特定于版本的)。

WOW64 进程的 TEB32 与真正的本机 32 位进程的 TEB32 并不完全相同。

所以,你的解释似乎是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.