Pergunta

Existe uma maneira de pegar uma página de gravação na página protegida por gravação?

Eu planejo fazer um sistema de objetos auto -semelhantes onde você copia o objeto para instanciá -lo. (Porque parece simples e compacto em comparação com o resto) Obviamente, os objetos criados para esse fim devem ser protegidos por gravação de alguma maneira. Vi que há uma maneira de sinalizar algo protegido por escrito dos cabeçalhos do programa no elfo. (Re, rwe, rw -flags)

Isso fornece proteção de gravação? Lembro que deveria criar um Segfault, isso é verdade? Como pegar a gravação em uma página protegida por gravação. É uma boa maneira de implementar o que estou querendo e existe uma maneira melhor?

Foi útil?

Solução

Sim, você pode usar mProtect.

Sim, uma gravação para a memória protegida aumentará um segfault. Você pode instalar um manipulador, por exemplo, em C ++:

std::signal(SIGSEGV, my_segv_handler_func);

Essa é uma maneira plausível de fazer o que você deseja, embora você precise adicionar muita gosma extra de gerenciamento para fazê -la funcionar. Por exemplo, esse tipo de detecção de gravação é feito em hardware e, nas arquiteturas x86, você tem um tamanho de página de 4K. Assim, você pode proteger as coisas em 4K de cada vez, alinhado nos limites de 4K - não um genérico "Iniciar no endereço X e ir n bytes". Eu acredito que você teria que

  1. Tenha um mapeamento de objetos para páginas para que você possa identificar se uma gravação em uma página é uma gravação para um objeto protegido específico, ou
  2. Role seu próprio malloc que sempre aloca nos limites 4K, o que o forçaria a usar um tamanho mínimo de alocação de 4K

Não sei no topo da minha cabeça se houver uma maneira melhor, mas parece divertido de brincar. :)

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