Em (ou depois?) 2.4, o sys_call_table
símbolo não era mais exportado para dificultar o gancho de chamadas do sistema.
Ignorando que você ainda pode obter essas informações do IDT ou lendo /boot/System.map-<kernel-version>
, eu queria saber por que esse endereço parece ser constante entre reinicializações e máquinas (com a mesma versão do kernel)? Não vale a pena torná-lo dinâmico? Existe uma razão que exige que seja estático?
O que pretendo é o seguinte:
sys_call_table
não é mais exportado para módulos a fim de tornar um pouco mais difícil ligar as syscalls, mas os módulos (ou seja, programas de espaço do kernel) ainda podem facilmente obter essas informações lendo System.map
ou simplesmente adivinhando com base nas informações de lançamento do kernel, pois o endereço parece ser idêntico para todas as máquinas executando a mesma versão do kernel.
Desde pelo menos a versão 4.8 do kernel, pelo menos em x86, o espaço de endereço do kernel é randomizado, incluindo o endereço da tabela de chamada do sistema. Consulte
RANDOMIZE_BASE
a configuração do kernel para obter os detalhes básicos.Isso significa que o endereço fornecido
System.map
é inútil e o endereço da tabela de chamadas do sistema muda a cada inicialização. Se você precisar depurar algo e quiser usarSystem.map
, será necessário inicializar com onokaslr
parâmetro de linha de comando do kernel para desabilitar o KASLR.