Para que serve o registrador% gs?

1

Tudo o que eu consegui descobrir sobre o% gs register é que parece ser um registrador livre para usar em arquiteturas > 32 bits x86. Parece que um gs_change é executado antes de qualquer chamada do sistema. Alguém pode me indicar uma documentação de como este registro é usado? - Eu suponho que seja um registrador usado para comutadores do modo kernel / usuário.

O pano de fundo da minha pergunta é que tento entender um rastreamento de pilha do kernel e o que exatamente aconteceu.

O rastreamento de pilha foi produzido a partir do processo de descarga que atingiu o /proc/sys/kernel/hung_task_timeout_secs .

    
por ikrabbe 16.06.2015 / 11:56

2 respostas

1

Parece que %gs é reservado para o recurso de proteção de pilha do GCC no kernel Linux x86 com CONFIG_CC_STACKPROTECTOR ativado para configurar canários de pilha . Você pode ver algumas explicações em arch / x86 / include / asm / stackportector. h .

    
por 16.06.2015 / 13:35
2

Como explicado aqui:

link

e aqui:

link

O registro GS é usado para diferenciar entre o modo de usuário e a faixa de endereço do modo kernel, após adicionar o componente de endereço lógico relevante.

A instrução swapgs é usada para trocar o registrador GS com os valores MSR, e somente no modo privilegiado isso pode ser feito.

Por exemplo, swapgs sempre deve ser feito durante o início do manipulador IDT e depois dele, para que a memória do modo kernel seja usada.

    
por 17.11.2016 / 13:12