Win32 Thread Information BlockO Win32 Thread Information Block (TIB) é uma estrutura de dados em Win32 no x86 que guarda informações sobre um thread em execução. essa estrutura também é conhecida como Thread Environment Block (TEB).[1] O TIB não é oficialmente documentado para o Windows 9x. O DDK da série de Windows NT inclui a estrutura NT_TIB no ficheiro de cabeçalho winnt.h que documenta a parte independente do subsistema. O programa Wine inclui declarações para (a parte específica do subsistema de) TIB. Mas tantos programas para Win32 utilizam esses campos não documentados que são efetivamente parte da API. O primeiro campo em particular, é diretamente referenciado pelo código produzido pelo próprio compilador da Microsoft.[1] Acessando TIBPode ser acedido como offset do registo de segmento FS. Não é habitual aceder aos campos do TIB através do endereçamento de FS:[0], mas sim obtendo um ponteiro de auto-referência alocado em FS:[0x18]. Exemplos em C com assembly inline para 32-bit x86: // gcc (estilo AT&T inline assembly).
void *getTIB()
{
void *pTib;
__asm__("movl %%fs:0x18, %0" : "=r" (pTib) : : );
return pTib;
}
// Microsoft C
void *getTib()
{
void *pTib;
__asm {
mov EAX, FS:[0x18]
mov [pTib], EAX
}
return pTib;
}
void *getTib()
{
void *pTib = ( void * ) __readfsdword( 0x18 );
return pTib;
}
Leitura adicional
Ligações externas
Referências
|