| 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.