GNU/Linux >> Linux の 問題 >  >> Linux

Linux バイナリ ファイルが 32 ビットか 64 ビットかを判断する方法は?

タイトルの質問に対する答えは、出力の最初にあります:

<ブロック引用>

ELF 64 ビット LSB 実行可能ファイル、x86-64

ELF は Executable and Linkable Format であり、Linux で最も一般的に使用されるバイナリ実行可能ファイル形式です。

x86-64 はバイナリのアーキテクチャであり、AMD によって最初に導入された x86 命令セットの 64 ビット バージョンです。私には理解できない理由で、Microsoft はこれを「x64」と呼んでいますが、それは同じことです。

カーネル自体のアーキテクチャを知る必要がある場合は、 uname -mpi を使用できます .たとえば、私のシステムでは次のように表示されます:

<ブロック引用>

x86_64 不明 不明

これは、x86-64 カーネルを実行していることを意味します。

CPU 自体に興味がある場合は、/proc/cpuinfo を参照してください。 Linux カーネルによって検出された CPU の詳細については、

32 ビット 80x86 実行可能ファイルは file で識別されます 例:

<ブロック引用>

ELF 32 ビット LSB 実行可能ファイル、Intel 80386 、バージョン 1 (SYSV)、動的にリンク (共有ライブラリを使用)、GNU/Linux 2.6.8 用、削除済み

これは、Intel 80386 命令セット (おそらく拡張機能付き) を使用した 32 ビット実行可能ファイルであることを示しています。

32 ビット アーキテクチャと 64 ビット アーキテクチャほど単純ではないことに注意してください。たとえば、Linux カーネルは、Intel 80386、AVR32、S/390、および Unicore32 などの 32 ビット アーキテクチャをサポートしています。 64 ビットの面では、Linux は PA-RISC、x86-64、Itanium、Alpha などで使用できます。ただし、すべてのディストリビューションがすべてのアーキテクチャのバイナリを提供しているわけではありません (すべて を対象とするディストリビューションがあるとは思えません)。 サポートされている CPU アーキテクチャも同様です)。したがって、特定のバイナリが特定のシステムで実行可能かどうかを知りたい場合は、アーキテクチャを考慮する必要があります。 、CPU のネイティブ ワード サイズではなく。


Linux バイナリ実行可能ファイル (ELF 形式、ウィキペディアを参照) の 5 番目のバイトは、32 ビット実行可能ファイルの場合は 1、64 ビット実行可能ファイルの場合は 2 です。

「foo」という名前のプログラムについてこれを確認するには、コマンド ラインで次のように入力します

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

「ヘッド」パイプを避けたい場合は、できます

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

これにより、foo が 32 ビット バイナリの場合は 01 が出力され、64 ビット バイナリの場合は 02 が出力されます。結果の自動比較を行う場合は、先頭にスペースが含まれている可能性があります。

「ファイル」がインストールされていない基本的な Ubuntu Docker コンテナーでこれが役立つことがわかった場合。


Linux
  1. Linuxでテキストファイルからバイナリを見分ける方法

  2. Linux で信頼できない実行可能ファイルを安全に実行するにはどうすればよいですか?

  3. ハードウェアと OS のビット数を確認する方法は?

  1. Linuxファイル機能を管理する方法

  2. Linuxでファイルの名前を変更するにはどうすればよいですか?

  3. 特定の Linux が 32 ビットか 64 ビットかを判別する方法は?

  1. gcc/cmake を使用して 64 ビット Linux マシンで 32 ビット バイナリをコンパイルする方法

  2. Linux 実行可能ファイル (バイナリ) を Windows exe ファイルに変換する方法は?

  3. Linuxでファイルシステムの種類を確実に判断する方法は?