首页
社区
课程
招聘
[求助]能否使用FS寄存器实现线程局部数据的存储
发表于: 2007-11-18 11:13 6089

[求助]能否使用FS寄存器实现线程局部数据的存储

2007-11-18 11:13
6089
比如使用FS:[38H]来存储线程的局部数据,是否会和操作系统相冲突?

下面的程序是否会有问题?
#include <stdio.h>
#include <windows.h>

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
        int 线程局部数据 = -1;
        __asm{
                mov eax,FS:[38H] ////用od调试得知FS:[38H]的地址是7FFDE038
                mov dword ptr [线程局部数据],eax               
        }
        printf("%d\n",线程局部数据);

        return 0;
}

void main()
{
        int 线程局部数据 = -1;
        __asm mov dword ptr FS:[38H],1 //用od调试得知FS:[38H]的地址是7FFDF038
        __asm{
                mov eax,FS:[38H]
                mov dword ptr [线程局部数据],eax               
        }
        printf("%d\n",线程局部数据);
        //---
        ::CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
        Sleep(100);
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
2
直接用2c得tls就好了,干吗去跟系统搞
2007-11-18 11:23
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
是FS:[2CH]吗?
TLS不是要用TlsAlloc,并且还要保存一个索引号。
如果我用了2CH,是不是就不能用TlsAlloc这些API了?
2007-11-18 11:52
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
没人回复,那就算了,直接用FS:[38]。出了问题再说
2007-11-18 12:52
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
用TlsAlloc分配一个slot,再扩展这个slot。
2007-11-18 14:08
0
雪    币: 207
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
用TlsAlloc要每个线程分配一个索引号,而这个索引号又不好保存
2007-11-18 14:34
0
游客
登录 | 注册 方可回帖
返回
//