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?

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?

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.

  • Android emulator64-x86 se bloquea durante el proceso de inicio
  • ¿Se pueden ejecutar aplicaciones Linux en Android?
  • ¿Cómo puedo generar un android debug.keystore desde la línea de comandos?
  • ¿Cómo puedo crear un nuevo dispositivo de ratón virtual en mi dispositivo Android?
  • Creación de una aplicación de Android para ejecutar PHP y MySQL en Tablet Android
  • .bashrc no lee ruta de entorno correctamente con espacios
  • Kivy: icono de notificación de multiplataforma
  • Ningún archivo o directorio 'mientras intenta obtener la versión de adb
  • La sincronización de repo de AOSP toma demasiado tiempo
  • Error de emulador de Android con excepción de punto flotante
  • (Re) montaje de la tarjeta SD en el emulador de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.