Linux AMD64中如何使用fs / gs寄存器?
在x86-64架构上,两个寄存器具有特殊用途:FS和GS。在linux 2.6。*中,FS寄存器似乎用于存储线程本地信息。
- 那是对的吗?
- fs:0中存储了什么?是否有描述此内容的C结构?
- GS的用途是什么?
回答:
在x86-64中,有3个TLS条目,其中两个可通过FS和GS访问,FS由glibc内部使用(在IA32中,FS由Wine和GS由glibc使用)。
Glibc使其TLS入口指向,struct
pthread其中包含一些用于线程的内部结构。Glibc通常将struct
pthread变量引用pd
为 pthread描述符 。
在x86-64上,struct
pthread以a开头tcbhead_t
(这取决于体系结构,请参见宏TLS_DTV_AT_TP
和TLS_TCB_AT_TP
)。即使只有一个线程,此线程控制块头AFAIU仍包含一些必填字段。DTV是动态线程向量,并且包含指向通过加载的DSO的TLS块的指针dlopen()
。在TCB之前或之后,在(程序)加载时链接了可执行文件和DSO的静态TLS块。Ulrich
Drepper的TLS文档中对TCB和DTV进行了很好的解释(请参阅第3章中的图)。
以上是 Linux AMD64中如何使用fs / gs寄存器? 的全部内容, 来源链接: utcz.com/qa/425438.html