Conozca su binario: comando File para (Linux)

Escrito por Jose Rivera

13 octubre, 2020

file

¿Alguna vez pensó por qué los programas tienen diferentes archivos de configuración para Windows, Mac y Linux? Para darle una idea, le contaré los diferentes tipos de formatos en los que viene un ejecutable. No entraré en detalles, pero la próxima vez que use el comando file, sabrá exactamente lo que estará mirando.

Aquí está la salida del comando file en un ejecutable aleatorio en mi máquina.

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, not stripped

Repasemos cada palabra una por una.

ELF

ELF (Executable and Linkable Format) es un formato de archivo para ejecutables, código objeto, bibliotecas compartidas y volcados de núcleo. Es el formato de archivo estándar para sistemas Unix y similares a Unix (por ejemplo, Linux). En su mayoría, encontrará este tipo de archivos en sus máquinas Linux.

Otro:

Mach-O (Mach object) –para NeXTSTEP, OS X e iOS

PE (Portable Executable): para el sistema operativo Windows

32-bit

El sistema de arquitectura de computadora de 32 bits es el que usa el conjunto de instrucciones de ensamblaje x86, MIPS32.

Otro:

Los sistemas de 64 bits utilizan el conjunto de instrucciones de ensamblaje x86-64.

Tenga en cuenta que esto no le informa sobre el sistema en el que está trabajando, sino sobre la forma en que las instrucciones se han estructurado y escrito en el binario (por lo tanto, para el mismo programa, 32 bits y 64 bits tendrán instrucciones de ensamblaje diferentes, pero el ejecutable se comportaría de la misma manera).

Hay otros conjuntos de instrucciones, como MIPS32, MIPS64, ARM, PowerPC que puede encontrar, pero en mi experiencia, x86 y x86-64 son los más utilizados.

Lea esta noticia similar  Números mágicos de archivos

LSB

Linux Standard Base (LSB) es un proyecto conjunto de varias distribuciones de Linux bajo la estructura organizativa de Linux Foundation para estandarizar la estructura del sistema de software. Básicamente, esto significa que en diferentes sistemas operativos basados ​​en Linux (Ubuntu, Fedora, etc.), se usarían reglas comunes para compilar información en el binario (por ejemplo, usar algunas bibliotecas estándar para tareas específicas, estandarizar el diseño de la jerarquía del sistema de archivos, etc.) .

Intel 80386

Intel 80386 es un microprocesador de 32 bits de Intel. Esto significa que el ejecutable se puede ejecutar en el microprocesador 80386 de Intel o en cualquier dispositivo compatible con él. Los últimos microprocesadores de 64 bits son compatibles con los de 32 bits.

SYSV

SYSV es la abreviatura de System Five. Es una de las primeras versiones comerciales del sistema operativo Unix desarrollado por AT&T. La otra versión principal de Unix es BSD (Distribución de software de Berkely)

Otro:

GNU/Linux: es muy obvio que esto se refiere al sistema operativo Linux.

Dynamically linked (uses shared libs)

En la sección de dinamically linked (vinculación dinámica), los nombres de las bibliotecas externas (shared libraries) se colocan en el archivo ejecutable final, mientras que la vinculación real tiene lugar en tiempo de ejecución cuando tanto el archivo ejecutable como las bibliotecas se colocan en la memoria. Por lo tanto, no tenemos que mantener las bibliotecas estándar dentro del binario (usted las importa en su programa). Esto ayuda a mantener el tamaño del archivo bajo y también permite que varios programas utilicen una sola copia de un módulo ejecutable.

Lea esta noticia similar  Apple se encuentra diseñando un iPhone dedicado a investigadores de ciberseguridad

Otro:

En la vinculación estática, todos los módulos de la biblioteca utilizados en el programa se copian en la imagen ejecutable final. Esto lo realiza el enlazador y se realiza como último paso del proceso de compilación. Esto, naturalmente, aumenta mucho el tamaño del archivo.

Tenga en cuenta que los programas que utilizan bibliotecas vinculadas estáticamente suelen ser más rápidos que los que utilizan bibliotecas compartidas. También en los programas vinculados estáticamente, todo el código está contenido en un único módulo ejecutable. Por lo tanto, nunca se encuentran con problemas de compatibilidad.

interpreter /lib/ld-linux.so.2

Este es el intérprete de ELF. Es responsable de la vinculación dinámica.

for GNU/Linux 2.6.32

2.6.32 representa la versión del kernel de Linux, y la biblioteca C vinculada con los objetivos del programa.

not stripped

Los binarios non stripped (no eliminados) contienen información de depuración. Esta información es una representación de la relación entre el programa ejecutable y el código fuente original. Incluye cosas como nombres de variables globales y estáticas y nombres de funciones.

Por otro lado, los binarios stripped carecen de esta información de depuración.

Fuente: akashtrehan.com

Escrito por Jose Rivera

Vea otras noticias interesantes:

Síganos en nuestras redes sociales

Le compartiremos contenido valicioso para que se mantenga actualizado en el campo

Nuestros cursos

CYBER401 Q2-2024 – Analista de Ciberseguridad

¡Oferta!

Conozca sobre nuestro curso de analista en Ciberseguridad y adéntrese en el mundo de los delitos informáticos y como proteger a las empresas ente los ataques

0 Comentarios

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *