Desculpe, este arquivo é para GNU/Linux

Desculpe, este arquivo é para GNU/Linux

Eu tenho um arquivo chamado b1 que contém 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 os resultados de 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 acabou 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

Responder1

Desculpe, este arquivo é para GNU/Linux

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

  1. O arquivo b1está noELF(Formato extensível e vinculável)formato, 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 funcionará na maioria das distribuições Linux modernas.

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

Então... Por que não b1funcionaXYZSO ou CPU?

Assim como as pessoas falam línguas 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 com inglês e francês. Eles podem pertencer à mesma família linguística, mas ainda assim não é possível falar os dois ao mesmo tempo. Isto leva a uma conclusão:

Computadores diferentes “falam” em línguas diferentes.

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 uma linguagem acordada para realizar o trabalho. Imagine se houvesse 10 pessoas gritando, cada uma falando um idioma diferente. É por isso que softwares de sistemas operacionais diferentes precisam de binários diferentes, mesmo que ambos os sistemas operacionais usem o mesmo processador.

Responder2

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

man as

informação relacionada