在程序集中GetThreadID



我阅读了FastMM4的源代码,注意到这个有趣的函数

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

我已经测试过了,它可以工作,所以我的问题是任何解释为什么它可以工作?

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

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

相关内容

  • 没有找到相关文章

最新更新