J'ai un système "fsimage.so" qui nécessite mkdirp, qui réside justement dans libgen.so. Mais fsimage.so ne le sait pas. Par exemple:Puis-je ajouter une référence de bibliothèque à un objet partagé existant?
# 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
Naturellement, si j'avais les sources etc, je pourrais simplement lier à nouveau, et ajouter « -lgen », et il va ajouter libgen.so comme une dépendance.
Mais comme un exercice de hackery, disons que je n'ai aucune source, et je voulais simplement ajouter que fsimage.so doit également charger libgen.so. En utilisant elfedit/objcopy etc, n'est-ce pas possible? Je ne suppose pas que je peux utiliser "ld" pour utiliser .so comme entrée, et écrire un nouveau .so avec une bibliothèque supplémentaire?
# 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
Première tentative de stackoverflow, allez-y doucement sur moi :)
Je cours elfedit avec le donc je veux éditer en tant que premier argument et un nouveau nom pour le second et rien ne se passe. L'aide est montrée. Je suis sur Linux cependant. – kaneda