Linux 线程控制块和线程本地存储之间的差异以及哪个包含_stack_chk_guard变量

Linux 线程控制块和线程本地存储之间的差异以及哪个包含_stack_chk_guard变量,linux,glibc,thread-local-storage,Linux,Glibc,Thread Local Storage,我想知道TCB和TLS之间的区别是什么。这两个变量中的哪一个是变量uuu stack\u chk\u guard 我找了很多关于它的信息,但我认为它比以前更让我困惑 一些站点报告变量u_stack_chk_guard在TCB中,其他站点报告它在TLS中 提前谢谢 线程控制块和线程本地存储之间的差异 这些是不同的术语。阅读维基百科后,两者的区别是显而易见的 是一块内存。它是在操作系统内部分配的,用于保存特定于线程的数据 是一种编程方法。它包括使用线程本地的数据 在C中,是在线程启动时初始化的对象的

我想知道TCB和TLS之间的区别是什么。这两个变量中的哪一个是变量uuu stack\u chk\u guard

我找了很多关于它的信息,但我认为它比以前更让我困惑

一些站点报告变量u_stack_chk_guard在TCB中,其他站点报告它在TLS中

提前谢谢

线程控制块和线程本地存储之间的差异

这些是不同的术语。阅读维基百科后,两者的区别是显而易见的

是一块内存。它是在操作系统内部分配的,用于保存特定于线程的数据

是一种编程方法。它包括使用线程本地的数据

在C中,是在线程启动时初始化的对象的存储持续时间,每个线程都有自己的不同对象

哪一个包含uuu stack\u chk\u guard变量

编程方法不能“包含”,因此TLS不“包含”变量

如果
\uuuu stack\u chk\u guard
变量是线程本地变量,则答案取决于编译器和体系结构。使用
gcc
我们有编译选项,可以是
-mstack-protector-guard=global
,在这种情况下
\uuu-stack\u-chk\u-guard
将不在TLS内,也可以是
-mstack-protector-guard=TLS
,在这种情况下。。你猜对了

这两个变量中的哪一个是变量uuu stack\u chk\u guard

TCB是一块内存,TLS是一种编程方法。这些是不同的术语,不能“成为”变量

__stack_chk_guard在TCB中,其他人在TLS中报告

在编程俚语/行话中,我会说TLS块的意思与TCB相同,可能有些站点使用这些术语的意思相同(因为TLS内存必须在TCB中)

线程控制块和线程本地存储之间的差异

这些是不同的术语。阅读维基百科后,两者的区别是显而易见的

是一块内存。它是在操作系统内部分配的,用于保存特定于线程的数据

是一种编程方法。它包括使用线程本地的数据

在C中,是在线程启动时初始化的对象的存储持续时间,每个线程都有自己的不同对象

哪一个包含uuu stack\u chk\u guard变量

编程方法不能“包含”,因此TLS不“包含”变量

如果
\uuuu stack\u chk\u guard
变量是线程本地变量,则答案取决于编译器和体系结构。使用
gcc
我们有编译选项,可以是
-mstack-protector-guard=global
,在这种情况下
\uuu-stack\u-chk\u-guard
将不在TLS内,也可以是
-mstack-protector-guard=TLS
,在这种情况下。。你猜对了

这两个变量中的哪一个是变量uuu stack\u chk\u guard

TCB是一块内存,TLS是一种编程方法。这些是不同的术语,不能“成为”变量

__stack_chk_guard在TCB中,其他人在TLS中报告


在编程俚语/行话中,我会说TLS block与TCB的意思相同,可能有些站点使用这些术语的意思相同(因为TLS内存必须在TCB中)。

有些站点报告了哪些站点?他们是如何报告的?在这个站点中:报告如下:“对于Linux,fs寄存器实际上指向当前堆栈的TLS结构,而fs:0x28指向stack_guard。”相反,在标准库中是这样说的:/*堆栈guard进入TCB,所以尽早初始化它*/描述中有什么不清楚?是的,如果
\u stack\u chk\u guard
在“TLS结构”中,“TLS结构”在“TCB”中,那么ergo
\u stack\u chk\u guard
在“TCB”中。如果TLS是一种编程方法,那么它怎么可能是一种结构?我知道我对术语很挑剔(抱歉!),但老实说,“TLS结构”对我来说是一种可以理解的快捷方式“分配给线程本地存储使用的内存块“。我真的看不出来,例如,如果您阅读:
对于Linux,fs寄存器实际上指向分配给线程本地使用的当前堆栈的内存
您能理解吗?
一些站点报告
哪些站点?他们是如何报告的?在这个站点中:报告如下:“对于Linux,fs寄存器实际上指向当前堆栈的TLS结构,而fs:0x28指向stack_guard。”相反,在标准库中是这样说的:/*堆栈guard进入TCB,所以尽早初始化它*/描述中有什么不清楚?是的,如果
\u stack\u chk\u guard
在“TLS结构”中,“TLS结构”在“TCB”中,那么ergo
\u stack\u chk\u guard
在“TCB”中。如果TLS是一种编程方法,那么它怎么可能是一种结构?我知道我对术语很挑剔(抱歉!),但老实说,“TLS结构”对我来说是一种可以理解的快捷方式“分配给线程本地存储使用的内存块“。我真的看不出来,例如,如果您阅读:
对于Linux,fs寄存器实际上指向分配给线程本地使用的当前堆栈的内存
,您能理解吗?谢谢您的解释。然而关于你在这里所说的
好吧,因为无论如何TLS内存必须在TCB中
我找到了可以证明不是这样的文档。TCB在TLS中。我知道我很挑剔,我道歉,但我正在写一份重要的文件,我不想说得不准确。谢谢你的解释。然而关于你在这里所说的
好吧,因为无论如何TLS内存必须在TCB中
我找到了可以证明不是这样的文档。TCB在TLS中。我知道我很挑剔,我向你道歉,但我正在写一封重要的信