Win32 Thread Information Block

O 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 TIB editar

Pode 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 editar

Ligações externas editar

Referências

  1. a b Pietrek, Matt (Maio de 1996). «Under The Hood». Microsoft Systems Journal. Consultado em 7 de julho de 2010 
  Este artigo sobre o Microsoft Windows é um esboço. Você pode ajudar a Wikipédia expandindo-o.