Una buena manera de identificar la sección de código en / proc / * / maps
Estoy tratando de encontrar el rango de direcciones que el código de mi biblioteca nativa de Android ocupa en el espacio de direcciones del proceso. Estoy leyendo y analizando /proc/self/maps
. Hay dos secciones para la biblioteca. Uno es código, el otro es datos, supongo. Necesito decirles aparte. Sin embargo, la diferencia entre ellos es, bueno, algo circunstancial. Pruebas en Android 2.3.3.
Los permisos de la sección de código son r-xp, los datos son rwxp – ambos son ejecutables. Me siento incómodo basando la decisión sobre la capacidad de escritura – ¿qué pasa si en los mismos sabores de Android, hay una sección de sólo lectura?
- ¿Cómo encontrar implementaciones de llamada de sistema en Linux / Android 2.6.29?
- "No hay dispositivos conectados", tratando de conectar mi LG a mi máquina Ubuntu
- Formato de archivo de seguimiento de Android Systrace
- No se puede limpiar el proyecto en Android Studio
- Reconocimiento de Dongle USB en Android - Beaglebone
La otra diferencia es el desplazamiento de la sección asignada en relación con el archivo – la sección de código ha desplazado 0. De nuevo, ¿qué pasa si alguna iteración del vinculador coloca los datos antes de código?
Las herramientas, como GDB y Android andador de la pila, no tienen ningún problema diciéndome qué módulo pertenece una dirección de código, y cuál es su compensación en la biblioteca. Sólo digo'.
EDIT: en Android 4.0, las secciones son diferentes: hay r-xp, r-p, rw-p. Así que me permite identificar la sección ejecutable failry fácilmente – pero ¿qué pasa con Androids anterior?
- Adb install falla con error 'INSTALL_FAILED_INSUFFICIENT_STORAGE'
- Android - Comando no encontrado
- ¿Qué conocimiento / expertize se requiere para portar android a dispositivo de brazo personalizado?
- Instalar android sdk usando la línea de comandos linux
- Ubuntu: Depuración de dispositivos Android
- Ubuntu - Error: No se pudo crear la tarjeta SD
- Módulos de Android y Kernel
- ¿Cómo ejecutar mi código Go en Android?
Encontró una solución. Afortunadamente, ésas son mis bibliotecas, así que puedo conseguir una dirección que sea segura dentro del bloque del código teniendo una función que devuelve su propia dirección. Entonces lo emparejo con los límites de la sección.
void *TestAddress() { return TestAddress; //That's within the code block, that's for sure. }
Esto no funcionará para bibliotecas de terceros, porque una dirección de función de una función importada correspondería a la conversión de importación, no al cuerpo de la función real.
- No se pueden enviar paquetes UDP de la máquina de desarrollo a Android Emulator
- Error de Constructor vacío en DeviceAdminReceiver