GNU/Linux >> Tutoriels Linux >  >> Linux

Comment déterminer si un fichier binaire Linux est 32 bits ou 64 bits ?

La réponse à la question dans le titre se trouve juste au début de la sortie :

ELF 64 bits Exécutable LSB, x86-64

ELF est le format exécutable et associable, le format de fichier exécutable binaire le plus couramment utilisé par Linux.

x86-64 est l'architecture du binaire, la version 64 bits du jeu d'instructions x86 introduit à l'origine par AMD. Pour des raisons qui me dépassent, Microsoft l'appelle "x64", mais c'est la même chose.

Si vous avez besoin de connaître l'architecture du noyau lui-même, vous pouvez utiliser uname -mpi . Par exemple, sur mon système, cela affiche :

x86_64 inconnu inconnu

ce qui signifie que j'exécute un noyau x86-64.

Si vous êtes intéressé par le processeur lui-même, regardez /proc/cpuinfo pour plus de détails sur le ou les processeurs détectés par le noyau Linux.

Un exécutable 32 bits 80x86 est identifié par file comme par exemple :

ELF 32 bits Exécutable LSB, Intel 80386 , version 1 (SYSV), lié dynamiquement (utilise des bibliothèques partagées), pour GNU/Linux 2.6.8, supprimé

qui nous indique qu'il s'agit d'un exécutable 32 bits utilisant le jeu d'instructions Intel 80386 (éventuellement avec des extensions).

Notez que ce n'est pas aussi simple que les architectures 32 bits par rapport aux architectures 64 bits. Par exemple, le noyau Linux prend en charge les architectures 32 bits comme Intel 80386, AVR32, S/390 et Unicore32. Du côté 64 bits, Linux est utilisable sur PA-RISC, x86-64, Itanium et Alpha, entre autres. Cependant, toutes les distributions ne fournissent pas de binaires pour toutes les architectures (et je doute qu'il existe des distributions qui ciblent toutes architectures CPU prises en charge de la même manière). Donc, si vous voulez savoir si un binaire donné sera exécutable sur un système donné, vous devez considérer l'architecture , plutôt que la taille de mot native du CPU.


Le 5ème octet d'un fichier exécutable binaire Linux (format ELF, voir Wikipedia) est 1 pour un exécutable 32 bits, 2 pour un exécutable 64 bits.

Pour voir cela pour un programme nommé "foo", tapez sur la ligne de commande

od -t x1 -t c foo | head -n 2

Si vous voulez éviter le tuyau 'head', vous pouvez le faire

od -An -t x1 -j 4 -N 1 foo

Cela imprimera 01 si foo est un binaire 32 bits et 02 s'il s'agit de 64. Il peut toujours inclure des espaces en tête - à savoir si vous effectuez des comparaisons automatisées sur les résultats.

Si trouvé cela utile dans un conteneur Ubuntu Docker de base où 'fichier' n'a pas été installé.


Linux
  1. Comment renommer un fichier sous Linux ?

  2. Comment déterminer si un Linux donné est 32 bits ou 64 bits ?

  3. Comment compiler un binaire 32 bits sur une machine Linux 64 bits avec gcc/cmake

  4. Comment distinguer le binaire des fichiers texte sous Linux

  5. Comment puis-je exécuter un exécutable non approuvé sur Linux en toute sécurité ?

Comment rendre un fichier exécutable sous Linux

Comment déterminer le type MIME d'un fichier sous Linux

Comment créer un lien symbolique vers un fichier sous Linux

Comment rendre un fichier exécutable dans un terminal Linux ?

Comment savoir si la version 32 bits ou 64 bits de Linux

Comment vérifier que le système Linux est 32 bits ou 64 bits ?