sed 's/32/64/g' addrpath.c > addrpath64.cCorrigé : Par ailleurs il a pour l'instant comme effet secondaire de stripper les exécutables à un point que nombre d'outils ne reconnaissent plus l'exécutable comme étant en ELF. Par contre, j'insiste sur le fait que les binaires produits sont parfaitement valables du point de vue de la norme (si ce n'est pas le cas, c'est un bug de ma part). Ils sont juste réduits au strict minimum pour pouvoir être chargés en mémoire, tout en respectant la norme.
Les binaires passés à la moulinette voient maintenant leurs sections préservées, mais ne supportent pas d'être strippés, et la libbfd sort des messages incompréhensibles. (donc stripper les binaires avant d'ajouter un rpath) Et probablement il ne faut pas essayer de hacker des bibliothèques partagées, elles deviendraient inutilisables pour de nouvelles compilations. Quelqu'un saurait-il diagnostiquer le problème?
Ah sinon, le programme va probablement segfaulter si le binaire raconte n'importe quoi. Je pourrais rajouter des tests dans tous les sens, mais ça n'aurait pas grand intérêt.
gcc -std=c99 -Wextra -Wall -O3 -o addrpath addrpath.cSi vous voulez vraiment tester le programme sur un noyau non patché, rajoutez donc un -DBROKEN_KERNEL, mais ça ne marche pas bien. Vous êtes prévenus.
(Et oui je sais il y a des tas de warnings sur des variables non initialisées, mais c'est volontaire de les ignorer : les cas où les mauvaises choses se passeraient sont sur des binaires qui racontent n'importe quoi, et je ne suis pas en train d'écrire du code noyau ou d'assister à un TD de C).
./addrpath file rpath newfile
Cas où pas de segment PT_PHDR. (fait)
Reconnaître un binaire déjà passé à la moulinette.
Je fais la supposition que la section contenant la table des chaînes dynamiques s'appelle ".dynstr". (selon la norme j'ai raison mais...)