No hay función libc para hacer eso. Sin embargo, puede escribir uno usted mismo (aunque el código es algo complicado).
En Linux, de hecho dlopen()
devuelve la dirección de una estructura link_map
, que tiene un miembro denominado l_addr
que apunta a la dirección base del objeto compartido cargado (suponiendo que su sistema no RANDOMIZE compartió la colocación de la biblioteca, y que su la biblioteca no ha sido pre-enlazada).
En Linux, una forma segura de encontrar la dirección base (la dirección de Elf*_Ehdr
) es usar dl_iterate_phdr()
después de dlopen()
en la biblioteca.
Tener la cabecera ELF, debe ser capaz de iterar sobre una lista de símbolos exportados (la tabla de símbolos dinámica), por primera localizar el Elf*_Phdr
de tipo PT_DYNAMIC
, y luego localizar DT_SYMTAB
, DT_STRTAB
entradas, y iterar sobre todos los símbolos en la tabla de símbolos dinámicos Use /usr/include/elf.h
para guiarlo.
Además, puede usar libelf, pero no puedo guiarlo ya que no tengo experiencia previa con él.
Finalmente, tenga en cuenta que el ejercicio es algo inútil: obtendrá una lista de funciones definidas, pero no tendrá idea de cómo llamarlas (qué parámetros esperan), entonces, ¿cuál es el punto?
Me suena como el PO está buscando para obtener una lista de símbolos exportados desde la biblioteca. Lo cual no creo que sea posible sin hacer algunos análisis de secciones en la estructura ELF. –