能力值:
( LV2,RANK:10 )
2 楼
线程局部变量地址和线程环境块有什么关系吗
是不是可以通过线程基地址得到线程变量地址
能力值:
( LV4,RANK:50 )
3 楼
用的是静态TLS存储的,TlsIndex是固定的吧?
能力值:
( LV2,RANK:10 )
4 楼
whtyy
:用的是静态TLS存储的,TlsIndex是固定的吧?
--------------------------------------------------
是的,TlsIndex是固定的,一直都是零。不知为什么
========================================================
自己解决了
方法如下:
HANDLE hThread =
OpenThread(THREAD_GET_CONTEXT|THREAD_QUERY_INFORMATION | PROCESS_VM_OPERATION|PROCESS_VM_READ,FALSE, threadID);
if (NULL != hThread)
{
CONTEXT context = {0};
LDT_ENTRY sel;
DWORD read,teb,tls;
context.ContextFlags=CONTEXT_ALL;
GetThreadContext(hThread,&context);
GetThreadSelectorEntry(hThread,context.SegFs,&sel);
teb = sel.BaseLow
|(sel.HighWord.Bytes.BaseMid<<16)
|(sel.HighWord.Bytes.BaseHi<<24);
ReadProcessMemory(hProcess,(LPCVOID)(teb + 0x2c),&tls,sizeof(DWORD),&read);
//TLS里就是线程的局部存贮地址
::CloseHandle(hWowMainThread);
}
感谢 网络技术论坛的zuoyefeng,他提供的文章
Writing Trojans that Bypass Windows XP Service Pack 2 Firewall