Apakah ada cara mudah untuk memeriksa apakah biner 32 atau 64 bit pada Windows? Saya perlu memeriksa sebelum saya memindahkan program ke mesin 32bit dan mengalami kegagalan yang spektakuler.
windows
binary-files
32-vs-64-bit
Septagram
sumber
sumber
Jawaban:
Setelah memeriksa nilai header dari jawaban Richard , saya menemukan solusi yang cepat, mudah, dan hanya memerlukan editor teks. Bahkan notepad.exe standar Windows akan berfungsi.
Buka editor teks yang dapat dieksekusi. Anda mungkin harus menyeret-dan-jatuhkan atau menggunakan
Open...
dialog editor , karena Windows tidak menampilkanOpen with...
opsi dalam menu konteks untuk executable.Periksa karakter yang dapat dicetak pertama setelah kejadian pertama
PE
. Bagian ini kemungkinan besar akan dikelilingi oleh setidaknya beberapa spasi putih (bisa banyak), sehingga dapat dengan mudah dilakukan secara visual.Inilah yang akan Anda temukan:
x86:
x64:
Kata peringatan: menggunakan Notepad default pada file besar bisa sangat lambat, jadi lebih baik tidak menggunakannya untuk file yang lebih besar dari satu megabyte atau beberapa. Dalam kasus saya dalam waktu sekitar 30 detik untuk menampilkan file 12 MIB. Notepad ++, bagaimanapun, mampu menampilkan 120 MiB yang dapat dieksekusi hampir secara instan.
Ini adalah solusi yang mungkin berguna jika Anda perlu memeriksa file pada mesin yang tidak dapat Anda instal dengan perangkat lunak tambahan.
Informasi tambahan:
Jika Anda memiliki HEX-Editor tersedia, offset PE Signature terletak di offset
0x3C
. Tanda tangan adalahPE\0\0
(huruf "P" dan "E" diikuti oleh dua byte nol), diikuti oleh Tipe Mesin dua byte di Little Endian.Nilai yang relevan
0x8664
untuk dieksekusi x64 dan0x14c
untuk x86. Ada lebih banyak nilai yang mungkin, tetapi Anda mungkin tidak akan pernah menemukan salah satu dari ini, atau dapat menjalankan executable tersebut pada PC Windows Anda.Daftar lengkap jenis mesin, bersama dengan spesifikasi .exe lainnya dapat ditemukan di bagian Jenis Mesin Spesifikasi Microsoft PE dan COFF .
sumber
Microsoft PE and COFF Specification
, yang merupakan kontrak terdokumentasi sebanyak mungkin, serta petunjuk tentang cara menemukan alamat pasti header PE dalam.exe
file apa pun . Jika Anda memiliki sumber yang lebih andal daripada spesifikasi resmi Microsoft tentang format Microsoft yang dapat dieksekusi, saya ingin tahu apa itu.Alat SDK
dumpbin.exe
dengan/headers
opsi menyertakan informasi ini, bandingkan keduanya (saya telah menambahkan huruf tebal untuk informasi utama)dan
sumber
dumpbin /headers | findstr "machine"
sangat menyederhanakan presentasi apa yang dicari QA ...C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Jika Anda tidak memiliki atau menginginkan seluruh Windows SDK atau Visual Studio, Anda dapat menggunakan
sigcheck.exe
dari SysInternals :Keluaran:
sumber
Saya dapat mengkonfirmasi bahwa
file
utilitas (misalnya dari cygwin) akan membedakan antara executable 32- dan 64-bit. Mereka muncul sebagai berikut:Seperti yang Anda lihat, sangat jelas yang mana. Selain itu membedakan antara konsol dan executable GUI, juga jelas mana yang.
sumber
MZ
bukanPE
?Metode sederhana adalah menjalankannya (dengan asumsi Anda memercayainya) dan lihat tab proses di task manager. Proses 32bit akan menampilkan "* 32" di akhir nama proses. Jika itu bukan sesuatu yang Anda inginkan untuk dijalankan di komputer Anda, Anda dapat mencoba EXE Explorer . Ini akan menampilkan sejumlah besar info tentang executable termasuk apakah itu 32 atau 64bit.
sumber
main
titik masuk dan tidak akan dijalankan sebagai proses yang berdiri sendiri. Ada fungsi inisialisasi yang dipanggil ketika dimuat tetapi itu bukan "utama".Banyak orang memasang 7-zip yang luar biasa , dan telah menambahkan folder 7-Zip ke mereka
PATH
. 7-zip memahami format file selain ZIP dan RAR, seperti file MSI dan executable PE. Cukup gunakan baris perintah7z.exe
pada file PE (Exe atau DLL) dalam pertanyaan:Keluaran akan mencakup baris sebagai berikut, dengan
CPU
baris yang membaca salah satux86
ataux64
, yang ditanyakan di sini:sumber
file
implementasi di dalamnya?Versi 64-bit dari Proses Explorer dapat memberi tahu Anda. Cukup jalankan executable dan buka jendela properti proses. Pada tab utama ada entri yang mengatakan "Gambar: 32 Bit" atau "Gambar: 64 Bit".
sumber
Simply run the executable
Dan bagaimana jika Anda tidak ingin menjalankan program?Cara paling sederhana (saat data tidak dirahasiakan)
Saya menemukan bahwa Virustotal
File detail
adalah cara paling sederhana untuk mengetahui apakah biner adalah 32 bit atau 64 bit.The
Additional information
pilihan memberikan selain informasi banyak membantu tentang file.sumber
Metode menjalankan yang dapat dieksekusi & kemudian memeriksa dalam proses explorer atau alat serupa, memiliki beberapa kelemahan yang jelas:
Metode Dumpbin.exe dapat memecahkan tujuan mungkin.
Alternatif lain adalah menggunakan perintah file cygwin . Namun, saya belum mengujinya di windows. Ini bekerja dengan baik di Linux.
EDIT: Baru saja menguji file.exe di jendela. bekerja dengan baik. :)
sumber
cygwin
paket dapat mengambil paket gnuwin32file
.file
cukup membaca data dari disk dalam format biner dan memeriksa setiap angka ajaib yang mengidentifikasinya, membandingkannya dengan database. Program 32-bit Windows muncul sebagai PE32, dan program 64-bit dan .NET muncul sebagai PE32 +. Bitnessfile
itu sendiri benar-benar membuat perbedaan nol - baik aplikasi 32-bit dan 64-bit dapat membaca data dari disk, yang hanya itu yang dibutuhkan.Inilah solusi Powershell, tidak ada ketergantungan eksternal atau apa pun. Buka Powershell, rekatkan fungsi di sana (tekan Enter dua kali sehingga Anda kembali ke prompt), lalu gunakan seperti dalam contoh saya di bawah fungsi:
Berikut ini contoh output:
sumber
$stream.dispose();
setelah tutup? Harus melepaskan file menangani. ( stackoverflow.com/questions/1999858/… )Bahkan executable yang ditandai sebagai 32-bit dapat berjalan sebagai 64-bit jika, misalnya, ini adalah .NET yang dapat dijalankan sebagai 32- atau 64-bit. Untuk informasi lebih lanjut, lihat https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit , yang memiliki jawaban yang mengatakan bahwa Utilitas CORFLAGS dapat digunakan untuk menentukan bagaimana aplikasi .NET akan berjalan.
Output CORFLAGS.EXE
Untuk eksekusi 32-bit:
Untuk 64-bit yang dapat dieksekusi:
Untuk executable yang dapat dijalankan sebagai 32- atau 64-bit dan akan berjalan sebagai 64-bit jika memungkinkan:
Untuk executable yang dapat berjalan sebagai 32- atau 64-bit, tetapi akan berjalan sebagai 32-bit kecuali dimuat ke dalam proses 64-bit:
sumber
corflags : error CF008 : The specified file does not have a valid managed header
)Anda juga dapat menggunakan
file
alat dari dalam bundel msys dari mingw . Ini bekerja seperti perintah unix. Serupa bekerjafile
alat dari GNUwin32 .sumber
Jika Anda menggunakan Windows 7, pada Windows Explorer, klik kanan pada executable dan pilih Properties. Di jendela properti pilih tab Kompatibilitas. Jika di bawah bagian Mode Kompatibilitas Anda melihat Windows XP, ini adalah 32 bit yang dapat dieksekusi. Jika Anda melihat Windows Vista, itu 64 bit.
sumber
Windows 8
Windows XP SP2
tetapi yang lain menunjukkan sebagaiVista
atauWindows 8
. Jadi metode ini tidak benar.Cara menambahkan uji 32/64 bit ke menu konteks Anda
Buat file teks bernama exetest.reg dan berisi kode ini:
Buat file teks bernama
x86TestStart.bat
hanya berisi baris kode ini dan simpan di C: \ temp:Buat file teks bernama
x86or64.vbs
mengandung kode ini dan simpan di C: \ temp:Klik dua kali pada file exetest.reg: kunci baru akan ditambahkan di registri windows:
Ini akan muncul sebagai " uji 32/64 bit " dalam menu konteks setelah mengklik kanan pada file yang dapat dieksekusi.
Mengklik item akan menghasilkan file batch mulai
c:\\temp\\x86TestStart.bat\
, yang memulai file VBscriptx86or64.vbs
, yang membaca tanda tangan exe dan menunjukkan hasil.Jika Anda tidak dapat atau tidak ingin merusak registri, cukup salin file .vbs di bilah QuickLaunch, dan seret yang dapat dieksekusi di atasnya.
sumber
Dua sen saya hanya akan mengunduh dependensi walker dan memeriksa arsitektur apa yang telah digunakan di salah satu file yang dapat dieksekusi.
Bagaimana cara menggunakannya:
Cukup unduh aplikasi, mulai saja, klik ikon buka → cari file * .exe → pilih dan di bagian bawah setelah pemindaian refleksi selesai Anda melihat kotak dengan data di mana satu kolom memiliki detail "arsitektur" di dalamnya (x86, x64)
Buka executable dan lihat arsitektur build
sumber
Saya belum melihat ini disebutkan. Ada program penampil PE yang disebut CFF Explorer oleh NTCore , yang dapat memberikan Anda informasi ini. Itu dapat diunduh dan dijalankan sebagai portable, tetapi Anda dapat menginstalnya juga, jika Anda mau.
Klik kanan pada biner (
.exe
,.dll
dll.) Dan pilih "Buka dengan CFF Explorer". Pergi ke Nt Headers -> File Header -> Pada bidang "Karakteristik" klik "Klik di sini"Jika program 32bit, kotak centang "32 bit word machine" akan dicentang. Sebagai contoh, saya telah menginstal Notepad ++ versi 32bit seperti yang Anda lihat pada gambar di bawah ini. Kalau tidak, itu 64bit.
sumber
.DMP
dump di Visual Studiosumber
dua sen saya: sebagai pengembang C ++, dependency walker ( http://www.dependencywalker.com/ ) sangat informatif, tidak hanya menampilkan 64/32 bit, tetapi juga setiap Dll yang terlibat:
Anda dapat melihat 64 di sebelah kiri setiap nama file ...
sumber
Namun, WSL 's
file
perintah bekerja sangat.file /mnt/c/p/bin/rg.exe
akan menghasilkan:file /mnt/c/p/bin/u.exe
akan menghasilkan:sumber
Kolom platform di task manager windows 10
Windows 7 tidak memiliki kolom platform. Jadi task manager Windows 7 tidak akan menunjukkannya.
Di windows 10 memilih kolom tidak lagi di bawah 'tampilan'. Di Windows 10, ketika di tab detail, Anda klik kanan tajuk kolom lalu 'pilih kolom'. Kemudian centang kotak untuk 'platform'.
sumber