Question

Il est un progiciel elfutils qui comprend un programme appelé eu-elflint pour vérifier les binaires ELF (comme lint C - d'où le nom).

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 à nouveau 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 pouvez le voir même l'exemple trivial montre aussi beaucoup de questions.

BTW: Je suis sur Ubuntu-Karmic-32bit avec V4.4.1 gcc

BTW: ... la même chose se produit sur Debian-Lenny-64bit avec V4.2.4 gcc

Est-ce que je devrais être préoccupé?

Était-ce utile?

La solution

Réponse rapide: « Est-ce que je devrais être préoccupé? » Non .

réponse plus longue: contrôles elflint non seulement les normes ABI, mais aussi certaines conventions ELF. Les deux conventions et ABIs ELF changer au fil du temps: ABIs sont étendus, et doivent rester rétrocompatible, et les conventions ELF n'évoluent au fil du temps (pour obtenir de nouvelles fonctionnalités, principalement). En conséquence, les attentes de elflint doivent être conservés en phase avec ce que votre assembleur / éditeur de liens (les binutils dans ce cas) produire. Vous pouvez trouver beaucoup de rapports sur les nouvelles extensions elflint ELF introduites dans binutils GNU, et pour lesquels elflint ne saisit que plus tard. Ainsi, il est plus probable que vous avez une version de elflint qui est trop vieux pour vos binutils installés. Comme elflint est pas tellement utilisé, il ne me surprendrait pas qu'un distro linux ne tient pas ces deux synchronisés si bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top