gpt4 book ai didi

ubuntu - 线程控制 block (TLS 变体 2?)

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:47 25 4
gpt4 key购买 nike

我目前正在实现一个模拟器来运行 32 位 x86 ELF 文件(使用 GCC 编译),并且我正在尝试了解 TLS(线程本地存储)。

阅读了 Ulrich Dreppers 关于这个主题的论文后,我有以下问题:-

据我所知,在 %gs:0 处引用的内存包含一个 TCB(线程控制 block )。但是,我无法准确找到该地址存储的结构。通过我的 kernals 源代码搜索,我可以找到几个看起来很有前途的结构(tcbhead_t 和其他几个),但我知道在我的系统(Ubuntu 2.6.32-41-generic)上存储在偏移量 0x10 处的值该结构是指向 __kernal_vsyscall 函数的指针,这似乎与我看到的结构不匹配。

如果有人能指出我遗漏了什么,建议一些相关文档,或者指出源代码的正确区域,我将非常感激。

谢谢,

瑞克。

最佳答案

我不能代表 Linux,但一般来说,TLS 存储用于允许每个线程 分配特定于线程的任意存储。

我假设您真的只是在模拟 x86 指令(在您加载 elf 之后),所以 elf 在这里并不有趣。

在那种情况下,您需要模拟 TLS 存储。也就是说,对于每个(您必须跟踪此)模拟线程,您需要跟踪与该线程的 GS 寄存器关联的单独值。为此,您需要模拟 OS 线程创建/停止/检查/终止调用,以及 OS-TLS 初始化调用。 (模拟的)线程创建调用将导致模拟 VM 内的特定分配空间分配给该模拟线程的 GS 寄存器。

一旦你有了它,模拟 GS 访问就足够了,因为关于 TLS 的其他一切都只是在进程空间内运行的常规机器指令。

关于ubuntu - 线程控制 block (TLS 变体 2?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19160991/

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