Assembly linux g++;x64通过FS段寄存器访问内存

Assembly linux g++;x64通过FS段寄存器访问内存,assembly,g++,64-bit,x86-64,Assembly,G++,64 Bit,X86 64,使用linux上的g++amd64,我知道线程本地存储是通过段寄存器GS访问的。 我想有一种方法来指示编译器通过FS寄存器访问其他内存。 那个内存是一个垃圾收集区,我想和其他银行随意切换。 有可能吗?(我想应该是因为线程本地存储是可能的)。我将探讨的部分答案是叮当声 “用地址空间#256注释指针会导致相对于X86 GS段寄存器生成代码,而地址空间#257会导致相对于X86 FS段生成代码。请注意,这是一个非常低级的功能,只有在您知道自己在做什么(例如在操作系统内核中)时才应该使用。”实际上,g

使用linux上的g++amd64,我知道线程本地存储是通过段寄存器GS访问的。 我想有一种方法来指示编译器通过FS寄存器访问其他内存。 那个内存是一个垃圾收集区,我想和其他银行随意切换。
有可能吗?(我想应该是因为线程本地存储是可能的)。

我将探讨的部分答案是叮当声


“用地址空间#256注释指针会导致相对于X86 GS段寄存器生成代码,而地址空间#257会导致相对于X86 FS段生成代码。请注意,这是一个非常低级的功能,只有在您知道自己在做什么(例如在操作系统内核中)时才应该使用。”

实际上,gs是i386,TLS fs是x86_64(),但我假设问题保持不变,但对于gs来说。如果可能的话,我假设将有一些FAR属性附加到此变量,。但我一直没能找到它。它存在于djgpp中,用于访问opengl帧缓冲区和dos空间。这是一个提示,我将研究far属性。如果我错了,请纠正我,但我认为不允许您从用户模式加载FS或GS。还是你不打算这么做?@JonathonReinhart是的,我想这么做。为什么你说我不应该被允许从用户模式加载FS或GS(我不知道-这是特权指令吗?@JonathonReinhart我检查了LFS LGS指令,这些指令正常工作(在保护模式下)将选择器加载到寄存器FS或GS中,并从LDT(本地描述符表)自动加载段寄存器隐藏部分中的关联段描述符。此外,pop指令也可用于相同的作用域。显然,为了使整个系统正常工作,还必须加载带有必要地址的本地描述符表(我尝试使用系统调用“modify_ldt”)。