Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

371
Vistas
¿Cómo puede mi código C encontrar el símbolo correspondiente a una dirección en tiempo de ejecución (en Linux)?

Dada la dirección de tiempo de ejecución de una función o variable, mi código necesita averiguar el nombre y, si es una variable, escribir la información del símbolo. O al menos proporcione suficiente información para una extracción posterior fuera de línea del nombre (y tipo de información).

Es código Linux y se supone que la información de depuración está disponible.

Traté de buscar en el formato de archivo ELF, binutils y todo, pero el tema es enorme, así que esperaba que alguien pudiera ayudarme a reducir el alcance.

Puedo ver los siguientes tipos de soluciones:

  • encuentre el rango de los segmentos de código/datos de los módulos actualmente cargados en la memoria - ¿CÓMO HACER ESO?. Guarde el módulo de la dirección y el nombre del segmento y el desplazamiento en su segmento. Fuera de línea, luego use binutils para encontrar el símbolo en la información de depuración del módulo; nuevamente, ¿CÓMO HACER ESO?

  • use algunos servicios de API/sistema que no conozco para encontrar el símbolo y la información en tiempo de ejecución - ¿CÓMO?

Gracias de antemano.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

GNU libc proporciona una función dladdr para este propósito exacto. Sin embargo, solo funciona en funciones, no en variables.

 #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <dlfcn.h> int dladdr(void *addr, Dl_info *info); The function dladdr() takes a function pointer and tries to resolve name and file where it is located. Information is stored in the Dl_info structure: typedef struct { const char *dli_fname; /* Pathname of shared object that contains address */ void *dli_fbase; /* Address at which shared object is loaded */ const char *dli_sname; /* Name of symbol whose definition overlaps addr */ void *dli_saddr; /* Exact address of symbol named in dli_sname */ } Dl_info; If no symbol matching addr could be found, then dli_sname and dli_saddr are set to NULL. dladdr() returns 0 on error, and nonzero on success.

Por supuesto, generalmente hago este tipo de cosas desde gdb, no dentro del programa en sí.

over 4 years ago · Santiago Trujillo Denunciar

0

Lo que desea ver es la biblioteca de descriptores de archivos binarios, específicamente las funciones de manejo de símbolos . libbfd proporciona un conjunto común de funciones para manipular y leer varios formatos de objetos. Lo hace proporcionando una vista abstracta de los archivos de objetos y luego tiene back-ends específicos para manejar los detalles de arquitecturas y tipos de objetos específicos. Los formatos de archivo ELF son compatibles, ya que es muy probable que sea la arquitectura que desea utilizar.

No encuentro libbfd difícil de usar, pero siempre estoy abierto a alternativas y libelf es otra. Probablemente querrá ver la función gelf_getsym específicamente.

over 4 years ago · Santiago Trujillo Denunciar

0

C es un lenguaje completamente compilado. Los nombres y tipos y otra información sobre las variables generalmente se descartan en el proceso de compilación.

Una excepción es que la mayoría de los compiladores producirán un ejecutable con información de depuración incluida, de modo que un depurador en vivo tenga acceso a esta información. Esta información es totalmente específica del sistema operativo, e incluso específica del compilador, e incluso podría estar en partes de la memoria a las que el programa no puede acceder.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda