Tengo un sistema "fsimage.so" que requiere mkdirp, que simplemente vive en libgen.so. Pero fsimage.so no sabe esto. Por ejemplo:¿Puedo agregar una referencia de biblioteca al objeto compartido existente?
# ldd /usr/lib/python2.4/vendor-packages/fsimage.so
libfsimage.so.1.0 => /usr/lib/libfsimage.so.1.0
libxml2.so.2 => /lib/libxml2.so.2
libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1
libpthread.so.1 => /lib/libpthread.so.1
libz.so.1 => /lib/libz.so.1
libm.so.2 => /lib/libm.so.2
libsocket.so.1 => /lib/libsocket.so.1
libnsl.so.1 => /lib/libnsl.so.1
libc.so.1 => /lib/libc.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
# ./test
Traceback (most recent call last):
File "./test", line 26, in ?
import fsimage
ImportError: ld.so.1: isapython2.4: fatal: relocation error: file /usr/lib/python2.4/vendor-packages/fsimage.so: symbol mkdirp: referenced symbol not found
# LD_PRELOAD=/usr/lib/libgen.so ./test
Usage: ./test
Naturalmente, si tuviera las fuentes, etc, podría simplemente enlazar de nuevo, y añadir "-lgen", y agregará libgen.so como dependencia.
Pero como un ejercicio de hackeo, digamos que no tengo ninguna fuente, y simplemente quería agregar que fsimage.so también necesita cargar libgen.so. Usando elfedit/objcopy, etc., ¿no es esto posible? Supongo que no puedo usar "ld" para usar .so como entrada, y escribir un .so nuevo con una biblioteca adicional.
# elfdump /usr/lib/python2.4/vendor-packages/fsimage.so|grep NEEDED
[0] NEEDED 0x5187 libfsimage.so.1.0
[1] NEEDED 0x5152 libxml2.so.2
[2] NEEDED 0x5171 libgcc_s.so.1
Primer intento de stackoverflow, ir fácil en mí :)
Ejecuto elfedit con el, por lo que quiero editar como primer arg y un nuevo nombre para el segundo y no pasa nada. La ayuda se muestra. Estoy en Linux sin embargo. – kaneda