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

250
Visualizações
Agregue dinámicamente el símbolo a la tabla de símbolos del proceso

¿Cómo puedo agregar un símbolo para procesar la tabla de símbolos dinámicamente en Linux? Por ejemplo, supongamos que analizo un script y determino que tiene algunos métodos que luego quiero agregar al espacio de direcciones global para que las bibliotecas compartidas cargadas después puedan acceder a ellos. Lo que quiero hacer entonces es agregar un puntero de función a una función auxiliar que llamará a la función de secuencia de comandos y devolverá el resultado (en C). Pero quiero decir "agregue 'foo' apuntando a &mygenericstub a la tabla de símbolos globales". Entonces, cuando hago dlopen() en un archivo .so con el indicador RTLD_GLOBAL, podrá llamar a 'foo' como si fuera una función C normal en el espacio de nombres global.

La idea es bastante simple: ampliar la funcionalidad del enlazador dinámico para que ese único proceso también incluya nombres de secuencias de comandos (pero no solo tener una función de punto de entrada que tome un argumento de cadena para llamar a la función de secuencia de comandos, sino más bien hacer que la vinculación dinámica proceso transparente a otros objetos compartidos que pueden cargarse más adelante). La idea sería no modificar la tabla existente, sino mapear una nueva tabla como una extensión de una existente (tal vez esto se pueda hacer de alguna manera usando mmap pero no sé qué mapear y cómo extenderlo). Básicamente, sería interesante algo similar a dlopen con la opción "global" que funciona para nombres dinámicos.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Esto parece bastante engorroso. Probablemente debería cambiar su código para buscar el símbolo directamente desde su script interpreteur/VM.

pero…

Supongamos que analizo un script y determino que tiene algunos métodos que luego quiero agregar al espacio de direcciones global para que las bibliotecas compartidas puedan acceder a ellos cargados después.

AFAIK, no hay una API expuesta por el enlazador dinámico para registrar símbolos adicionales. Sin embargo, lo que puedes hacer es dlopen una nueva biblioteca compartida con esos símbolos:

  1. generar dinámicamente un archivo .so con un símbolo para cada función que desee exponer;

  2. cada uno de esos símbolos hace referencia a un patrón similar a PLT (el código busca una entrada similar a GOT y salta a ella);

  3. dlopen RTLD_GLOBAL este archivo .so ;

  4. llenar las variables tipo GOT;

  5. ahora puede dlopen adicional .so llamará a la función similar a PLT y saltará a través de la variable similar a GOT a la función real.

Código del objeto compartido:

 .text .globl main .type main, @function foo: .cfi_startproc jmp *foo_got_alike(%rip) .cfi_endproc .bss .align 8 .type foo_got_alike, @object .size foo_got_alike, 8 foo_got_alike: .zero 8

Esto suponga que ha logrado generar una implementación adecuada para 0 foo usando algún tipo de JIT.

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