9.2. ebeif.h - Interfaz del "Elf Backend"

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.

void *_pdi_ebe_getBackendSymbol(PDI_ELFOBJ *backend, char *symbol);

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.

char *_pdi_ebe_getObjectName(PDI_ELFOBJ *obj);

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.

int _pdi_ebe_installInterposition(int type, PDI_ELFOBJ *trgObj, char *trgFunc, PDI_ELFOBJ *backend, char *wrapper);

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.

PDI_ELFOBJ *_pdi_ebe_loadBackend(char *path);

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.

char *_pdi_ebe_mainFilename(void);

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.

PDI_INTERCEPT *_pdi_ebe_searchInterposition(PDI_ELFOBJ *object, char *path);

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.

PDI_ELFOBJ *_pdi_ebe_searchObjectByPath(char *path);

PDI_ELFOBJ *_pdi_ebe_searchObjectByAlias(char *path);

PDI_ELFOBJ *_pdi_ebe_searchObject(char *x);

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.

int _pdi_ebe_setObjectAlias(PDI_ELFOBJ *obj, char *alias);

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.

int _pdi_ebe_unloadAllBackends(void);

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.

int _pdi_ebe_unloadBackend(PDI_ELFOBJ *be);

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.

int _pdi_ebe_uninstallAllInterpositions(void);

int _pdi_ebe_uninstallBackendInterpositions(PDI_ELFOBJ *backend);

int _pdi_ebe_uninstallInterposition(PDI_ELFOBJ *object, PDI_INTERCEPT *i);

int _pdi_ebe_uninstallInterpositions(PDI_ELFOBJ *object);

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.