2010-02-08 8 views
5

Quiero escribir el trazador de una pequeña función. Yo uso ptrace.¿Cómo encontrar la dirección absoluta del símbolo de las bibliotecas compartidas?

Cuando veo una instrucción CALL, quiero mostrar el nombre de la función equivalente a la llamada de dirección.

Mi trazador funciona con símbolos con dirección absoluta (el símbolo se define en el binario principal). Pero no sé cómo puedo obtener la dirección absoluta en la memoria virtual de la función de la biblioteca compartida. Detecta la llamada a las funciones de libc, por ejemplo.

Noto que la dirección de la función en la biblioteca compartida es relativa al archivo.

¿La siguiente ecuación es buena?

Absolute address of symbol = address of the shared library in virtual memory + 
          relative address of the symbol. 

¿Cómo puedo obtener la dirección absoluta de un símbolo de una biblioteca compartida?

+0

Creo que la respuesta a esto es OS específica –

+0

Sí, al sistema operativo que utiliza el formato binario ejecutable ELF. Como Linux y algunos * BSD (NetBSD, creo). – mctylr

Respuesta

0

Tan pronto como no describió el sistema en el que trabaja, this article aclara que al menos la tarea descrita se puede resolver para algunos casos, no para todos.
Si estuviera en su situación, buscaría los fragmentos binarios correspondientes en la memoria y en la biblioteca. Luego, tan pronto como la memoria y la biblioteca estén alineadas, el problema se resuelve. Así que sí, la ecuación es buena tan pronto como la biblioteca no se puede dividir y cargar como partes independientes.

2

Creo que desea ver cómo funciona el enlace dinámico, específicamente la tabla de compensación global. http://www.gentoo.org/proj/en/hardened/pic-guide.xml es una especie de comienzo, pero hacer que esto funcione de manera confiable en todos los sistemas puede ser complicado.

1

El libro 'Linkers and Loaders' contiene respuestas a tales preguntas, así como las explicaciones de los antecedentes. Puede valer la pena leerlo. Lo que se aplica a ELF no se aplica en Windows, pero el libro cubre ambos y también algunos otros sistemas.

Cuestiones relacionadas