Запустить elf в linux

Как запустить файл с расширением (возможно, ELF) на Ubuntu?

Мне был дан “двоичный” файл в linux и отдельный файл для окон для конкретной задачи. Программы являются exe для окон. Линукс-версия файла имеет ту же функцию в Linux, что и окна.

Однако я не смог выполнить это. Я попробовал (на терминале) выполнить его только с именем файла, ./[filename] и даже попробовал chmod +x [filename] , а затем попробовал второй способ.

Для всего… Я получаю результат: “Команда не найдена”. (Файл определенно существует, кстати).

Что я должен делать? Команда file на нем дает:

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e805f746e65c09cc8b0c037d8a8c27ee0a6a051c 

Я предполагаю, что это 32-битная компиляция на 64-битной системе. Я перекрестно скомпилировал небольшой файл c в двоичный файл, используя опцию -m32 в gcc. Это также потребовало нескольких дополнительных пакетов. Результат a.out выглядит следующим образом.

% file a.out a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=be02470c8337b96e7deaaff323bc53865991c3ab, not stripped 

Сравните это с внутренней бинарной системой

% file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a0823e17cafbe5b2296346216445566840fdfd88, stripped 

Запуск a.out показывает мне это.

% ./a.out zsh: no such file or directory: ./a.out 

Конкретное сообщение “Команда не найдена” – это что-то, я думаю, bash печатает. Я сам использую zsh.

Чтобы это сработало, вы можете установить пакеты multilib. Я не сузил его до точного пакета, но установка gcc-multilib на Debian тянет все, что вам нужно. После установки этого, вот что я получаю.

Читайте также:  Лучшие графические оболочки linux

(программа должна оценивать значение PI).

Примечание. Мне действительно нужно было установить gcc-multilib только для компиляции файла. Затем я удалил пакеты, чтобы имитировать 64-битную систему, у которой нет 32-битных библиотек времени выполнения, которые нужны этой вещи.

Источник

Как «запустить» приложение в ELF формате в Ubuntu?

Разработчик выложил старую версию своего приложения, скачав этот файл без расширения, я решил узнать, в каком он формате. Просмотрев его я обнаружил, что он в ELF формате. Как запустить, либо установить это приложение в Ubuntu?

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

1 ответ 1

ELF (англ. Executable and Linkable Format — формат исполнимых и компонуемых файлов) — формат двоичных файлов, используемый во многих современных UNIX-подобных операционных системах, таких как FreeBSD, Linux, Solaris и др.

и из пьесы «мещанин во дворянстве» мольера:

Журден. Скажите на милость! Сорок с лишком лет говорю прозой — и невдомек!

да, большая часть программ (и библиотек) в ряде операционных систем сохраняются в файлах в формате elf . в этом можно убедиться, например, с помощью программы file (вывод разбит на строки для удобства обозрения):

$ file /bin/ls /bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=6461a544c35b9dc1d172d1a1c09043e487326966, for GNU/Linux 3.2.0, stripped 

если мы скопируем этот файл в текущий каталог без сохранения битов исполнимости:

то и запустить его просто по имени не сможем:

$ ./ls bash: ./ls: Permission denied $ ls -l ls -rw-r--r-- 1 user user 147176 Jan 16 20:40 ls 

надо либо добавить бит исполнимости (хотя бы для вас — владельца файла):

$ chmod u+x ls $ ./ls -l ls -rwxr--r-- 1 user user 147176 Jan 16 20:40 ls 

либо напрямую вызвать загрузчик (указан в выводе программы file как interpreter ):

$ chmod -x ls $ /lib64/ld-linux-x86-64.so.2 ./ls -l ls -rw-r--r-- 1 user user 147176 Jan 16 20:40 ls 

Источник

Оцените статью
Adblock
detector