2010-02-02 6 views
3

Существует программный пакет elfutils, который включает в себя программу под названием eu-elflint для проверки двоичных файлов ELF (так же, как lint для C - отсюда и название).Общая библиотека ELF: смещение смещения за пределами

Просто из любопытства я проверил наши собственные общие библиотеки с помощью этого инструмента, и он нашел много вопросов, например:

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 

Как перепроверить у меня есть построить очень тривиальную общую библиотеку из исходного кода ниже

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

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

И снова попытался ...

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 

Как вам может видеть, что даже тривиальный пример также показывает много проблем.

BTW: Я нахожусь на Ubuntu-кармического-32bit с GCC v4.4.1

КСТАТИ: ... То же самое происходит на Debian-Ленни-64bit с GCC v4.2.4

ли это то, что я следует беспокоиться?

ответ

0

Быстрый ответ: «Это что-то, о чем я должен беспокоиться?» No.

Более длинный ответ: elflint проверяет не только стандарты ABI, но и некоторые соглашения ELF. Как ABI, так и соглашения ELF меняются со временем: ABI расширены и должны оставаться обратно совместимыми, а соглашения ELF со временем меняются (для получения новых функций, в основном). Как следствие, ожидания elflint должны быть синхронизированы с тем, что производит ваш сборщик/компоновщик (GNU binutils в этом случае). Вы можете найти множество отчетов для elflint о новых расширениях ELF, представленных в GNU binutils, и для которых elflint только ловит позже. Таким образом, наиболее вероятно, что у вас есть версия elflint, которая слишком устарела для установленных binutils. Поскольку elflint не так много используется, меня не удивило бы, что дистрибутив linux не синхронизирует эти два так хорошо.

 Смежные вопросы

  • Нет связанных вопросов^_^