Linux x86_64Memória#154
modify_ldt
Lê ou modifica a Local Descriptor Table (LDT) por-processo, um mecanismo de segmentação de memória legado do x86.
Descrição
Resquício da era de segmentação de memória x86 de 32-bit; hoje usada quase exclusivamente por camadas de compatibilidade (Wine, emuladores de DOS/16-bit) e algumas técnicas de thread-local storage muito antigas.
man 2
Nota
Específica de x86; historicamente relevante para algumas mitigações de side-channel (ex.: variantes de Spectre) por expor estado de segmentação pouco usado.
Assinatura
int modify_ldt(int func, void * ptr, unsigned long bytecount);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| func | int | 0 para ler, 1/0x11 para escrever entradas da LDT. |
| ptr | void * | Buffer de entrada/saída com as entradas de descritor. |
| bytecount | unsigned long | Tamanho de `ptr`. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | funcint |
| rsi | argumento 2 | ptrvoid * |
| rdx | argumento 3 | bytecountunsigned long |
Valor de retorno
Número de bytes lidos (leitura) ou 0 (escrita) em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).