Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

377
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!