首页
社区
课程
招聘
[求助]内嵌汇编问题
发表于: 2009-2-18 01:47 4643

[求助]内嵌汇编问题

2009-2-18 01:47
4643
hi,大家好,我遇到一个问题,希望得到你们的帮助。
根据MSDN的描述:FS:[0x2C]  Win9x and NT Linear address of the thread local storage array

我通过这段代码获得主线程的FS
	HANDLE mainThreadHandel = GetThreadHandleFromPID(pid,windowHwnd);
	
	GetThreadContext(mainThreadHandel,&Context);
	GetThreadSelectorEntry(mainThreadHandel, Context.SegFs, &SelEntry);
	DWORD dwFSBase = ( SelEntry.HighWord.Bits.BaseHi << 24) |
		(SelEntry.HighWord.Bits.BaseMid << 16) |
		SelEntry.BaseLow;


通过某种途径,将dwFSBase传入到子线程中:
       
__asm
        {
                mov eax, dwFSBase ;
                mov edx, [eax+0x2C]; 为何执行这一步后,edx 为0 ?
                mov dword ptr [_dwMainData], edx
        }

然后执行

        __asm
        {
                mov eax, fs:[0x2C];为何这一步eax 也为0?
                mov edx, dword ptr [_dwMainData];
                mov fs:[0x2C], edx
                mov dword ptr [_dwMainData], eax
        }

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
大家都不屑于回答吗?
那我这样问吧:
在内嵌汇编中
__asm
{
     mov eax,fs:[0x2C]
}
为何 eax取不到值?为何总是0?
2009-2-19 09:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
fs:[0x2c] 指向的是TEB 的 ThreadLocalStoragePointer ,通常情况下那个字段是空值,而不是 EAX 取不到值!

你可以 D FS:[18] 自己验证下!
2009-2-19 12:40
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
请大侠给我扫盲,为什么通常情况下是空的?什么情况下才会用到这里?
最好能系统的传授基础。
2009-2-19 17:18
0
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
#include <stdio.h>
#include <windows.h>
#include <tchar.h>


__declspec(thread) int i;


int main(int argc, char* argv[])
{
  i = 2;
  DWORD dwTls;
  __asm
  {
    mov eax, fs:[0x2C] ;
    mov [dwTls], eax
  }

  printf(_T("0X%08X\n"), dwTls);
  return 0;
}


打印结果:
0X00143018


使用了TLS特性,才会看到。
2009-2-19 17:39
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
谢谢楼上!
2009-2-19 23:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
线程,理解不透,学习中...
2009-2-20 22:11
0
游客
登录 | 注册 方可回帖
返回
//