2010-02-02 3 views
3

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?

Répondre

0

Réponse rapide: "Est-ce quelque chose que je devrais être préoccupé?" n °.

Réponse plus longue: elflint vérifie non seulement les normes ABI, mais aussi certaines conventions ELF. Les conventions ABI et ELF changent avec le temps: les ABI sont étendus et doivent rester compatibles avec les versions antérieures, et les conventions ELF évoluent avec le temps (pour obtenir de nouvelles fonctionnalités, principalement). En conséquence, les attentes d'elflint doivent être synchronisées avec ce que produit votre assembleur/éditeur de liens (les binutils GNU dans ce cas). Vous pouvez trouver beaucoup de rapports à elflint sur les nouvelles extensions ELF introduites dans les binutils GNU, et pour lesquelles elflint ne les attrape que plus tard. Ainsi, il est très probable que vous ayez une version de elflint trop ancienne pour vos binutils installés. Comme elflint n'est pas tellement utilisé, ça ne m'étonnerait pas qu'une distribution linux ne garde pas ces deux synchronisations si bien.

Questions connexes