GNU/Linux >> Belajar Linux >  >> Linux

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

Jawaban atas pertanyaan di judul ada di awal output:

ELF 64-bit LSB dapat dieksekusi, x86-64

ELF adalah Format yang Dapat Dieksekusi dan Dapat Ditautkan, 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 tidak saya ketahui, Microsoft menyebutnya sebagai "x64", tetapi itu adalah hal yang sama.

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

x86_64 tidak diketahui tidak diketahui

yang berarti saya menjalankan kernel x86-64.

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

Eksekusi 32-bit 80x86 diidentifikasi oleh file sebagai, misalnya:

ELF 32-bit Dapat dieksekusi LSB, Intel 80386 , versi 1 (SYSV), ditautkan secara dinamis (menggunakan lib bersama), untuk GNU/Linux 2.6.8, dihapus

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

Perhatikan bahwa ini tidak sesederhana arsitektur 32-bit versus 64-bit. Misalnya, 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 mendukung arsitektur CPU secara merata). Jadi, jika Anda ingin mengetahui apakah biner tertentu dapat dieksekusi pada sistem tertentu, Anda perlu mempertimbangkan arsitektur , bukan ukuran kata asli CPU.


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

Untuk melihat program bernama "foo", ketik di baris perintah

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

Jika Anda ingin menghindari pipa 'kepala', Anda dapat 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 mungkin masih menyertakan beberapa spasi awal - perlu diketahui jika Anda melakukan perbandingan otomatis pada hasilnya.

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


Linux
  1. Bagaimana Mengganti Nama File di Linux?

  2. Bagaimana membedakan biner dari file teks di linux

  3. Bagaimana cara mengubah file yang dapat dieksekusi linux (biner) ke file windows exe?

  1. Bagaimana Mengelola Kemampuan File Linux

  2. Bagaimana cara menentukan apakah Linux yang diberikan adalah 32 bit atau 64 bit?

  3. Bagaimana cara menentukan bitness perangkat keras dan OS?

  1. Cara mengkompilasi biner 32-bit pada mesin linux 64-bit dengan gcc/cmake

  2. Bagaimana saya bisa menjalankan executable yang tidak dipercaya di linux dengan aman?

  3. Bagaimana cara menentukan tipe sistem file dengan andal di Linux?