В прошлой теме мне никто так внятно и неответил.Да ещё и было утверждение что локальный статический ТЛС юзают одни и тежи механизмы,я тут маленько поэксперементировал.И понял что механизмы они используют абсолютно разные. Код (Text): #include <windows.h> #include <conio.h> #include <Winternl.h> __declspec( thread ) int tls_i=1; __declspec( thread ) char tls_char[25]="Hello World"; typedef PTEB (NTAPI *_NtCurrentTeb)(); DWORD WINAPI Thr(LPVOID lParam) { for(int i=0;i<tls_i;i++) { MessageBoxA(0,tls_char,"",MB_OK); } printf("data site VA: %d\n",(DWORD)tls_char); DWORD selfBase=(DWORD)GetModuleHandle(NULL); DWORD toNT=( (IMAGE_DOS_HEADER*)selfBase)->e_lfanew; IMAGE_NT_HEADERS *ntH=(IMAGE_NT_HEADERS*)(selfBase+toNT); IMAGE_TLS_DIRECTORY *itd=(IMAGE_TLS_DIRECTORY*)(ntH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS].VirtualAddress+selfBase); printf("itd->StartAddressOfRawData: %d\nitd->EndAddressOfRawData: %d\n",itd->StartAddressOfRawData,itd->EndAddressOfRawData); HMODULE lib=LoadLibraryA("ntdll.dll"); _NtCurrentTeb NtCurrentTeb=(_NtCurrentTeb)GetProcAddress(lib,"NtCurrentTeb"); TEB *teb=NtCurrentTeb(); printf("TlsSlots:\n"); for(DWORD i=0;i<63;i++) { if(teb->TlsSlots[i]!=NULL){printf("Index :%d:%s\n",i,(char*)teb->TlsSlots[i]);} } printf("TlsGetValue:\n"); for(DWORD i=0;i<1023;i++) { if(TlsGetValue(i)!=NULL) { printf("Index: %d:%s\n",i,(char*)TlsGetValue(i)); } } DWORD cell=TlsAlloc(); TlsSetValue(cell,tls_char); printf("%s",(char*)teb->TlsSlots[cell]); return(0); } int _tmain(int argc, _TCHAR* argv[]) { CreateThread(0,0,&Thr,0,0,0); getch(); return 0; } результат меня вконец запутал Почему tls_char находится не в блоке StartAddressOfRawData-EndAddressOfRawData ???