Cos'è ELF Magic?


26

Ho già visto discussioni sulla magia ELF, più recentemente i commenti in questa domanda di scambio di stack di sicurezza . L'ho già visto menzionato prima e l'ho visto nei miei log di avvio. Ma non sono sicuro di cosa si tratti.

La pagina man su elf è un po 'sopra la mia testa, dato che non faccio lingue C o di livello inferiore.

Come qualcuno che usa Linux come sistema operativo quotidiano, cos'è ELF?



13
Il titolo è più adatto per lo scambio di stack rpg.
Cthulhu,

Risposte:


37

Direttamente dalla pagina man a cui fai riferimento:

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

ELF definisce il formato binario dei file eseguibili utilizzati da Linux. Quando si richiama un eseguibile, il sistema operativo deve sapere come caricare correttamente l'eseguibile nella memoria, come risolvere le dipendenze della libreria dinamica e quindi dove saltare nell'eseguibile caricato per iniziare l'esecuzione. Il formato ELF fornisce queste informazioni. La magia ELF viene utilizzata per identificare i file ELF ed è semplicemente i primissimi byte di un file:

% 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 

Questi 16 byte identificano in modo inequivocabile un file come eseguibile ELF. Molti formati di file hanno byte "magici" che svolgono la stessa attività: identificare un tipo di file.


8
La vera magia è solo i primi quattro byte. I seguenti campi descrivono endianness, architettura della CPU e varie altre cose.
Simon Richter,

@SimonRichter che si riduce alla semantica. I primi 4 byte sono magici per l'identificazione generica di molti tipi di file, ma il richiedente ha specificato "ELF magic", che readelfriconosce addirittura 16 byte.
Casey,

2
Se vuoi diventare davvero tecnico, i primi 16 byte sono l '"identificazione" ( e_ident), di cui i primi 4 byte sono il numero magico ( EI_MAG0attraverso EI_MAG3)
Michael Mrozek

1
@slebetman Il mio uso di "magia" deriva dalle specifiche ELF: "I primi 4 byte di un file contengono un" numero magico ", identificando il file come un file oggetto ELF"
Michael Mrozek

2
"Inequivocabilmente" sta esagerando un po '. A meno che tu non sappia da dove proviene il file, tutto è solo un'ipotesi. Un file in /bin, certamente, è quasi certamente un binario ELF. Qualche file casuale che hai scaricato, però ... non c'è modo di dirlo.
cHao,

11

"Numeri magici" è il nome dato alle sequenze costanti di byte (di solito) all'inizio dei file, usato per contrassegnare quei file come di un particolare formato di file. Hanno uno scopo simile alle estensioni di file.

Vedere la voce del file jargon per ulteriori informazioni.

Ad esempio, le immagini PNG iniziano sempre con gli stessi otto byte: 137 80 78 71 13 10 26 10

Quindi i numeri magici ELF sono i byte all'inizio dei file elf che li identificano come tali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.