Apakah ada cara mudah untuk memeriksa apakah biner adalah 32 atau 64 bit di Windows? Saya harus memeriksa sebelum saya memindahkan program ke mesin 32-bit dan mengalami kegagalan spektakuler.
Apakah ada cara mudah untuk memeriksa apakah biner adalah 32 atau 64 bit di Windows? Saya harus memeriksa sebelum saya memindahkan program ke mesin 32-bit dan mengalami kegagalan spektakuler.
Setelah memeriksa nilai header dari Jawaban Richard, Saya menemukan solusi yang cepat, mudah, dan hanya membutuhkan editor teks. Bahkan notepad.exe bawaan Windows 'akan berfungsi.
Buka executable di editor teks. Anda mungkin harus drag-and-drop atau gunakan
editornya Open...
dialog, karena Windows tidak muncul Open with...
pilihan dalam menu konteks untuk executable.
Periksa karakter yang dapat dicetak pertama setelah kemunculan pertama PE
. Bagian ini kemungkinan besar dikelilingi oleh setidaknya beberapa spasi (bisa banyak), sehingga dapat dengan mudah dilakukan secara visual.
Inilah yang akan Anda temukan:
PE L
PE d†
Sebuah 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 sedikit. Dalam kasus saya membutuhkan waktu sekitar 30 detik untuk menampilkan file 12 MiB. Notepad ++, bagaimanapun, mampu menampilkan 120 MiB yang dapat dieksekusi hampir seketika.
Ini adalah solusi yang mungkin berguna jika Anda perlu memeriksa file pada mesin Anda tidak dapat menginstal perangkat lunak tambahan.
Jika Anda memiliki Editor-HEX tersedia, offset PE Signature terletak pada offset 0x3C
. Tanda tangan itu PE\0\0
(huruf "P" dan "E" diikuti oleh dua byte nol), diikuti oleh Jenis Mesin dua byte di Little Endian.
Nilai yang relevan adalah 0x8664
untuk x64 dapat dieksekusi dan 0x14c
untuk x86. Ada lebih banyak kemungkinan nilai, tetapi Anda mungkin tidak akan pernah menemukan ini, atau dapat menjalankan executable tersebut pada PC Windows Anda.
Daftar lengkap jenis mesin, bersama dengan sisa spesifikasi .exe dapat ditemukan di Spesifikasi Microsoft PE dan COFF Jenis Mesin bagian.
Alat SDK dumpbin.exe
dengan /headers
pilihan mencakup informasi ini, bandingkan kedua (saya telah menambahkan tebal untuk informasi kunci)
PS [64] E: \ # 4> dumpbin / header C: \ Windows \ system32 \ cmd.exe Microsoft (R) COFF / PE Dumper Versi 10.00.40219.01 Hak Cipta (C) Microsoft Corporation. Seluruh hak cipta. Dump dari file C: \ Windows \ system32 \ cmd.exe Tanda tangan PE ditemukan Jenis File: EXECUTABLE IMAGE FILE HEADER VALUES Mesin 8664 (x64) 6 jumlah bagian Cap tanggal waktu 4CE798E5 Sat Nov 20 09:46:13 2010 0 file pointer ke tabel simbol 0 jumlah simbol Ukuran f0 dari header opsional 22 karakteristik Dapat dieksekusi Aplikasi dapat menangani alamat besar (> 2GB) [...]
dan
PS [64] E: \ # 5> dumpbin / header C: \ Windows \ syswow64 \ cmd.exe Microsoft (R) COFF / PE Dumper Versi 10.00.40219.01 Hak Cipta (C) Microsoft Corporation. Seluruh hak cipta. Dump dari file C: \ Windows \ syswow64 \ cmd.exe Tanda tangan PE ditemukan Jenis File: EXECUTABLE IMAGE FILE HEADER VALUES Mesin 14C (x86) 4 jumlah bagian Cap tanggal waktu 4CE78E2B Sat Nov 20 09:00:27 2010 0 file pointer ke tabel simbol 0 jumlah simbol Ukuran E0 dari header opsional 102 karakteristik Dapat dieksekusi Mesin 32 bit kata [...]
Jika Anda tidak memiliki atau menginginkan seluruh Windows SDK atau Visual Studio, Anda dapat menggunakan sigcheck.exe
dari SysInternals:
sigcheck.exe C:\Windows\Notepad.exe
Keluaran:
Sigcheck v2.1 - File version and signature viewer
Copyright (C) 2004-2014 Mark Russinovich
Sysinternals - www.sysinternals.com
c:\windows\notepad.exe:
Verified: Signed
Signing date: 8:59 AM 8/22/2013
Publisher: Microsoft Windows
Description: Notepad
Product: Microsoft« Windows« Operating System
Prod version: 6.3.9600.16384
File version: 6.3.9600.16384 (winblue_rtm.130821-1623)
MachineType: 64-bit
Saya dapat mengonfirmasi bahwa file
utilitas (misalnya dari cygwin) akan membedakan antara executable 32- dan 64-bit. Mereka muncul sebagai berikut:
32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows
Seperti yang Anda lihat, sangat jelas yang mana. Selain itu membedakan antara konsol dan GUI executable, juga jelas yang mana.
Metode sederhana adalah menjalankannya (dengan asumsi Anda memercayainya) dan melihat tab proses di task manager. Proses 32bit akan menampilkan "* 32" di akhir nama proses. Jika itu bukan sesuatu yang ingin Anda jalankan di komputer Anda, Anda dapat mencoba EXE Explorer. Ini akan menunjukkan sejumlah besar info tentang executable termasuk apakah itu 32 atau 64bit.
Versi 64-bit dari Process Explorer dapat memberitahu Anda. Cukup jalankan file eksekusi dan buka jendela properti proses. Pada tab utama ada entri yang mengatakan "Gambar: 32 Bit" atau "Gambar: 64 Bit".
Banyak orang memiliki yang luar biasa 7-zip diinstal, dan telah menambahkan folder 7-Zip ke folder mereka PATH
. 7-zip memahami format file selain ZIP dan RAR, seperti file MSI dan eksekutabel PE. Cukup gunakan baris perintah 7z.exe
pada file PE (Exe atau DLL) yang dimaksud:
7z l some.exe | more
7z l some.exe | findstr CPU
Output akan menyertakan garis sebagai berikut, dengan CPU
membaca garis baik x86
atau x64
, yang diminta di sini:
Path = C:\Extra\AV\neroAacEnc.exe
Type = PE
CPU = x86
Characteristics = Executable 32-bit
Path = C:\Extra\AV\LAME\lame_enc.dll
Type = PE
CPU = x86
Characteristics = Executable DLL 32-bit
Path = C:\Extra\AV\FFmpeg\bin\ffmpeg.exe
Type = PE
CPU = x64
64-bit = +
Characteristics = Executable LargeAddress NoRelocs NoLineNums NoLocalSyms NoDebugInfo
Path = C:\Extra\AV\FFmpeg\bin\avcodec-56.dll
Type = PE
CPU = x64
64-bit = +
Characteristics = Executable DLL LargeAddress NoLineNums NoLocalSyms NoDebugInfo
Metode menjalankan eksekusi & kemudian memeriksa proses explorer atau alat serupa, memiliki beberapa kelemahan yang jelas:
Metode Dumpbin.exe dapat memecahkan tujuan mungkin.
Alternatif lain adalah menggunakan cygwin mengajukan perintah. Namun, saya belum mengujinya di windows. Ini bekerja dengan baik di Linux.
Usage: file program_under_test.exe
EDIT: Hanya diuji file.exe di jendela. bekerja dengan baik. :)