GNU/Linux >> Linux Esercitazione >  >> Linux

Come determinare se un file binario Linux è a 32 o 64 bit?

La risposta alla domanda nel titolo è proprio lì all'inizio dell'output:

ELF 64 bit Eseguibile LSB, x86-64

ELF è il formato eseguibile e collegabile, il formato di file eseguibile binario più comunemente utilizzato da Linux.

x86-64 è l'architettura del binario, la versione a 64 bit del set di istruzioni x86 originariamente introdotto da AMD. Per ragioni che mi sfuggono, Microsoft lo chiama "x64", ma è la stessa cosa.

Se hai bisogno di conoscere l'architettura del kernel stesso, puoi usare uname -mpi . Ad esempio, sul mio sistema, stampa:

x86_64 sconosciuto sconosciuto

il che significa che sto eseguendo un kernel x86-64.

Se sei interessato alla CPU stessa, guarda /proc/cpuinfo per i dettagli sulle CPU rilevate dal kernel Linux.

Un eseguibile 80x86 a 32 bit è identificato da file come, ad esempio:

ELF 32 bit Eseguibile LSB, Intel 80386 , versione 1 (SYSV), collegata dinamicamente (usa librerie condivise), per GNU/Linux 2.6.8, spogliata

che ci dice che è un eseguibile a 32 bit che utilizza il set di istruzioni Intel 80386 (possibilmente con estensioni).

Si noti che non è così semplice come architetture a 32 bit rispetto a 64 bit. Ad esempio, il kernel Linux supporta architetture a 32 bit come Intel 80386, AVR32, S/390 e Unicore32. Sul lato a 64 bit, Linux è utilizzabile su PA-RISC, x86-64, Itanium e Alpha, tra gli altri. Tuttavia, non tutte le distribuzioni forniscono binari per tutte le architetture (e dubito che esistano distribuzioni che prendono di mira tutte architetture CPU supportate allo stesso modo). Quindi, se vuoi sapere se un dato binario sarà eseguibile su un dato sistema, devi considerare l'architettura , piuttosto che la dimensione della parola nativa della CPU.


Il quinto byte di un file eseguibile binario Linux (formato ELF, vedi Wikipedia) è 1 per un eseguibile a 32 bit, 2 per un eseguibile a 64 bit.

Per vedere questo per un programma chiamato "foo", digita nella riga di comando

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

Se vuoi evitare il tubo di "testa", puoi farlo

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

Verrà stampato 01 se foo è un binario a 32 bit e 02 se è 64. Potrebbe comunque includere alcuni spazi iniziali:vale la pena sapere se stai effettuando confronti automatici sui risultati.

Se trovato utile in un contenitore Ubuntu Docker di base in cui 'file' non è stato installato.


Linux
  1. Come gestire le capacità dei file Linux

  2. Come rinominare un file in Linux?

  3. Come determinare se un determinato Linux è a 32 o 64 bit?

  4. Come compilare un binario a 32 bit su una macchina Linux a 64 bit con gcc/cmake

  5. Come distinguere il binario dai file di testo in Linux

Come rendere eseguibile un file in Linux

Come determinare il tipo MIME di un file in Linux

Come collegare simbolicamente un file in Linux

Come rendere eseguibile un file nel terminale Linux?

Come sapere se la versione a 32 bit o 64 bit di Linux

Come verificare il sistema Linux è a 32 o 64 bit?