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 注册目的的严格文档。
有人可以告诉我在哪里看,或给出解释吗?
(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 模式下,FS
和 GS
段寄存器已交换。
在 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