Domanda

C'è un elfutils pacchetto software che include un programma chiamato eu-elflint per la verifica binari ELF (proprio come lint per C - da qui il nome).

Solo per curiosità ho controllato le nostre librerie condivise con questo strumento e ha trovato un sacco di problemi, per esempio:.

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

Come un controllo incrociato ho costruire una libreria condivisa molto banale dal codice sorgente sotto

int foo(int a) {
   return a + 1;
}

// gcc -shared -fPIC -o libfoo.so foo.c

E ancora provato ...

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

Come si può vedere anche il banale esempio mostra anche un sacco di problemi.

A proposito: io sono su Ubuntu Karmic--32bit con gcc v4.4.1

A proposito: ... lo stesso avviene su Debian-Lenny-64bit con gcc v4.2.4

E 'questo qualcosa che dovrei essere preoccupato?

È stato utile?

Soluzione

Risposta rapida: "E 'questo qualcosa che dovrei essere preoccupato?" No .

Più rispondere: controlli elflint non solo gli standard ABI, ma anche alcune convenzioni ELF. Entrambe le convenzioni Abis e ELF cambiare nel corso del tempo: ABI sono estese, e deve rimanere compatibile, e le convenzioni ELF si evolverà nel tempo (per ottenere nuove funzionalità, soprattutto). Di conseguenza, le aspettative di elflint devono essere tenuti in sincronia con prodotti che cosa il vostro assemblatore / linker (binutils GNU in questo caso). È possibile trovare un sacco di report per elflint su nuove estensioni ELF introdotte nel binutils GNU, e per i quali le catture elflint solo più tardi. Così, è molto probabile che si dispone di una versione di elflint che è troppo vecchio per le binutils installati. Come elflint non è tanto utilizzato, non mi sorprenderebbe che una distro linux non tenere quei due in sincronia così bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top