Il existe un progiciel elfutils
qui inclut un programme appelé eu-elflint
pour la vérification des binaires ELF (de même que lint
pour C - d'où le nom).Bibliothèque partagée ELF: décalage de relocalisation hors limites
Juste pour la curiosité que j'ai vérifié nos propres bibliothèques partagées avec cet outil et il a trouvé beaucoup de problèmes, par exemple:
eu-elflint libUtils.so
section [ 2] '.dynsym': _DYNAMIC symbol size 0 does not match dynamic segment size 248
section [ 2] '.dynsym': _GLOBAL_OFFSET_TABLE_ symbol size 0 does not match .got.plt section size 3076
section [ 8] '.rel.plt': relocation 0: offset out of bounds
section [ 8] '.rel.plt': relocation 1: offset out of bounds
...
section [ 8] '.rel.plt': relocation 765: offset out of bounds
En tant que crosscheck je construire une bibliothèque partagée très trivial à partir du code source ci-dessous
int foo(int a) {
return a + 1;
}
// gcc -shared -fPIC -o libfoo.so foo.c
Et réessayé ...
eu-elflint libfoo.so
section [ 9] '.rel.plt': relocation 0: offset out of bounds
section [ 9] '.rel.plt': relocation 1: offset out of bounds
section [23] '.comment' has wrong flags: expected none, is MERGE|STRINGS
section [25] '.symtab': _GLOBAL_OFFSET_TABLE_ symbol size 0 does not match .got.plt section size 20
section [25] '.symtab': _DYNAMIC symbol size 0 does not match dynamic segment size 200
Comme vous peut voir même l'exemple trivial montre également beaucoup de problèmes.
BTW: Je suis sur Ubuntu-Karmic-32bit avec gcc V4.4.1
BTW: ... la même chose se produit sur Debian-Lenny-64bit avec gcc V4.2.4
Est-ce quelque chose que je devrait être préoccupé par?