Pregunta

¿Existe alguna forma de capturar una escritura en una página protegida contra escritura?

Planeo hacer un sistema de objetos tipo yo mismo en el que se copia el objeto para crear una instancia. (porque suena simple y compacto en comparación con el resto) Obviamente, los objetos creados para este propósito deben estar protegidos contra escritura de alguna manera. He visto que hay una forma de marcar algo protegido contra escritura de los encabezados del programa en el ELF. (RE, RWE, RW -flags)

¿Proporciona esto protección contra escritura? Recuerdo que debería provocar una falta de seguridad, ¿es esto cierto? Cómo capturar la escritura en una página protegida contra escritura. ¿Es esta una buena manera de implementar lo que estoy buscando y hay una mejor manera?

¿Fue útil?

Solución

Sí, puede usar mprotect .

Sí, una escritura en la memoria protegida provocará un error de seguridad. Puede instalar un controlador, por ejemplo. en C ++:

std::signal(SIGSEGV, my_segv_handler_func);

Esta es una forma plausible de hacer lo que quieres, aunque tendrías que agregar una gran cantidad de funciones de administración adicionales para que funcione. Por ejemplo, este tipo de detección de escritura se realiza en hardware, y en arquitecturas x86 tiene un tamaño de página de 4k. Así que puede proteger las cosas 4k a la vez, alineadas en los límites de 4k, no un genérico " comience en la dirección X y vaya a N bytes " Creo que tendrías que hacerlo

  1. tener un mapeo de objetos a páginas de tal manera que pueda identificar si una escribir a una página es escribir a una objeto protegido particular, o
  2. rueda tu propio malloc que siempre         asigna en 4k límites, lo que te obligaría a usar un         tamaño mínimo de bloque asignado de 4k

No sé desde lo alto de mi cabeza si hay una mejor manera, pero suena divertido jugar con él. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top