Bagaimana cara menentukan apakah file biner linux 32-bit atau 64-bit?


24

Kernel 32-bit (x86) hanya dapat menjalankan kode 32-bit. Kernel 64-bit (x86_64) dapat menjalankan kode 32-bit dan 64-bit.

Saya ingin tahu apakah sebuah mesin dapat menjalankan file yang dapat dieksekusi: dengan kata lain, saya memiliki file biner dan saya harus menjalankannya di Ubuntu 32-bit, tetapi saya tidak tahu apakah file biner tersebut dapat dieksekusi 32-bit .

Saya menggunakan fileperintah, menentukan yang dapat dieksekusi untuk diperiksa dan ini adalah hasil yang dikembalikan:

ELF 64-bit LSB yang dapat dieksekusi, x86-64, versi 1 (SYSV), terhubung secara dinamis (menggunakan shared libs), untuk GNU / Linux 2.6.24, BuildID [sha1] = 0x7329fa71323a6cd64823c2594338682065cd6e07, tidak dilucuti

Jawaban:


29

Jawaban atas pertanyaan dalam judul ada di sana di awal output:

ELF 64-bit LSB dapat dieksekusi, x86-64

ELF adalah Format yang Dapat Dieksekusi dan Dapat Dihubungkan , format file yang dapat dieksekusi biner yang paling umum digunakan oleh Linux.

x86-64 adalah arsitektur biner, versi 64-bit dari set instruksi x86 yang awalnya diperkenalkan oleh AMD . Untuk alasan yang di luar jangkauan saya, Microsoft menyebutnya sebagai "x64", tetapi itu adalah hal yang sama.

Jika Anda perlu mengetahui arsitektur kernel itu sendiri, Anda dapat menggunakannya uname -mpi. Misalnya, di sistem saya, yang mencetak:

x86_64 tidak dikenal tidak dikenal

yang berarti saya menjalankan kernel x86-64.

Jika Anda tertarik dengan CPU itu sendiri, lihat /proc/cpuinfodetail tentang CPU yang terdeteksi oleh kernel Linux.

Eksekusi 32-bit 80x86 diidentifikasi oleh filesebagai, misalnya:

ELF 32-bit LSB yang dapat dieksekusi, Intel 80386 , versi 1 (SYSV), terhubung secara dinamis (menggunakan shared libs), untuk GNU / Linux 2.6.8, dilucuti

yang memberitahu kita bahwa itu adalah 32-bit yang dapat dieksekusi menggunakan set instruksi Intel 80386 (mungkin dengan ekstensi).

Perhatikan bahwa itu tidak sesederhana arsitektur 32-bit versus 64-bit. Sebagai contoh, kernel Linux mendukung arsitektur 32-bit seperti Intel 80386, AVR32 , S / 390 dan Unicore32 . Di sisi 64-bit, Linux dapat digunakan di PA-RISC , x86-64, Itanium dan Alpha , antara lain. Namun, tidak semua distribusi menyediakan binari untuk semua arsitektur (dan saya ragu ada distribusi yang menargetkan semua arsitektur CPU yang didukung secara merata). Jadi jika Anda ingin tahu apakah biner yang diberikan akan dapat dieksekusi pada sistem yang diberikan, Anda perlu mempertimbangkan arsitekturnya , daripada ukuran kata asli CPU.


1
"Alasan yang ada di luar saya". Saya masih ingat pada hari saya mengetahui bahwa x64 adalah 64 bit dan x86 adalah 32 bit.
Paul Draper

1
@PaulDraper Istilah "x86" memiliki etimologi yang jelas; tanggal kembali ke seri 80x86 CPU dari Intel, membedakan mereka dari pendahulunya seperti 8008 atau 8080, dan hari-hari ini paling sering mengacu pada varian yang mampu 32-bit (set instruksi IA-32) varian yang mampu (80386, 80486, Pentium dan yang lebih baru ). Nomor model yang lebih baru ini sering disingkat dengan menghilangkan "80" di awal, jadi (tersirat 32-bit) cocok dengan 386, 486, dll. Namun, saya tidak mengetahui adanya CPU 64-bit dengan nomor model dari struktur serupa yang berakhiran "64"; tentu saja AMD maupun Intel tidak menggunakan skema penamaan seperti saat ini.
CVn

Padahal x64 adalah istilah yang sangat umum. Contoh acak: microsoft.com/en-us/download/details.aspx?id=42482
Paul Draper

@PaulDraper Ini umum sekarang di dunia Microsoft, namun etimologi masih belum jelas dengan cara yang itu untuk "x86" tidak.
CVn

Microsoft menyebut x86_64 sebagai AMD64 dalam installer mereka
phuclv

7

Byte ke-5 dari file executable biner Linux ( format ELF, lihat Wikipedia ) adalah 1 untuk executable 32 bit, 2 untuk executable 64 bit.

Untuk melihat ini untuk program bernama "foo", ketikkan pada baris perintah

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

2

Jika Anda ingin menghindari pipa 'kepala', Anda bisa melakukannya

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

Ini akan mencetak 01 jika foo adalah biner 32-bit dan 02 jika 64. Ini masih termasuk beberapa ruang terdepan - perlu diketahui jika Anda melakukan perbandingan otomatis pada hasilnya.

Jika ini berguna dalam wadah dasar Docker Ubuntu di mana 'file' tidak diinstal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.