2010-06-08 3 views
1

Мне сложно понять выход ldd - особенно идентификаторы процессора. Строка в вопросе это одна:Понимание вывода ldd

Shortest.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, from ']', not stripped 

Я несколько вопросов по этому поводу:

  • Что «ELF» означает? Я знаю, что это то, что называются двоичными файлами Linux (Windows Binaries называются PE Binaries, «Portable Executable» Binaries), но это не аббревиатура для чего-то?
  • Что означает LSB? Я даже не могу догадаться об этом ...
  • Я вижу строку «Intel», теперь я серьезно задумываюсь о переносимости двоичных файлов Linux, поскольку ldd, похоже, ожидает, что каждый бинарный файл будет скомпилирован на процессоре Intel ... но что, если он не был скомпилирован на процессоре Intel? Или когда я пытаюсь запустить двоичный файл на компьютере, который не работает на процессоре Intel?
  • Почему ']'? Я думаю, это должно быть какое-то Linker идентифицировать, но «]» не выглядит так же, как идентификатор ...

Заранее спасибо

+0

Чтобы добавить к ответам ниже, это «Intel 80386», потому что это то, что был зарегистрирован код ЦП, как в определениях констант ELF. Однако все современные процессоры будут совместимы. Я не могу найти ответ для «из», даже если вы сбрасываете источник glibc. – Rup

+0

@Rup: хорошо знать, спасибо – 2010-06-08 22:22:26

ответ

3

ELF является исполняемым и Linkable Format - это указывает формат библиотеки - см. Executable and Linkable Format. LSB указывает достоверность данных. Intel 386 означает, что он будет работать на всех чипах, совместимых с 386, который включает в себя Pentium и чипы AMD, но не (скажем) Power PC или IBM/370.

Что касается ']', эта библиотека не имела бы никакого отношения к тестовой утилите, не так ли? Тот, который позволяет сказать:

if test -x foobar 

или

if [ -x foobar ] 

в сценариях оболочки.

+0

ldd сам - это shellscript, так что да, это, вероятно,/bin/[(или shellbuiltin)) - тем не менее, отличный ответ, спасибо! – 2010-06-08 08:57:02

2
  • ELF
  • LSB
  • Intel: исполняемые файлы Linux не предназначены для портативных accros процессоров и achitectures. Это предназначено для использования в CUP, способном для запуска бирарного кода Intel 80386.
  • ']': ??
+0

Спасибо за ссылки. Хотя мне интересно, почему Linux Binaries были бы разработаны * не *, чтобы быть портативными. не вычисляет, ИМХО. – 2010-06-08 08:58:02

+0

Linux-файлы не переносимы. Бинарные файлы Windows не являются переносимыми. Соединители Solaris не переносимы. Бинарные файлы AIX не переносятся ... Чтобы быть портативными, двоичный формат должен выполняться на интерпретаторе (который сам по себе не является переносимым), а не на реальном аппаратном обеспечении ЦП. –

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