Windows'ta bir ikili bilgisayarın 32 veya 64 bit olup olmadığını denetlemenin kolay bir yolu var mı? Programı 32 bit makineye taşımadan önce kontrol etmem ve muhteşem bir arıza yaşamaya ihtiyacım var.
Windows'ta bir ikili bilgisayarın 32 veya 64 bit olup olmadığını denetlemenin kolay bir yolu var mı? Programı 32 bit makineye taşımadan önce kontrol etmem ve muhteşem bir arıza yaşamaya ihtiyacım var.
Yanıtlar:
Richard'ın cevabındaki başlık değerlerini inceledikten sonra hızlı, kolay ve sadece bir metin editörü gerektiren bir çözüm buldum. Hatta Windows 'varsayılan notepad.exe işe yarar.
Yürütülebilir dosyayı metin düzenleyicide açın. Open...
Windows Open with...
çalıştırılabilir dosyalar için bağlam menüsünde seçenek göstermediğinden, editörün iletişim kutusunu sürükleyip bırakmak veya kullanmak zorunda kalabilirsiniz .
İlk oluşumundan sonra yazdırılabilir ilk karakterleri kontrol edin PE
. Bu bölüm, en azından bir miktar boşlukla (muhtemelen çok olabilir) çevrelenmiştir, bu yüzden görsel olarak kolayca yapılabilir.
İşte bulacağınız şey:
PE L
PE d†
Uyarı kelimesi: büyük dosyalar üzerinde varsayılan Not Defteri kullanmak çok yavaş olabilir, bu yüzden bir megabayttan veya daha azından daha büyük dosyalar için kullanmayın. Benim durumumda bir 12 MiB dosyayı görüntülemek için yaklaşık 30 saniye sürdü. Notepad ++, ancak hemen hemen anında çalıştırılabilir 120 MiB görüntüleyebildi.
Bu, herhangi bir ek yazılım yükleyemediğiniz bir makinedeki dosyayı incelemeniz gerektiğinde kullanışlı olabilir.
Kullanılabilir bir HEX Düzenleyiciniz varsa, PE İmza ofseti ofsette bulunur 0x3C
. İmzası PE\0\0
("P" ve "E" harfleri ve ardından iki boş bayt), ardından Küçük Endian dilinde iki baytlık bir Makine Tipi'dir.
İlgili değerler 0x8664
x64 çalıştırılabilir ve 0x14c
x86 içindir. Çok daha olası değerler var, ancak muhtemelen bunlardan biriyle hiç karşılaşmayacaksınız veya bu tür yürütülebilir dosyaları Windows PC'nizde çalıştıramayacaksınız.
Makine türlerinin tam listesi, .exe özelliklerinin geri kalanıyla birlikte Microsoft PE ve COFF Belirtimi Makine Türleri bölümünde bulunabilir.
Microsoft PE and COFF Specification
kadar belgelenmiş bir sözleşme olan bağlantının bağlantısını ve PE başlığının tam adresini nasıl bulacağınıza ilişkin talimatları görmüş olacaktınız. herhangi bir .exe
dosyada. Microsoft'un kendi çalıştırılabilir biçimindeki Microsoft'un resmi özelliklerinden daha güvenilir bir kaynağınız varsa, bunun ne olduğunu bilmek isterim.
SDK aracı dumpbin.exe
ile /headers
seçeneğiyle bu bilgiyi, bu iki (Ben anahtar bilgiler için cesur ekledik) karşılaştırmak içerir
PS [64] E: \ # 4> dumpbin / başlıklar C: \ Windows \ system32 \ cmd.exe Microsoft (R) COFF / PE Damperli Sürüm 10.00.40219.01 Telif Hakkı (C) Microsoft Corporation. Her hakkı saklıdır. C dosyası dökümü: \ Windows \ system32 \ cmd.exe PE imzası bulundu Dosya Türü: EXECUTABLE IMAGE DOSYA BAŞLIĞI DEĞERLERİ 8664 makine (x64) 6 bölüm sayısı 4CE798E5 zaman tarihi damgası Cts Kas 20 09:46:13 2010 0 dosya işaretçisi sembol tablosuna 0 simge sayısı İsteğe bağlı başlığın F0 boyutu 22 karakteristik çalıştırılabilir Uygulama büyük (> 2GB) adresleri yönetebilir [...]
ve
PS [64] E: \ # 5> dumpbin / başlıklar C: \ Windows \ syswow64 \ cmd.exe Microsoft (R) COFF / PE Damperli Sürüm 10.00.40219.01 Telif Hakkı (C) Microsoft Corporation. Her hakkı saklıdır. C dosyası dökümü: \ Windows \ syswow64 \ cmd.exe PE imzası bulundu Dosya Türü: EXECUTABLE IMAGE DOSYA BAŞLIĞI DEĞERLERİ 14C makine (x86) 4 bölüm sayısı 4CE78E2B zaman tarihi damgası Cts Kas 20 09:00:27 2010 0 dosya işaretçisi sembol tablosuna 0 simge sayısı İsteğe bağlı başlığın E0 boyutu 102 karakteristik çalıştırılabilir 32 bit kelime makinesi [...]
dumpbin /headers | findstr "machine"
büyük ölçüde QA ... aradığını sunumunu kolaylaştırır
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Tüm Windows SDK veya Visual Studio'ya sahip değilseniz veya istemiyorsanız, sigcheck.exe
SysInternals'tan kullanabilirsiniz :
sigcheck.exe C:\Windows\Notepad.exe
Çıktı:
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
file
Yardımcı programın (örneğin, cygwin'den) 32-64 bitlik çalıştırılabilirler arasında ayrım yapabileceğini onaylayabilirim . Aşağıdaki gibi görünürler:
32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows
Gördüğünüz gibi hangisi çok açık. Ek olarak, konsol ile GUI çalıştırılabilirleri arasında ayrım yapar, hangisinin hangisi olduğu açıktır.
MZ
yerine var PE
?
Basit bir yöntem, onu çalıştırmak (buna güvendiğini varsayarak) çalıştırmak ve görev yöneticisindeki süreç sekmesine bakmaktır. 32bit işlemler işlem adının sonunda "* 32" gösterecektir. Bilgisayarınızda çalışmaya istekli olduğunuz bir şey değilse, EXE Gezgini'ni deneyebilirsiniz . 32 veya 64bit olup olmadığına dair çalıştırılabilir bilgiler hakkında bir sürü bilgi gösterecektir.
main
giriş noktasına sahip değil ve bu yüzden tek başına bir işlem olarak yürütülmeyecek. Yüklendiğinde çağrılan ancak "ana" olmayan bir başlatma işlevi vardır.
Birçok kişi mükemmel 7-zip yüklü ve kendi 7-Zip klasörü ekledi PATH
. 7-zip, MSI dosyaları ve PE çalıştırılabilir dosyaları gibi ZIP ve RAR dışındaki dosya biçimlerini anlar. Sadece 7z.exe
PE dosyasındaki (Exe veya DLL) komut satırını kullanın :
7z l some.exe | more
7z l some.exe | findstr CPU
Çıktı aşağıdaki gibi satırları da içerecektir, CPU
satırın okunmasıyla x86
veya x64
burada ne istenirse:
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
file
uygulama içeriyor mu?
Process Explorer'ın 64-bit sürümü size söyleyebilir. Çalıştırılabilir dosyayı çalıştırın ve işlemin özellikler penceresini açın. Ana sekmede "Image: 32 Bit" veya "Image: 64 Bit" yazan bir giriş var.
Simply run the executable
Peki ya programı çalıştırmak istemiyorsan ?
En basit yol (veriler gizli olmadığında)
Virustotal'ın File detail
bir ikili dosyanın 32 bit mi yoksa 64 bit mi olduğunu öğrenmenin en basit yolu olduğunu buldum.
Bu Additional information
seçenek, dosya hakkında ek bilgiler sağlar.
Bir çalıştırılabilir çalıştırma ve işlem gezginini veya benzeri bir aracı kontrol etme yönteminin bazı belirgin dezavantajları vardır:
Dumpbin.exe yöntemi muhtemelen amacı çözebilir.
Başka bir alternatif cygwin'in dosya komutunu kullanmak olacaktır . Ancak, pencerelerde test etmedim. Linux'larda iyi çalışıyor.
Usage: file program_under_test.exe
EDIT: Sadece pencerede file.exe test etti. iyi çalışıyor. :)
cygwin
Paketin tamamını kurmaktan kaçınmak isteyenler gnuwin32 file
paketini alabilirler .
file
basitçe diskteki verileri ikili formatta okur ve onları tanımlayan herhangi bir sihirli sayıyı kontrol eder ve bir veritabanını karşılaştırır. Windows'un 32-bit programları PE32 ve hem 64-bit hem de .NET programları PE32 + olarak geldi. Kendisinin bitliği file
kesinlikle sıfır fark yaratır - hem 32 bit hem de 64 bit uygulamalar diskten verileri okuyabilir, bu da ihtiyaç duyduğu şeydir.
İşte bir Powershell çözümü, dış bağımlılıklar veya başka bir şey yok. Powershell'i açın, işlevi oraya yapıştırın (isteme geri dönebilmeniz için iki kez Enter tuşuna basın), sonra işlevi aşağıdaki örneklerde yaptığım gibi kullanın:
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
}
İşte örnek çıktı:
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();
sonra ekleyebilirim ? Dosya tanıtıcıları serbest bırakmalı. ( stackoverflow.com/questions/1999858/… )
Örneğin, 32 bit olarak işaretlenen bir yürütülebilir dosya bile, 64 bit olarak çalışabilir, örneğin 32 veya 64 bit olarak çalışabilen bir .NET yürütülebilir dosyası olabilir. Daha fazla bilgi için bkz. Https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit . CORFLAGS yardımcı programı, bir .NET uygulamasının nasıl çalışacağını belirlemek için kullanılabilir.
CORFLAGS.EXE çıktısı
32 bit çalıştırılabilir için:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x3
ILONLY : 1
32BITREQ : 1
32BITPREF : 0
Signed : 0
64 bit çalıştırılabilir için:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32+
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
32 veya 64 bit olarak çalışabilen ve mümkün olduğunda 64 bit olarak çalışabilen yürütülebilir dosyalar için:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
32 veya 64 bit olarak çalışabilen ancak 64 bit bir işleme yüklenmedikçe 32 bit olarak çalışabilen yürütülebilir dosyalar için:
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
)
file
aracı ayrıca , mingw'in msys paketinden de kullanabilirsiniz . Unix komutu gibi çalışır. Benzer GNUwin32file
aracı çalışır .
Windows 7 üzerindeyseniz, bir Windows Gezgini'nde, yürütülebilir dosyayı sağ tıklayın ve Özellikler öğesini seçin. Özellikler penceresinde Uyumluluk sekmesini seçin. Uyumluluk Modu bölümünde Windows XP görüyorsanız, bu bir 32 bit çalıştırılabilir. Windows Vista'yı görürseniz, 64 bit.
Windows 8
Windows XP SP2
bazıları ise Vista
veya olarak gösterir Windows 8
. Yani bu yöntem doğru değil.
Exetest.reg adlı ve bu kodu içeren bir metin dosyası oluşturun :
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\""
x86TestStart.bat
Sadece bu kod satırını içeren bir metin dosyası oluşturun ve C: \ temp içine kaydedin:
c:\temp\x86or64.vbs %1
x86or64.vbs
Bu kodu içeren bir metin dosyası oluşturun ve C: \ temp: içine kaydedin.
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
Exetest.reg dosyasına çift tıklayın: Windows kayıt defterine yeni bir anahtar eklenecektir:
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
Çalıştırılabilir bir dosyaya sağ tıklandığında içerik menüsünde " 32/64 bit testi " olarak görünecektir .
Öğeye tıklamak, exe imzasını okuyan ve sonucu gösteren c:\\temp\\x86TestStart.bat\
VBscript dosyasını başlatan bir toplu iş dosyası başlatılmasına x86or64.vbs
neden olur.
Kayıt defterinde değişiklik yapmak istemiyorsanız veya değiştirmek istemiyorsanız, .vbs dosyasını QuickLaunch çubuğuna kopyalayın ve yürütülebilir dosyayı üzerine sürükleyin.
Benim iki kuruş bağımlılık yürüteç sadece indirme ve yürütülebilir dosya birinde mimarisinin ne için kullanıldığını kontrol edin.
Sadece basitçe uygulamayı indirin, başlatın, açık simgesine tıklayın → bir * .exe dosyası bulun → seçin ve altta yansıma taraması yapıldıktan sonra, bir sütunun içinde "mimari" ayrıntılarının bulunduğu verileri içeren bir ızgara göreceksiniz (x86, x64)
Çalıştırılabilir dosyayı açın ve yapı mimarisini görün
Bunu belirtilen görmedim. Bu bilgiyi size sağlayabilen NTCore tarafından CFF Explorer adlı bir PE görüntüleme programı var . Taşınabilir olarak indirilebilir ve çalıştırılabilir, ancak isterseniz de yükleyebilirsiniz.
İkililere ( .exe
, .dll
vb.) Sağ tıklayın ve "CFF Explorer ile aç" seçeneğini seçin. Nt Başlıklarına Git -> Dosya Başlığı -> "Özellikler" alanında "buraya tıklayın"
32bit bir program ise, "32 bit word machine" onay kutusu işaretlenecektir. Örneğin, aşağıdaki resimde gördüğünüz gibi Notbit ++ programının 32bit sürümünü kurdum. Aksi takdirde, 64bit.
.DMP
dökümü Visual Studio'da açınbenim iki kuruş: bir C ++ geliştiricisi olarak, bağımlılık yürüteç ( http://www.dependencywalker.com/ ) çok bilgi vericidir, sadece 64/32 bit görüntülememekle kalmaz, aynı zamanda dahil olan her Dll'yi gösterir:
Her dosya adının solunda 64 tane görebilirsiniz ...
Windows 10 görev yöneticisindeki platform sütunu
Windows 7'de bir platform sütunu yoktur. Yani Windows 7 görev yöneticisi göstermiyor.
Windows 10'da artık sütun seçmek artık “görünüm” altında değil. Windows 10'da, ayrıntılar sekmesinde, sütun başlığına sağ tıklayın ve ardından 'sütunları seçin'. Ardından 'platform' kutusunu işaretleyin.