GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo determinar si un archivo binario de Linux es de 32 bits o de 64 bits?

La respuesta a la pregunta en el título está justo al comienzo de la salida:

ELF 64 bits Ejecutable LSB, x86-64

ELF es el formato ejecutable y vinculable, el formato de archivo ejecutable binario más utilizado por Linux.

x86-64 es la arquitectura del binario, la versión de 64 bits del conjunto de instrucciones x86 introducido originalmente por AMD. Por motivos que me superan, Microsoft se refiere a él como "x64", pero es lo mismo.

Si necesita conocer la arquitectura del kernel en sí, puede usar uname -mpi . Por ejemplo, en mi sistema, eso imprime:

x86_64 desconocido desconocido

lo que significa que estoy ejecutando un kernel x86-64.

Si está interesado en la CPU en sí, mire /proc/cpuinfo para obtener detalles sobre las CPU detectadas por el kernel de Linux.

Un ejecutable de 80x86 de 32 bits se identifica con file como, por ejemplo:

ELF 32 bits Ejecutable LSB, Intel 80386 , versión 1 (SYSV), vinculado dinámicamente (usa bibliotecas compartidas), para GNU/Linux 2.6.8, despojado

lo que nos dice que es un ejecutable de 32 bits que utiliza el conjunto de instrucciones Intel 80386 (posiblemente con extensiones).

Tenga en cuenta que no es tan simple como las arquitecturas de 32 bits frente a las de 64 bits. Por ejemplo, el kernel de Linux admite arquitecturas de 32 bits como Intel 80386, AVR32, S/390 y Unicore32. En el lado de las cosas de 64 bits, Linux se puede usar en PA-RISC, x86-64, Itanium y Alpha, entre otros. Sin embargo, no todas las distribuciones proporcionan archivos binarios para todas las arquitecturas (y dudo que haya distribuciones dirigidas a todas). arquitecturas de CPU admitidas por igual). Entonces, si desea saber si un binario determinado será ejecutable en un sistema determinado, debe considerar la arquitectura , en lugar del tamaño de palabra nativo de la CPU.


El quinto byte de un archivo ejecutable binario de Linux (formato ELF, consulte Wikipedia) es 1 para un ejecutable de 32 bits, 2 para un ejecutable de 64 bits.

Para ver esto para un programa llamado "foo", escriba en la línea de comando

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

Si desea evitar el tubo de 'cabeza', puede hacerlo

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

Esto imprimirá 01 si foo es un binario de 32 bits y 02 si es de 64 bits. Todavía puede incluir algunos espacios iniciales; vale la pena saber si está haciendo comparaciones automáticas de los resultados.

Si encuentra esto útil en un contenedor básico de Ubuntu Docker donde no se instaló 'archivo'.


Linux
  1. Cómo administrar las capacidades de archivos de Linux

  2. ¿Cómo determinar si un Linux determinado es de 32 bits o de 64 bits?

  3. Cómo compilar un binario de 32 bits en una máquina Linux de 64 bits con gcc/cmake

  4. Cómo distinguir binarios de archivos de texto en Linux

  5. ¿Cómo determinar el tipo de sistema de archivos de manera confiable en Linux?

Cómo hacer un archivo ejecutable en Linux

Cómo determinar el tipo MIME de un archivo en Linux

Cómo vincular un archivo en Linux

¿Cómo hacer un archivo ejecutable en la terminal de Linux?

Cómo saber si la versión de Linux es de 32 bits o de 64 bits

¿Cómo verificar que el sistema Linux sea de 32 bits o de 64 bits?