GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Die Antwort auf die Frage im Titel steht gleich am Anfang der Ausgabe:

ELF 64-Bit Ausführbare LSB-Datei, x86-64

ELF ist das Executable and Linkable Format, das binäre ausführbare Dateiformat, das am häufigsten von Linux verwendet wird.

x86-64 ist die Architektur der Binärdatei, der 64-Bit-Version des ursprünglich von AMD eingeführten x86-Befehlssatzes. Aus Gründen, die mir ein Rätsel sind, bezeichnet Microsoft es als "x64", aber das ist dasselbe.

Wenn Sie die Architektur des Kernels selbst kennen müssen, können Sie uname -mpi verwenden . Auf meinem System wird beispielsweise Folgendes ausgegeben:

x86_64 unbekannt unbekannt

was bedeutet, dass ich einen x86-64-Kernel verwende.

Wenn Sie an der CPU selbst interessiert sind, schauen Sie sich /proc/cpuinfo an für Einzelheiten über die CPU(s), die vom Linux-Kernel erkannt wurden.

Eine ausführbare 32-Bit-80x86-Datei wird durch file identifiziert wie zum Beispiel:

ELF 32-Bit Ausführbare LSB-Datei, Intel 80386 , Version 1 (SYSV), dynamisch gelinkt (verwendet Shared Libs), für GNU/Linux 2.6.8, entfernt

was uns sagt, dass es sich um eine ausführbare 32-Bit-Datei handelt, die den Intel 80386-Befehlssatz verwendet (möglicherweise mit Erweiterungen).

Beachten Sie, dass es nicht ganz so einfach ist wie 32-Bit-gegenüber 64-Bit-Architekturen. Beispielsweise unterstützt der Linux-Kernel 32-Bit-Architekturen wie Intel 80386, AVR32, S/390 und Unicore32. Auf der 64-Bit-Seite ist Linux unter anderem auf PA-RISC, x86-64, Itanium und Alpha verwendbar. Nicht alle Distributionen stellen jedoch Binärdateien für alle Architekturen bereit (und ich bezweifle, dass es Distributionen gibt, die auf alle abzielen unterstützte CPU-Architekturen gleichermaßen). Wenn Sie also wissen möchten, ob eine bestimmte Binärdatei auf einem bestimmten System ausführbar ist, müssen Sie die Architektur berücksichtigen , und nicht die native Wortgröße der CPU.


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 namens "foo" zu sehen, geben Sie in der Befehlszeile

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

Wenn Sie das 'Head'-Rohr vermeiden möchten, können Sie dies tun

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

Dies gibt 01 aus, wenn foo eine 32-Bit-Binärdatei ist, und 02, wenn es sich um eine 64-Bit-Binärdatei handelt. Es kann immer noch einige führende Leerzeichen enthalten - wissenswert, wenn Sie automatische Vergleiche der Ergebnisse durchführen.

Wenn dies in einem einfachen Ubuntu-Docker-Container nützlich ist, in dem „Datei“ nicht installiert wurde.


Linux
  1. Wie kann man feststellen, ob ein bestimmtes Linux 32-Bit oder 64-Bit ist?

  2. So kompilieren Sie eine 32-Bit-Binärdatei auf einem 64-Bit-Linux-Rechner mit gcc/cmake

  3. Wie konvertiert man eine ausführbare Linux-Datei (binär) in eine Windows-Exe-Datei?

  4. Wie kann ich eine nicht vertrauenswürdige ausführbare Datei sicher unter Linux ausführen?

  5. Wie kann ich den Dateisystemtyp unter Linux zuverlässig bestimmen?

Wie man eine Datei unter Linux ausführbar macht

So bestimmen Sie den MIME-Typ einer Datei in Linux

So verknüpfen Sie eine Datei unter Linux per Symlink

Wie mache ich eine Datei im Linux-Terminal ausführbar?

So erkennen Sie, ob es sich um eine 32-Bit- oder 64-Bit-Version von Linux handelt

Wie kann ich überprüfen, ob das Linux-System 32-Bit oder 64-Bit ist?