什么是Windows上使用的GS寄存器?

时间:2016-08-25 05:05:05

标签: windows assembly x86

我发现有关FS寄存器的MSDN文档:

https://msdn.microsoft.com/en-us/library/ms253960(v=vs.90).aspx

指出:

  

“在x86环境中,FS寄存器指向当前值   线程信息块(TIB)结构。“

但我似乎无法在基于Windows的环境中找到有关GS寄存器用途的严格文档。

有人可以告诉我在哪里看,或者给出解释吗?

1 个答案:

答案 0 :(得分:10)

在32位Windows上GS保留供将来使用 FS段指向Thread information block

在x64模式下,FSGS段寄存器已被换掉。

在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始终为零。