Para fines de depuración necesito probar un puntero para ver si apunta a una página legible válida. Actualmente estoy analizando/proc/[pid]/maps para ver si la dirección está mapeada, pero esto parece un poco largo. ¿Hay una mejor manera? Gracias.Cómo probar si una dirección es legible en la aplicación de espacio de usuario de linux
Respuesta
La manera canónica es utilizar la llamada del sistema write()
para leer de la página (escribir en un descriptor de archivo pipe()
ficticio). En lugar de fallar, devolverá -1
con errno == EFAULT
si el buffer a escribir es ilegible.
¡Gracias, esto funciona como un regalo! – gimmeamilk
Advertencia: He visto al menos otra solución de SO que sugiere usar/dev/null para este propósito (http://stackoverflow.com/questions/4611776/isbadreadptr-analogue-on-unix), pero núcleos más nuevos (he probado en 3.8 .7) return success para/dev/null write() incluso si 'buf' es NULL. Entonces, aunque esta prueba podría funcionar con/dev/null en cualquier sistema que esté probando, definitivamente no es una solución portátil. Usar algún otro fd (como un tubo ficticio o un objeto posix shm) no sería tan rápido, pero definitivamente sería más seguro y portátil. – etherice
- 1. ¿Cómo encontrar la dirección física de una variable del espacio de usuario en Linux?
- 2. Cómo probar si su SSE2 Soporte Linux
- 3. ¿Cómo acceder a la memoria de espacio de usuario desde el kernel de Linux?
- 4. ¿Cómo probar una interfaz de usuario WPF?
- 5. Cómo obtener la dirección IPv6 de una interfaz en Linux
- 6. Manejo de interrupción de Linux en el espacio de usuario
- 7. Asignación de direcciones físicas a la dirección virtual de Linux
- 8. ¿Cómo puedo restablecer las compras en la aplicación de espacio aislado en iOS para probar?
- 9. ¿Cómo probar si la matriz es diagonal?
- 10. Compruebe si un usuario es root en una aplicación java
- 11. Obtener la dirección IP de una interfaz en Linux
- 12. Cómo escribir una consulta LDAP para probar si el usuario es miembro de un grupo?
- 13. ¿es posible cambiar la dirección de la función en DLL si se cargó en la aplicación?
- 14. ¿Cómo comprobar si una dirección de correo electrónico es falsa?
- 15. Cómo probar si la base de datos de SQL Server está en modo de usuario único
- 16. ¿Cómo probar una aplicación web?
- 17. Android: ¿Cómo probar la fuga de memoria en una aplicación?
- 18. Búsqueda de la dirección IP del usuario
- 19. ¿Cómo probar una actualización de la aplicación de iPhone?
- 20. ¿Cómo probar una aplicación Twilio?
- 21. compruebe si la dirección mmap'ed es correcta
- 22. Cómo determinar si la aplicación es la aplicación web
- 23. Comprobar si la cadena dada es una dirección URL
- 24. ¿Cuál es una buena manera de probar el uso de msync en kernels recientes de Linux?
- 25. Verificando si una variable POST [] es una dirección IP?
- 26. ¿Cómo tomo la dirección de uno pasado el final de una matriz si la última dirección es 0xFFFFFFFF?
- 27. Posible captura de escritura en la dirección (x86 - linux)
- 28. cómo detectar si el usuario tiene una aplicación en Cocoa
- 29. mejor manera de probar si un tipo es una colección
- 30. ¿Es posible asignar, en el espacio de usuario, un bloque de memoria no almacenable en caché en Linux?
Lo estoy haciendo analizando '/ proc/self/maps' también –
@GregoryPakosz: para que sea una solución genérica y confiable, ¿no sería necesario volver a cargar y reparar el mapa en cada cheque para dar cuenta de las cosas como un montón creciente o segmentos de memoria recién mapeados? – etherice
@etherice: No porque/proc es refrescante; cada vez que accede a un/a archivo (s) de/proc, se ejecuta el código del núcleo que lo regenera como "contenido". – kaiwan