Библиотека символов и пользовательских символов в ELF - PullRequest
0 голосов
/ 07 октября 2011

Мои вопросы связаны с символами в ELF.Как мы знаем, таблица символов ELF содержит информацию, необходимую для поиска и перемещения символических определений и ссылок программы.

Мой вопрос заключается в том, можем ли мы различать ч / б библиотечный символ и определяемый пользователем символ (если оба они глобальные)?рассмотрим сценарий, при котором исходный код недоступен, а у вас есть только ELF.

1 Ответ

0 голосов
/ 07 октября 2011

Статическая библиотека - это просто архив несвязанных объектных файлов (.o) (с индексом для ускорения поиска компоновщиком символов в нем).Когда вы ссылаетесь на такую ​​библиотеку, компоновщик берет каждый неразрешенный символ и пытается найти его там.Если он находит его, он извлекает соответствующий объект и добавляет его в коллекцию для ссылки.Так что нет, вы не можете сказать, приходит ли символ из статической библиотеки .

Если у вас есть другой экземпляр библиотеки, который достаточно близок к тому, с чем был связан исполняемый файл, вы можете посмотретькакие символы он определяет и чем предполагает, что все эти символы, а также любые символы, от которых он зависит, взяты из библиотеки.

Конечно, можно определить символы, определенные в общей библиотеке, потому что это остается другим файлом.

Но есть еще один момент: наиболее вероятно незаконно предоставить бинарный файл Linux без статически связанных источников с libc.То есть, это определенно незаконно, если этот libc является GNU Libc, потому что он распространяется на условиях LGPL, и LGPL требует предоставления (по запросу) источников всего производного кода, за исключением кода, который связан с ним динамически .Если он использует другой libc, такой как sourceware newlib или bionic libc (Android) (я не могу найти другого).Однако я не уверен, насколько хорошо такой код будет работать в системе на основе GNU libc.

...