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 b1
que 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 file
saída, este programa é para GNU/Linux. Eu sei disso porque:
- O arquivo
b1
está noELF
(Formato extensível e vinculável)formato, enquanto o Mac OS X usa oMach-O
formato para binários; file
reconhece que este arquivo é paraGNU/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 b1
funcionaXYZSO 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