微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在C中的“线程fork”(理想的POSIX,但只是Linux的作品)

java线程在terminal中单击时停止执行

Boost.asio和UNIX信号处理

了解MsgWaitForMultipleObjects

在C,multithreading,多个窗口调用一个窗口过程,将每个调用使用新的局部variables,或者我需要一个互斥体?

您可以在线程信息块中找到这些信息。 但请注意,这样做是访问未记录的结构,因此非常不便携,并可能在未来版本的Windows中打破 。 看起来你可以从TIB中获得当前线程的线程本地存储区; 我不确定谁会得到另一个线程的TLS。

您可以尝试挖掘进程环境块(PEB),位于TIB的偏移地址0x30处,但同样,您正在处理可能会更改的未记录结构。

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

有关各种与线程本地存储相关的功能的更多信息,请参阅MSDN 。 您可以使用TlsGetValue()来获取特定的TLS值; 不要在内存中徘徊,即使它工作 – 你只是调用未定义的行为,这可能会发生在未来的Windows版本中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐