Tengo un programa de 3 ª parte de código cerrado, y yo quiero ser capaz de¿Cómo puedo acceder a la memoria de un programa en otro
- saber lo que la memoria se asigna al programa
- acceso que la memoria (solo lectura está bien)
Las utilidades como vmmap (1), heap (1) y las fugas (1) parecen tener una funcionalidad similar a la que necesito, pero no puedo encontrar su origen en ningún Versiones de OS X) y no puede entender cómo funcionan. Preferiblemente, todo esto se haría en el espacio del usuario, posiblemente ejecutándose como root. No quiero escribir el código del kernel para evitar la protección de la memoria si puedo evitarlo.
Intenté usar la memoria compartida pasando la dirección de lo que quiero leer como el 2º argumento a shmat (2), pero finalmente no tuvo éxito (y probablemente no era su intención y/o mala práctica) y aún me abandonó sin una forma de determinar qué memoria estoy buscando de todos modos (el programa que poseía la memoria tenía que informarme de su dirección).
¿Hay alguna forma de desactivar la protección de memoria para un determinado programa para que no falle por segmentación cuando intenta leer/escribir la memoria que está asignada a un proceso diferente? ¿Hay alguna manera mejor de no permitir que los errores corrompan seriamente todo mi sistema?
¿Cómo se consigue esto?
¿Ha intentado rastrear las llamadas al sistema de tales utilidades? – icktoofay
@icktoofay Buena idea. Nunca hecho eso antes. Acabo de probarlo usando shark.app (mierda de la GUI inestable, solo la primera sugerencia que Google me encontró) pero hay algunos problemas 1) faltan nombres de símbolos 2) el tiburón sigue fallando (voy a intentar ver si puedo) hacer esto con GDB o algo así), y 3) No puedo encontrar documentación para las llamadas de sistema que parecen ser relevantes (io_connect_method, io_connect_ (un) map_memory, algunas cosas mach_ *). 4) Me tomará una eternidad explorar el basurero y descubrir cómo usar estas llamadas correctamente. Debe haber documentación en alguna parte ... – user992364