Remendar a calll substituindo com NOPs funciona no espaço do usuário, mas não no espaço do kernel

StackOverflow https://stackoverflow.com/questions/261021

Pergunta

Eu tenho um driver de dispositivo Quero patch. Este driver de dispositivo chama Iolog e eu quero me livrar do registro.

Se eu substituir o calll para Iolog com (o número correspondente de) NOPs dentro do driver de dispositivo (kext), o kernel trava com o que parece uma pilha esmagado ( "Backtrace terminada em inválido ponteiro do quadro 0").

A mesma técnica no entanto, funciona bem no espaço do usuário (por exemplo NOPping NSLogs dentro de um binário OS X).

O que estou ausente aqui?

Foi útil?

Solução

Você não explicou se você faz patching frio (driver no disco) ou hot patching (driver na memória). Para patching na memória, todos os tipos de problemas podem existir, como o driver que está sendo executado quando você consertá-la, a CPU (s) com porções em cache do código, etc. Veja a seção do manual Intel no código de auto-modificando.

Para patching em disco, pode ser que você tenha um registro de deslocalização para o endereço de destino. Então, quando o driver é carregado, o carregador de módulo dinâmico irá Fixup o endereço do Iolog no código, substituindo-o com o endereço real. Isso irá substituir suas instruções nop.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top