我发现有关FS寄存器的MSDN文档:
https://msdn.microsoft.com/en-us/library/ms253960(v=vs.90).aspx
指出:
“在x86环境中,FS寄存器指向当前值 线程信息块(TIB)结构。“
但我似乎无法在基于Windows的环境中找到有关GS寄存器用途的严格文档。
有人可以告诉我在哪里看,或者给出解释吗?
答案 0 :(得分:10)
在32位Windows上GS
保留供将来使用
FS
段指向Thread information block。
在x64模式下,FS
和GS
段寄存器已被换掉。
在x86模式下FS:[0]
指向TIB的开头,在X64中指的是GS:[0]
。
Win64使用GS
的原因是在32位兼容层中使用FS
寄存器(容易混淆地称为Wow64)。
由于32位应用程序使用FS
,因此简化了Win64的簿记
32位应用程序永远不会导致GS
被更改,64位应用程序永远不会导致FS
被更改。
请注意,Win64和Wow64中GS
非零的事实可用于检测32位应用程序是否在64位Windows中运行。
在“真正的”32位Windows GS
始终为零。