当前位置: 首页 > 面试题库 >

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

公孙鸿才
2023-03-14
问题内容

在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变量引用pdpthread描述符

在x86-64上,struct pthread以a开头tcbhead_t(这取决于体系结构,请参见宏TLS_DTV_AT_TPTLS_TCB_AT_TP)。即使只有一个线程,此线程控制块头AFAIU仍包含一些必填字段。DTV是动态线程向量,并且包含指向通过加载的DSO的TLS块的指针dlopen()。在TCB之前或之后,在(程序)加载时链接了可执行文件和DSO的静态TLS块。Ulrich
Drepper的TLS文档中
对TCB和DTV进行了很好的解释(请参阅第3章中的图)。



 类似资料:
  • 如何在按钮标题中使用小字母?我正在res/values/strings中创建字符串。带有注册表的xml,但仍有上限。

  • 我需要只使用%RAX、%RBX、%RCX、%RDX、%RSI和%RDI(还有%RSP和%RBP)编写像素化汇编代码 GCC编写的程序集代码: 已将%dl更改为%rdx:

  • 我想知道如何从ASM指令中提取寄存器值,并将其放入C中的变量中。 例如:移动文档 DWORD PTR DS:[ESI],EDI (假设EDI持有的值为int)int value=EDI;

  • 我正在努力学习组装,这在一定程度上是有意义的,但我有一个问题。我有以下源文件: 很好用。我只是不明白为什么在不同的情况下需要使用特定的整数寄存器。 例如,通过反复试验,我发现当说我想要哪个系统调用时,例如。 我将值放入整数寄存器,但也可以使用整数寄存器、、或。 编辑:我的问题不是这个问题的重复,因为这个问题问的是在哪里使用更小的整数寄存器,我问的是一种决定使用哪个整数寄存器的方法。

  • Responsive GS 是一个流体网格 CSS 框架,用于快速开发响应式的 Web 网站。 Responsive GS 提供三种风格:12、16 和 24 列,使用 media queries 支持所有标准设备。

  • 问题内容: 我需要使用FS模块(fs.writeFile)在文件中写入一些数据。我的堆栈是webpack +反应+还原+电子。 第一个问题是: 无法解析模块’fs’ 。我尝试使用 经过几次尝试,问题得以解决( 节点:{fs:“ empty”} )。但是,还有第二个问题:屏幕截图。 您可以看到 fs 是空对象,并且方法writeFile no不存在。我试图更改webpack的配置。 在这种情况下,