Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

369
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda