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.
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.
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 menampilkan Open 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:
PE L
PE d†
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.
Jika Anda memiliki HEX-Editor tersedia, offset PE Signature terletak di offset 0x3C. Tanda tangan adalah PE\0\0(huruf "P" dan "E" diikuti oleh dua byte nol), diikuti oleh Tipe Mesin dua byte di Little Endian.
Nilai yang relevan 0x8664untuk dieksekusi x64 dan 0x14cuntuk 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 .
Microsoft PE and COFF Specification, yang merupakan kontrak terdokumentasi sebanyak mungkin, serta petunjuk tentang cara menemukan alamat pasti header PE dalam .exefile 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.exedengan /headersopsi menyertakan informasi ini, bandingkan keduanya (saya telah menambahkan huruf tebal untuk informasi utama)
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 file C: \ Windows \ system32 \ cmd.exe
Tanda tangan PE ditemukan
Jenis File: GAMBAR EXECUTABLE
NILAI HEADER FILE
Mesin 8664 (x64)
6 jumlah bagian
4CE798E5 cap tanggal waktu Sat 20 Nov 09:46:13 2010
0 penunjuk file ke tabel simbol
0 jumlah simbol
Ukuran header F0 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 file C: \ Windows \ syswow64 \ cmd.exe
Tanda tangan PE ditemukan
Jenis File: GAMBAR EXECUTABLE
NILAI HEADER FILE
Mesin 14C (x86)
4 jumlah bagian
Stempel tanggal waktu 4CE78E2B, Sat 20 Nov 09:00:27 2010
0 penunjuk file ke tabel simbol
0 jumlah simbol
E0 ukuran header opsional
102 karakteristik
Dapat dieksekusi
Mesin kata 32 bit
[...]
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.exedari 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 mengkonfirmasi bahwa fileutilitas (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 executable GUI, juga jelas mana yang.
MZbukan PE?
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.
maintitik 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 perintah 7z.exepada file PE (Exe atau DLL) dalam pertanyaan:
7z l some.exe | more
7z l some.exe | findstr CPU
Keluaran akan mencakup baris sebagai berikut, dengan CPUbaris yang membaca salah satu x86atau x64, yang ditanyakan 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
fileimplementasi 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".

Simply run the executableDan 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 informationpilihan memberikan selain informasi banyak membantu tentang file.


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.
Usage: file program_under_test.exe
EDIT: Baru saja menguji file.exe di jendela. bekerja dengan baik. :)
cygwinpaket dapat mengambil paket gnuwin32file .
filecukup 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 +. Bitness fileitu 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:
function Test-is64Bit {
param($FilePath=“$env:windir\notepad.exe”)
[int32]$MACHINE_OFFSET = 4
[int32]$PE_POINTER_OFFSET = 60
[byte[]]$data = New-Object -TypeName System.Byte[] -ArgumentList 4096
$stream = New-Object -TypeName System.IO.FileStream -ArgumentList ($FilePath, 'Open', 'Read')
$stream.Read($data, 0, 4096) | Out-Null
[int32]$PE_HEADER_ADDR = [System.BitConverter]::ToInt32($data, $PE_POINTER_OFFSET)
[int32]$machineUint = [System.BitConverter]::ToUInt16($data, $PE_HEADER_ADDR + $MACHINE_OFFSET)
$stream.Close()
$result = "" | select FilePath, FileType, Is64Bit
$result.FilePath = $FilePath
$result.Is64Bit = $false
switch ($machineUint)
{
0 { $result.FileType = 'Native' }
0x014c { $result.FileType = 'x86' }
0x0200 { $result.FileType = 'Itanium' }
0x8664 { $result.FileType = 'x64'; $result.is64Bit = $true; }
}
$result
}
Berikut ini contoh output:
D:\> Test-is64bit
FilePath FileType Is64Bit
-------- -------- -------
C:\Windows\notepad.exe x64 True
D:\> Test-is64bit 'C:\Program Files (x86)\Mozilla Firefox\firefox.exe'
FilePath FileType Is64Bit
-------- -------- -------
C:\Program Files (x86)\Mozilla Firefox\firefox.exe x86 False
$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:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x3
ILONLY : 1
32BITREQ : 1
32BITPREF : 0
Signed : 0
Untuk 64-bit yang dapat dieksekusi:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32+
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
Untuk executable yang dapat dijalankan sebagai 32- atau 64-bit dan akan berjalan sebagai 64-bit jika memungkinkan:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
Untuk executable yang dapat berjalan sebagai 32- atau 64-bit, tetapi akan berjalan sebagai 32-bit kecuali dimuat ke dalam proses 64-bit:
Version : v4.0.30319
CLR Header: 2.5
PE : PE32
CorFlags : 0x20003
ILONLY : 1
32BITREQ : 0
32BITPREF : 1
Signed : 0
corflags : error CF008 : The specified file does not have a valid managed header)
Anda juga dapat menggunakan filealat dari dalam bundel msys dari mingw . Ini bekerja seperti perintah unix. Serupa bekerja filealat dari GNUwin32 .
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.
Windows 8
Windows XP SP2tetapi yang lain menunjukkan sebagai Vistaatau Windows 8. Jadi metode ini tidak benar.
Buat file teks bernama exetest.reg dan berisi kode ini:
Windows Registry Editor Version 5.00
; What will appear in the contextual menu when right-clicking on a .exe file
[HKEY_CLASSES_ROOT\exefile\shell\command32_64]
@="32/64 bit test"
; What to do with it
; here, %1 is the file given as argument of the script
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
@="\"c:\\temp\\x86TestStart.bat\" \"%1\""
Buat file teks bernama x86TestStart.bathanya berisi baris kode ini dan simpan di C: \ temp:
c:\temp\x86or64.vbs %1
Buat file teks bernama x86or64.vbsmengandung kode ini dan simpan di C: \ temp:
rem Reading binary file in VBScript: http://stackoverflow.com/questions/21249440/modify-first-two-bytes-of-a-file-using-vbscript
rem Info on executables: https://dmoj.ca/problem/exe
rem x86/64 signature is located dinamycally; its position is addressed
rem from bytes in 0x3C-0x3D position.
rem Possible signatures;
rem "PE..L" (hex code: 50.45.00.00.4C) = 32 bit
rem "PE..d†" (hex code: 50.45.00.00.64.86) = 64 bit
' ------------------------------------
' Source code by Jumpkack 2015
' ------------------------------------
' Read all arguments from command line:
Set args = Wscript.Arguments
' Store first argument (full path to file)
FileName = args(0)
' Find address of executable signature:
FirstChars = readBinary(FileName)
FirstChars = FirstChars
Addr1 = asc(mid(FirstChars,61,1))
Addr2 = asc(mid(FirstChars,62,1))
AddrFinal = Addr2*256 + Addr1 + 1
' Check signature:
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "4C" then Wscript.Echo Filename & " is a 32 bit executable."
if ucase(hex(asc(mid(FirstChars,AddrFinal+4,2)))) = "64" then Wscript.Echo Filename & " is a 64 bit executable."
Function readBinary(path)
Dim a, fso, file, i, ts
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.getFile(path)
If isNull(file) Then
wscript.echo "File not found: " & path
Exit Function
End If
Set ts = file.OpenAsTextStream()
'a = makeArray(file.size)
a=""
i = 0
While (Not ts.atEndOfStream) and (i<60000)
'a(i) = ts.read(1)
a = a + ts.read(1)
i = i + 1
Wend
ts.close
readBinary = a
End Function
Klik dua kali pada file exetest.reg: kunci baru akan ditambahkan di registri windows:
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
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 VBscript x86or64.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.
Dua sen saya hanya akan mengunduh dependensi walker dan memeriksa arsitektur apa yang telah digunakan di salah satu file yang dapat dieksekusi.
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
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, .dlldll.) 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.
.DMPdump di Visual Studiodua 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 ...
Namun, WSL 's fileperintah bekerja sangat.
file /mnt/c/p/bin/rg.exe akan menghasilkan:
/mnt/c/p/bin/rg.exe: PE32+ executable (console) x86-64, for MS Windows
file /mnt/c/p/bin/u.exe akan menghasilkan:
/mnt/c/p/bin/u.exe: PE32 executable (GUI) Intel 80386, for MS Windows, UPX compressed
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'.