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

14

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

$ ./b1

Eu recebo o seguinte erro:

-bash: ./b1: cannot execute binary file

Eu olhei para outras questões semelhantes, mas sem sucesso. Eu 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 b1 que terminou terminando 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

    
por user304868 04.03.2014 / 06:46

2 respostas

19

Desculpe, este arquivo é para GNU / Linux

De acordo com o seu file output, este programa é para GNU / Linux. Eu sei disso porque:

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

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

Então ... Por que o b1 não funciona em XYZ OS ou CPU?

Assim como as pessoas falam idiomas diferentes, computadores diferentes entendem instruções diferentes. Por exemplo, o seu Mac usa um processador Intel, enquanto o seu telefone Android usa um processador ARM. Compare esses dois processadores para 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:

Dissimilar computers "talk" in different tongues.

Por que diferentes sistemas operacionais (como Windows, Mac OS X e Linux) não podem usar os mesmos binários, considere isto:

What makes software objectively different to hardware? Not much.

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 um jogo de gritos, cada um falando um idioma diferente. É por isso que diferentes softwares de SO precisam de binários diferentes, mesmo se ambos os sistemas operacionais usarem o mesmo processador.

    
por 04.03.2014 / 08:35
1

linguagem de montagem? Você precisa compilá-lo, ou melhor, montá-lo.

man as
    
por 04.03.2014 / 08:04