pDI-Tools: Mecanismo de interposición dinámica de código | ||
---|---|---|
Anterior | Capítulo 9. API de pDI-Tools | Siguiente |
Esta interfaz exporta las funciones necesarias para poder manipular los objetos en memoria, cargar y descargar "backends" e instalar y desinstalar interposiciones. Todas estas funciones son independientes de la arquitectura, y por lo tanto están disponibles sobre todas las plataformas.
Descripción.
Obtiene un puntero a un símbolo symbol
del
backend backend
.
Parámetros.
backend
.
Puntero a la información de objeto del "backend" en el
que buscaremos el símbolo.
Valor devuelto.
Un puntero al punto de entrada del símbolo, o NULL
en caso de
que este no exista.
Descripción.
Obtiene la ruta o el alias en su defecto del objeto
obj
.
Parámetros.
obj
.
Puntero a la información de objeto.
Valor devuelto. Un puntero a la cadena que identifica el objeto.
Descripción.
Instala una interposición de tipo type
,
sobre el objeto object
y la función
func
. Los tipos soportados de
interposición son: PDI_IT_RELINK
, PDI_IT_REDEFINITION
y
PDI_IT_CALLBACK
.
Parámetros.
type
.
Tipo de interposición.
trgObj
.
Objeto sobre el que instalamos la interposición.
trgFunc
.
Función sobre la que instalamos la interposición. Debe
valer NULL
en caso de instalarse un "callback".
backend
.
Objeto "backend" que gestionará la interposición.
wrapper
.
Función "wrapper" que recibirá la interposición.
Normalmente, en el caso del "callback", este parámetro es
NULL
.
Valor devuelto. 0 en caso de éxito, o -1 en caso de error.
Descripción. Permite cargar e inicializar un "backend" a partir de la ruta a su binario.
Parámetros.
path
.
Ruta del fichero "backend".
Valor devuelto.
Un puntero al PDI_ELFOBJ que representa a este backend si ha
habido éxito en la carga. En caso contrario la función devuelve
NULL
.
Descripción. Obtiene el path o el alias del ejecutable instrumentado.
Parámetros. Esta rutina no recibe parámetros.
Valor devuelto. Un puntero a la cadena que identifica al ejecutable instrumentado.
Descripción.
Busca una interposición que afecte a la función
func
del objeto
object
.
Parámetros.
object
.
Objeto en el que buscamos.
func
.
Función a la que debe afectar la interposición.
Valor devuelto.
Devuelve un puntero a la información de interposición si hay
éxito, o NULL
en caso de no existir.
Descripción.
La primera, _pdi_ebe_searchObjectByPath()
, busca la
información sobre un objeto en una configuración por la ruta a su
binario. _pdi_ebe_searchObjectByAlias()
busca el objeto por su
alias y la última, _pdi_ebe_searchObject()
busca primero por
el alias y en caso de no encontrarse nada vuelve a buscar por la
ruta al binario.
Parámetros.
alias
.
Cadena con el alias a buscar.
path
.
Cadena con el binario a buscar.
x
.
Cadena con la ruta al binario o el alias a buscar.
Valor devuelto.
Estas funciones devuelven NULL
si no se encontró el objeto, en
caso de éxito se devuelve un puntero a una estructura
PDI_ELFOBJ.
Descripción.
Le asigna al objeto object
el alias
alias
. Si alias
es
NULL
se le quita al objeto su alias actual (si lo tiene).
Parámetros.
object
.
Objeto al que queremos quitarle o ponerle un alias. Los
alias PDI_ALIAS_LIBC
, PDI_ALIAS_MAIN
y
PDI_ALIAS_PDI
están reservados. El primero es un
alias que identifica al DSO de pDI-Tools (libpdi.so), y
el segundo es un alias que identifica al programa
principal.
object
.
Nuevo alias. Si es NULL
se le quita el alias actual al
objeto.
Valor devuelto. 0 si todo fue bien, -1 en caso de error.
Descripción. Descarga de memoria todos los "backends". Pero ojo, no ejecuta el código de finalización de los mismos.
Parámetros. Esta función no recibe parámetros.
Valor devuelto. 0 si todo fue bien, otro valor en caso de error.
Descripción.
Desinstala las interposiciones, finaliza y descarga el "backend"
be
.
Parámetros.
be
.
Puntero a la información de objeto del "backend" que
descargaremos.
Valor devuelto. 0 si todo fue bien, otro valor en caso de error.
Descripción.
La primera función desinstala todas las interposiciones
instaladas actualmente. La segunda,
_pdi_ebe_uninstallBackendInterpositions()
, desinstala todas las
interposiciones que gestiona un determinado "backend". La función
_pdi_ebe_uninstallInterposition()
desinstala una única
interposición y la última desinstala todas las interposiciones
sobre un determinado objeto.
Parámetros.
backend
.
Objeto "backend" que queremos que no gestione más
interposiciones.
i
.
Interposición que deseamos desinstalar.
object
.
Objeto del que desinstalamos una o más interposiciones.
Valor devuelto. 0 si todo fue bien, -1 en caso de error.