代码之家  ›  专栏  ›  技术社区  ›  Walter Bright

如何找到线程本地存储的开始和结束?

  •  2
  • Walter Bright  · 技术社区  · 16 年前

    在Windows和Linux下,给定一个线程句柄,如何确定其对应的静态线程本地存储块的开始和结束?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Adam Rosenfield    16 年前

    你可以在 Thread Information Block 高度不可移植,很可能在未来版本的Windows中崩溃 . 看来你可以得到 的线程本地存储竞技场;我不确定谁会得到另一个线程的TLS。

    您可以尝试挖掘TIB中偏移量0x30处的流程环境块(PEB),但同样,您要处理的是可能发生更改的未记录结构。

        2
  •  2
  •   Walter Bright    16 年前

    Windows线程信息块给出位于FS:0x2C的线程本地存储数组的地址,该数组是指向每个模块的TLS的指针数组。问题是,没有指示该阵列有多大,或者每个模块TLS数据块有多大。

        3
  •  1
  •   Adam Rosenfield    16 年前

    看到了吗 MSDN 有关各种线程本地存储相关函数的详细信息。你可以用 TlsGetValue() 为了得到一个特定的TLS值,不要在内存中到处乱翻,即使它能工作——你只是在调用未定义的行为,这种行为碰巧可以工作,但在未来的Windows版本中可能会中断。