Comment résoudre: -bash:: impossible d'exécuter un fichier binaire


18

J'ai un fichier nommé b1 qui contient le langage d'assemblage. J'essaie d'exécuter le fichier sur OSX en utilisant

$ ./b1

J'obtiens l'erreur suivante:

-bash: ./b1: cannot execute binary file

J'ai regardé d'autres questions similaires, mais en vain. J'utilise définitivement une architecture 64 bits.

Voici la sortie d'informations pertinentes:

$ 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

Éditer:

RAN as b1qui a fini par se terminant par: /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

Réponses:


25

Désolé, ce fichier est pour GNU / Linux

Selon votre filesortie, ce programme est pour GNU / Linux. Je le sais car:

  1. Le fichier b1est au format ELF(Extensible and Linkable Format) , tandis que Mac OS X utilise le Mach-Oformat pour les binaires;
  2. filereconnaît que ce fichier est destiné GNU/Linux 2.6.18, ce qui signifie qu'il fonctionnera sur la plupart des distributions Linux modernes.

Pour résoudre votre problème, vous devez soit exécuter ce problème dans une distribution Linux, recompiler le programme, soit obtenir la version Mac OS X de ce programme.

Alors ... Pourquoi ne b1fonctionne pas sur XYZ OS ou CPU?

Tout comme les gens parlent différentes langues, différents ordinateurs comprennent différentes instructions. Par exemple, votre Mac utilise un processeur Intel, tandis que votre téléphone Android utilise un processeur ARM. Comparez ces deux processeurs à l'anglais et au français. Ils peuvent appartenir à la même famille linguistique, mais vous ne pouvez pas parler les deux en même temps. Cela conduit à une conclusion:

Des ordinateurs différents "parlent" dans différentes langues.

Quant à savoir pourquoi différents systèmes d'exploitation (tels que Windows, Mac OS X et Linux) ne peuvent pas utiliser les mêmes fichiers binaires, considérez ceci:

Qu'est-ce qui rend le logiciel objectivement différent du matériel? Pas tant.

Les deux fournissent un système et un «langage» qui permettent à des composants plus complexes de l'ordinateur d'effectuer des tâches pour l'utilisateur final. Les deux nécessitent une langue convenue pour faire le travail. Imaginez s'il y avait 10 personnes dans un match criant, chacune parlant une langue différente. C'est pourquoi différents logiciels d'exploitation ont besoin de différents fichiers binaires, même si les deux systèmes d'exploitation utilisent le même processeur.


Salut, j'ai un problème similaire en essayant de compiler le fichier elf dans Mac OS 10.9. Pourriez-vous s'il vous plaît me dire comment exécuter cet onmac
AllIsWell

AllsWell vous avez trouvé un moyen pour cela!?
Neocortex

1

langage d'assemblage? Vous devez le compiler, ou plutôt l'assembler.

man as

2
L'interrogateur semble avoir confondu langage d'assemblage et code machine . Voir la sortie de filedans la question.
JdeBP
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.