Как решить: -bash:: не может выполнить двоичный файл

18

У меня есть файл с именем b1, который содержит язык ассемблера. Я пытаюсь выполнить файл на OSX, используя

$ ./b1

Я получаю следующую ошибку:

-bash: ./b1: cannot execute binary file

Я смотрел на другие подобные вопросы, но безрезультатно. Я определенно использую 64-битную архитектуру.

Вот вывод соответствующей информации:

$ file b1
b1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
$ uname -a
Darwin Anthonys-MacBook-Pro.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

Редактировать:

Ран, as b1который заканчивался тем, что заканчивался: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as: fatal error in /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as

user304868
источник

Ответы:

25

Извините, этот файл для GNU / Linux

Согласно вашему fileвыводу, эта программа для GNU / Linux. Я знаю это, потому что:

  1. Файл b1имеет ELFформат (Extensible and Linkable Format) , в то время как Mac OS X использует этот Mach-Oформат для двоичных файлов;
  2. fileпризнает, что этот файл предназначен GNU/Linux 2.6.18, то есть он будет работать в большинстве современных дистрибутивов Linux.

Чтобы решить вашу проблему, вы должны либо запустить ее в дистрибутиве Linux, перекомпилировать программу, либо получить версию этой программы для Mac OS X.

Итак ... Почему не b1работает на XYZ OS или CPU?

Так же, как люди говорят на разных языках, разные компьютеры понимают разные инструкции. Например, ваш Mac использует процессор Intel, а ваш телефон Android использует процессор ARM. Сравните эти два процессора с английским и французским. Они могут принадлежать к одной языковой семье, но, тем не менее, вы не можете говорить на обоих языках одновременно. Это приводит к выводу:

Разные компьютеры "разговаривают" на разных языках.

Что касается того, почему разные операционные системы (такие как Windows, Mac OS X и Linux) не могут использовать одни и те же двоичные файлы, рассмотрите следующее:

Что объективно отличает программное обеспечение от аппаратного? Немного.

Оба предоставляют систему и «язык», который позволяет более сложным компонентам компьютера выполнять задачи для конечного пользователя. Оба требуют согласованного языка, чтобы сделать работу. Представьте себе, если бы в матче было 10 человек, каждый из которых говорил на своем языке. Вот почему разному программному обеспечению ОС нужны разные двоичные файлы, даже если в обеих операционных системах используется один и тот же процессор.

Winny
источник
Привет, у меня есть похожая проблема, пытаясь скомпилировать файл эльфа в Mac OS 10.9. Не могли бы вы сказать мне, как запустить этот onmac
AllIsWell
AllsНу вы нашли способ для этого !?
Неокортекс
1

язык ассемблера? Вам нужно скомпилировать, а точнее собрать.

man as
Эмери Лапински
источник
2
Спрашивающий, похоже, связал язык ассемблера и машинный код . Смотрите вывод fileв вопросе.
JdeBP