11

我阅读了 FastMM4 的源代码,并注意到了这个有趣的功能

function GetThreadID: Cardinal;
{$ifdef 32Bit}
asm
  mov eax, FS:[$24]
end;
{$else}
begin
  Result := GetCurrentThreadID;
end;
{$endif}

我已经对其进行了测试,并且它有效,所以我的问题是任何解释它为什么有效?

4

2 回答 2

10

x86 寄存器 FS 指向 Windows 中的线程信息块。TIB 中地址 FS+0x24 的值包含当前线程的 ID。通过将值移动到用于传递函数返回值的eax,GetThreadID返回当前线程ID。

于 2013-04-23T16:05:35.550 回答
1

此方法使用存储在线程环境块中的信息

于 2013-04-23T16:02:18.767 回答