14

У меня есть файл с именем 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

2 ответа2

19

Извините, этот файл для 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 человек, каждый из которых говорил на своем языке. Вот почему разному программному обеспечению ОС нужны разные двоичные файлы, даже если в обеих операционных системах используется один и тот же процессор.

1

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

man as

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .