Win32中的FS寄存器
我正在阅读 SEH 是如何在 Win32 中实现的,并且遇到了这个称为FS 寄存器的东西。我在谷歌上找不到任何好东西(很可能我搜索的是错误的东西)。那么谁能解释一下它是什么?
I'm reading how SEH is implemented in Win32 and I came across this thing called the FS register. I couldn't find anything good on Google (most probably I may be searching for the wrong thing). So can anyone explain what it is?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个段寄存器。 x86 有六个:CS、DS、ES、SS、FS 和 GS(FS 和 GS 是 80386 中新增的)。助记符来自于它们的角色:代码段、数据段、扩展段(实际上是一个辅助寄存器)、堆栈段。这些角色以 x86 汇编指令的语义进行硬编码。 FS 和 GS 与 ES 一样是辅助的,因此它们只带有 E 之后的字母。
在通常使用的 32 位保护模式中(例如,在 Windows、Linux、*BSD 中),CS、DS、ES 和 SS 均设置为基数为 0,限制为 4Gig,并且内存保护仅通过页面权限完成。 FS 在用户模式下指向线程信息块(TIB),在内核模式下指向处理器控制区域(KPCR)。 Matt Pietrek 几年前写了一篇关于它的非常好的文章,至今仍可在 MSDN 上找到。
It's a segment register. The x86 has six of them: CS, DS, ES, SS, FS and GS (FS and GS were new in 80386). The mnemonics come from their roles: code segment, data segment, extended segment (in fact, an auxiliary register), stack segment. These roles are hard-coded in the semantics of x86 assembly instructions. FS and GS are auxiliary like ES so they just bear the next letters after E.
In 32-bit protected mode as it's typically used (e.g., in Windows, Linux, *BSD), CS, DS, ES and SS are all set with a base of 0 and a limit of 4Gig, and memory protection is done only with page permissions. FS points to a Thread Information Block (TIB) in user mode and to Processor Control Region (KPCR) in kernel mode. Matt Pietrek wrote a pretty good article about it years ago that's still available on MSDN.