【发布时间】:2017-01-01 09:35:27
【问题描述】:
我找到了有关 FS 寄存器用途的 MSDN 文档:
https://msdn.microsoft.com/en-us/library/ms253960(v=vs.90).aspx
其中指出:
"在x86环境下,FS寄存器指向当前值 线程信息块 (TIB) 结构。"
但我似乎无法在基于 Windows 的环境中找到任何关于 GS 寄存器用途的严格文档。
谁能告诉我去哪里看,或者给个解释?
【问题讨论】:
-
@Michael:我看过了,但我在他们俩都没有看到这个问题的答案。所以 Windows 使用
FS作为 TIB,但是GS呢?它对用户空间有用吗?一个快速的谷歌发现GSholds the TIB reference on x86-64 Windows,这似乎很奇怪,因为swapgs使内核更不方便修改gs的用户空间值。 (出于这个原因,Linux 使用fs进行 TLS,IIRC)。但不管怎样,那么问题来了,64 位 Windows 上的另一个段寄存器是干什么用的? -
在 Windows 上使用 FS 和 GS 是一个实现细节,故意没有记录。如果我没记错的话,逆向工程表明在 32 位 Windows 上,FS 持有指向 TIB/TEB 的指针,而 GS 持有指向线程本地存储 (TLS) 的指针,或者根本不使用。在 64 位 Windows 上,GS 指向 TIB/TEB。为什么你需要知道这些信息?你想解决什么问题?