Como resolver: -bash:: não é possível executar o arquivo binário

18

Eu tenho um arquivo chamado b1 que contém a linguagem assembly. Estou tentando executar o arquivo no OSX usando

$ ./b1

Estou tendo o erro a seguir:

-bash: ./b1: cannot execute binary file

Eu olhei para outras perguntas semelhantes, mas sem sucesso. Definitivamente, estou usando uma arquitetura de 64 bits.

Aqui estão as informações relevantes:

$ 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

Editar:

Ran as b1que terminou com: /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
fonte

Respostas:

25

Desculpe, este arquivo é para GNU / Linux

De acordo com a sua filesaída, este programa é para GNU / Linux. Eu sei disso porque:

  1. O arquivo b1está no formato ELF(Formato extensível e vinculável) , enquanto o Mac OS X usa o Mach-Oformato para binários;
  2. filereconhece que este arquivo é para GNU/Linux 2.6.18, o que significa que ele funcionará na maioria das distribuições modernas de Linux.

Para resolver seu problema, você deve executá-lo em uma distribuição Linux, recompilar o programa ou obter a versão do Mac OS X deste programa.

Então ... Por que não b1funciona no XYZ OS ou CPU?

Assim como as pessoas falam idiomas diferentes, computadores diferentes entendem instruções diferentes. Por exemplo, seu Mac usa um processador Intel, enquanto seu telefone Android usa um processador ARM. Compare esses dois processadores com inglês e francês. Eles podem pertencer à mesma família de idiomas, mas ainda assim, você não pode falar os dois ao mesmo tempo. Isso leva a uma conclusão:

Computadores diferentes "falam" em diferentes línguas.

Quanto ao motivo pelo qual diferentes sistemas operacionais (como Windows, Mac OS X e Linux) não podem usar os mesmos binários, considere o seguinte:

O que torna o software objetivamente diferente do hardware? Não muito.

Ambos fornecem um sistema e uma "linguagem" que permite que componentes mais complexos do computador concluam tarefas para o usuário final. Ambos exigem um idioma acordado para realizar o trabalho. Imagine se houvesse 10 pessoas em uma partida de gritos, cada uma falando um idioma diferente. É por isso que diferentes softwares de sistemas operacionais precisam de binários diferentes, mesmo que os dois sistemas operacionais usem o mesmo processador.

Winny
fonte
Oi, Estou com um problema semelhante ao tentar compilar o arquivo elf no Mac OS 10.9. Você poderia me dizer como executar este onmac
alliswell
AllsWell você encontrou um caminho para isso !?
Neocortex
1

linguagem assembly? Você precisa compilá-lo ou montá-lo.

man as
Emery Lapinski
fonte
2
O interlocutor parece ter conflitado a linguagem assembly e o código da máquina . Veja a saída de filena pergunta.
JdeBP