gpt4 book ai didi

linux - Linux AMD64 中的 fs/gs 寄存器如何使用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:43 30 4
gpt4 key购买 nike

在x86-64架构上,有两个寄存器有特殊用途:FS和GS。在linux 2.6.*中,FS寄存器似乎是用来存储线程局部信息的。

  • 对吗?
  • fs:0 存储了什么?是否有描述此内容的C结构?
  • 那么 GS 有什么用呢?

最佳答案

在 x86-64 中有 3 TLS entries , 其中两个可通过 FS and GS 访问, FS 由 glibc 在内部使用(在 IA32 中显然是 FS is used by Wine and GS by glibc )。

Glibc 将其 TLS 入口点设为 struct pthread它包含一些用于线程的内部结构。 Glibc 通常将struct pthread 变量称为pd,大概是pthread 描述符

在 x86-64 上,struct pthreadtcbhead_t 开头(这取决于体系结构,请参阅宏 TLS_DTV_AT_TPTLS_TCB_AT_TP )。这个线程控制 block 头 AFAIU 包含一些即使在有单个线程时也需要的字段。 DTV 是动态线程向量,包含指向通过 dlopen() 加载的 DSO 的 TLS block 的指针。在 TCB 之前或之后,有一个静态 TLS block ,用于在(程序)加载时链接的可执行文件和 DSO。 TCB 和 DTV 在 Ulrich Drepper's TLS document 中有很好的解释。 (查找第 3 章中的图表)。

关于linux - Linux AMD64 中的 fs/gs 寄存器如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800456/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com