it-swarm.com.de

Wie kann man feststellen, ob eine Linux-Binärdatei 32-Bit oder 64-Bit ist?

Ein 32-Bit-Kernel (x86) kann nur 32-Bit-Code ausführen. Ein 64-Bit-Kernel (x86_64) kann sowohl 32-Bit- als auch 64-Bit-Code ausführen.

Ich möchte wissen, ob ein Computer eine ausführbare Datei ausführen kann: Mit anderen Worten, ich habe eine Binärdatei und muss sie unter 32-Bit-Ubuntu ausführen, aber ich weiß nicht, ob die Binärdatei eine ausführbare 32-Bit-Datei ist .

Ich habe den Befehl file verwendet und die zu überprüfende ausführbare Datei angegeben. Dies war das zurückgegebene Ergebnis:

ELF 64-Bit-LSB-Programm, x86-64, Version 1 (SYSV), dynamisch verknüpft (verwendet gemeinsam genutzte Bibliotheken), für GNU/Linux 2.6.24, BuildID [sha1] = 0x7329fa71323a6cd64823c2594338682065cd6e07, nicht entfernt

21
enzom83

Das 5. Byte einer ausführbaren Linux-Binärdatei ( ELF-Format, siehe Wikipedia ) ist 1 für eine ausführbare 32-Bit-Datei, 2 für eine ausführbare 64-Bit-Datei.

Um dies für ein Programm mit dem Namen "foo" anzuzeigen, geben Sie in die Befehlszeile ein

od -t x1 -t c foo | head -n 2
5
Chris Maple

Wenn Sie das "Kopf" -Rohr vermeiden möchten, können Sie dies tun

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

Dies gibt 01 aus, wenn es sich bei foo um eine 32-Bit-Binärdatei handelt, und 02, wenn es sich um eine 64-Bit-Binärdatei handelt. Es enthält möglicherweise noch einige führende Leerzeichen.

Wenn dies in einem einfachen Ubuntu Docker-Container nützlich ist, in dem 'file' nicht installiert wurde.