¿Existe alguna herramienta para modificar las entradas de la biblioteca compartida en la sección dinámica de un binario ELF? Me gustaría modificar explícitamente las dependencias de la biblioteca compartida en mi binario (es decir, reemplazar la ruta a la biblioteca existente con una ruta personalizada)Herramienta para modificar la sección dinámica de un binario ELF
Respuesta
sustituya la ruta a la biblioteca existente con una ruta personalizada
Si esta es su propia biblioteca, entonces es probable que la vinculación de esa manera:
$ cc -o prog1 -l/full/path/to/libABC.so prog1.o
en lugar de la correcta:
$ cc -o prog1 -L/full/path/to/ -lABC prog1.o
El primer enfoque le dice al encriptador de Linux que la aplicación necesita pre Ciertamente esa biblioteca, solo esa biblioteca y ninguna anulación debería ser posible. El segundo enfoque indica que la aplicación necesita la biblioteca que se instalaría en algún lugar del sistema, ya sea en la ruta predeterminada de la biblioteca o en una señalada por $ LD_LIBRARY_PATH (se buscaría durante el tiempo de ejecución). -L se usa solo durante el tiempo de enlace.
De lo contrario, en lugar de parchear el ELF, primero compruebe si puede sustituir la biblioteca mediante un enlace simbólico. Este es el truco habitual: es difícil modificar el ejecutable después, pero es muy fácil cambiar dónde se encuentran los puntos de enlace simbólico.
Es posible que desee comprobar la variable de entorno LD_LIBRARY_PATH
.
Si nos fijamos en la sección .dynsym en Linux a través de readelf
, sólo verá algo como:
1: 0000000000000000 163 FUNC GLOBAL DEFAULT UND [email protected]_2.2.5 (2)
la que sólo contiene un nombre simbólico de la biblioteca. Sin embargo, si se incluye la información cargador dinámico, que se obtiene:
libc.so.6 => /lib/libc.so.6 (0x00002ba11da4a000)
/lib64/ld-linux-x86-64.so.2 (0x00002ba11d82a000)
Así como se ha mencionado, el absoluto lo más fácil de hacer (suponiendo que usted está haciendo esto para la depuración, y no para siempre) no sería más que para crear un nueva sesión, exporte su ruta personalizada frente al existente LD_LIBRARY_PATH
, y vaya desde allí.
- 1. Agregar sección al archivo ELF
- 2. ¿Herramienta para la modificación simple del archivo elf?
- 3. Reubicación dinámica de la sección de código
- 4. Importar nombres en el binario ELF
- 5. ¿Cómo puedo examinar el contenido de una sección de datos de un archivo ELF en Linux?
- 6. ¿Cómo se extrae solo el contenido de una sección ELF
- 7. Sección Flush ELF de la RAM después de la inicialización de la biblioteca
- 8. Cómo modificar el tiempo de ejecución de la sección web.config?
- 9. Herramienta de Java para modificar el código de prueba
- 10. Leer la entrada GOT en Elf Binary
- 11. obteniendo el miembro sh_name en un archivo elf de cabecera de sección
- 12. Parche de código/símbolos en un binario ELF de enlace dinámico
- 13. Cargar un Mac binario como una biblioteca dinámica
- 14. ¿Las variables inicializadas cero de la sección .bss ocupan espacio en el archivo elf?
- 15. Modifying elf file
- 16. archivo ELF a mano
- 17. Linux, GNU GCC, ld, scripts de versión y el formato binario ELF - ¿Cómo funciona?
- 18. Tabla de cadenas en ELF
- 19. ¿dónde debería tomarse en memoria la sección .bss del archivo ELF?
- 20. ¿Alguna herramienta/software en Windows para ver el formato de archivo ELF?
- 21. ¿Puedo modificar Root.plist en paquetes de configuración de forma dinámica?
- 22. Modificar el indicador de pestaña de forma dinámica en Android
- 23. Embalaje de un archivo en un archivo ejecutable ELF
- 24. Biblioteca compartida Proxy (sharedlib, shlib, so) para ELF?
- 25. ¿Cómo incrusto datos en una sección TEXT del archivo binario mac-o de Mac OS X?
- 26. Actualizar una sección después de la adición de HTML de forma dinámica a jQuery Mobile
- 27. ¿qué parte del archivo ELF debe cargarse en la memoria?
- 28. cabecera ELF lectura en C
- 29. ¿Cómo se cruzan los archivos ejecutables ELF para Android?
- 30. ¿Cuál es la diferencia entre la sección .got y .got.plt?