web-dev-qa-db-fra.com

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

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

$ ./b1

Je reçois l'erreur suivante:

-bash: ./b1: cannot execute binary file

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

Voici la sortie des 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

Modifier:

Ran as b1 qui s'est terminé 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

17
user304868

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

Selon votre sortie file, ce programme est pour GNU/Linux. Je le sais parce que:

  1. Le fichier b1 est au format ELF (Format extensible et connectable) , tandis que Mac OS X utilise le format Mach-O pour les fichiers binaires;
  2. file reconnaît que ce fichier correspond à GNU/Linux 2.6.18, ce qui signifie qu'il fonctionnera sous les distributions Linux les plus récentes.

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

Alors ... Pourquoi b1 ne fonctionne-t-il pas sur le système d'exploitation XYZ?

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 en anglais et en 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.

En ce qui concerne les raisons pour lesquelles différents systèmes d'exploitation (tels que Windows, Mac OS X et Linux) ne peuvent pas utiliser les mêmes fichiers binaires, tenez compte de ceci:

Qu'est-ce qui rend les logiciels objectivement différents du matériel? Pas tant.

Les deux fournissent un système et un "langage" permettant à des composants plus complexes de l'ordinateur d'effectuer des tâches pour l'utilisateur final. Les deux nécessitent un langage convenu pour que le travail soit effectué. Imaginez s'il y avait 10 personnes dans un match qui criait, 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.

21
Winny

Langue de l'Assemblée? Vous devez le compiler, ou plutôt l'assembler.

man as
1
Emery Lapinski