This question already has answers here:
What is the “FS”/“GS” register intended for?

(6 个回答)


4年前关闭。




我找到了有关 FS 注册目的的 MSDN 文档:

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

其中指出:



但我似乎无法在基于 Windows 的环境中找到任何关于 GS 注册目的的严格文档。

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

最佳答案

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

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

在 x86 模式下 FS:[0] 指向 TIB 的开始,在 X64 中它是 GS:[0]
Win64 使用 GS 的原因是 FS 寄存器用于 32 位兼容层(令人困惑地称为 Wow64)。
由于 32 位应用程序使用 FS,因此简化了 Win64 的簿记。
32 位应用程序永远不会导致 GS 被更改,64 位应用程序永远不会导致 FS 被更改。

请注意,在 Win64 和 Wow64 中 GS 不为零这一事实可用于检测 32 位应用程序是否在 64 位 Windows 中运行。
在“真正”的 32 位 Windows 中,GS 始终为零。

关于windows - Windows 上的 GS 寄存器有什么用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39137043/

10-10 17:00