我目前正在实现一个模拟器来运行 32 位 x86 ELF 文件(使用 GCC 编译),并且我正在尝试理解 TLS(线程本地存储)。
在阅读了有关该主题的 Ulrich Dreppers 论文后,我有以下问题:-
据我了解,%gs:0 引用的内存包含一个 TCB(线程控制块)。但是,我无法准确找到该地址存储的结构。搜索我的内核源代码,我可以找到一些看起来很有希望的结构(tcbhead_t 和其他几个),但我知道在我的系统(Ubuntu 2.6.32-41-generic)上存储在偏移量 0x10 处的值该结构是指向 __kernal_vsyscall 函数的指针,这似乎与我看到的结构不匹配。
如果有人能指出我遗漏的内容,建议一些相关文档,或者指出源代码的正确区域,我将不胜感激。
谢谢,
瑞克。