¿Qué es la magia ELF?


26

He visto una discusión antes sobre la magia ELF, más recientemente los comentarios en esta pregunta de intercambio de la pila de seguridad . Lo he visto mencionado antes, y lo he visto en mis propios registros de arranque ... Pero no estoy seguro de qué es.

La página de manual de elf está un poco sobre mi cabeza, ya que no hago C ni lenguajes de nivel inferior.

Como alguien que usa Linux como sistema operativo todos los días, ¿qué es ELF?



13
El título es más adecuado para rpg stackexchange.
Cthulhu

Respuestas:


37

Desde la página del manual al que hace referencia:

elf - format of Executable and Linking Format (ELF) files

ELF define el formato binario de los archivos ejecutables utilizados por Linux. Cuando invoca un ejecutable, el sistema operativo debe saber cómo cargar el ejecutable en la memoria correctamente, cómo resolver las dependencias de la biblioteca dinámica y luego dónde saltar al ejecutable cargado para comenzar a ejecutarlo. El formato ELF proporciona esta información. ELF magic se usa para identificar archivos ELF y son simplemente los primeros bytes de un archivo:

% od -c -N 16 /bin/ls
0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020

o

% readelf -h /bin/ls | grep Magic
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 

Estos 16 bytes identifican inequívocamente un archivo como un ejecutable ELF. Muchos formatos de archivo tienen bytes "mágicos" que realizan la misma tarea: identificar un tipo de archivo.


8
La magia real es solo los primeros cuatro bytes. Los siguientes campos describen endianness, arquitectura de CPU y varias otras cosas.
Simon Richter

@SimonRichter que se reduce a la semántica. Los primeros 4 bytes son mágicos para la identificación genérica de muchos tipos de archivos, pero el autor de la pregunta especificó "ELF magic", que incluso readelfreconoce que son 16 bytes.
Casey

2
Si desea ser realmente técnico, los primeros 16 bytes son la "identificación" ( e_ident), de los cuales los primeros 4 bytes son el número mágico (a EI_MAG0través EI_MAG3)
Michael Mrozek

1
@slebetman Mi uso de "magia" proviene de la especificación ELF: "Los primeros 4 bytes de un archivo contienen un 'número mágico' que identifica el archivo como un archivo objeto ELF"
Michael Mrozek

2
"Sin ambigüedades" está exagerando un poquito. A menos que sepa de dónde vino el archivo, cualquier cosa es solo una suposición. Un archivo /bin, seguro, es casi seguro que es un binario ELF. Sin embargo, algunos archivos aleatorios que descargaste ... no se sabe.
cHao

11

"Números mágicos" es el nombre dado a las secuencias constantes de bytes (generalmente) al comienzo de los archivos, que se utilizan para marcar esos archivos como de un formato de archivo particular. Sirven un propósito similar a las extensiones de archivo.

Consulte la entrada del archivo de jerga para obtener más información.

Por ejemplo, las imágenes PNG siempre comienzan con los mismos ocho bytes: 137 80 78 71 13 10 26 10

Por lo tanto, los números mágicos de ELF son los bytes al comienzo de los archivos de elfos que los identifican como tales.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.