क्या विंडोज पर बाइनरी 32 या 64 बिट है या नहीं यह जांचने का एक आसान तरीका है? कार्यक्रम को 32 बिट मशीन पर ले जाने और शानदार विफलता का अनुभव करने से पहले मुझे जांच करने की आवश्यकता है।
क्या विंडोज पर बाइनरी 32 या 64 बिट है या नहीं यह जांचने का एक आसान तरीका है? कार्यक्रम को 32 बिट मशीन पर ले जाने और शानदार विफलता का अनुभव करने से पहले मुझे जांच करने की आवश्यकता है।
जवाबों:
रिचर्ड के जवाब से हेडर मूल्यों की जांच करने के बाद , मैं एक समाधान के साथ आया, जो तेज, आसान है, और केवल एक पाठ संपादक की आवश्यकता है। यहां तक कि विंडोज का डिफ़ॉल्ट नोटपैड। Exe काम करेगा।
पाठ संपादक में निष्पादन योग्य खोलें। आपको संपादक के Open...
संवाद को ड्रैग-एंड-ड्रॉप या उपयोग करना पड़ सकता है , क्योंकि विंडोज़ Open with...
निष्पादनयोग्य के लिए संदर्भ मेनू में विकल्प नहीं दिखाता है ।
की पहली घटना के बाद पहले मुद्रण योग्य वर्णों की जाँच करें PE
। यह भाग कम से कम कुछ व्हाट्सएप (यह बहुत कुछ हो सकता है) से घिरा होने की संभावना है, इसलिए इसे आसानी से नेत्रहीन रूप से देखा जा सकता है।
यहाँ आप खोजने जा रहे हैं:
PE L
PE d†
चेतावनी का एक शब्द: बड़ी फ़ाइलों पर डिफ़ॉल्ट नोटपैड का उपयोग करना बहुत धीमा हो सकता है, इसलिए बेहतर है कि इसे मेगाबाइट या कुछ से बड़ी फ़ाइलों के लिए उपयोग न करें। मेरे मामले में 12 MiB फ़ाइल प्रदर्शित करने में लगभग 30 सेकंड लगे। नोटपैड ++, हालांकि, लगभग तुरंत एक 120 मिब निष्पादन योग्य प्रदर्शित करने में सक्षम था।
यदि आप किसी ऐसी मशीन पर फ़ाइल का निरीक्षण करना चाहते हैं, जिस पर आप कोई अतिरिक्त सॉफ़्टवेयर स्थापित नहीं कर सकते, तो यह समाधान उपयोगी हो सकता है।
यदि आपके पास एक हेक्स-संपादक उपलब्ध है, तो पीई हस्ताक्षर की ऑफसेट ऑफसेट पर स्थित है 0x3C
। हस्ताक्षर PE\0\0
(पत्र "पी" और "ई" दो नल बाइट्स के बाद है), इसके बाद लिटिल एंडियन में एक दो बाइट मशीन प्रकार है।
संबंधित मान 0x8664
x64 निष्पादन योग्य और 0x14c
x86 के लिए हैं। बहुत अधिक संभावित मूल्य हैं, लेकिन आप शायद इनमें से किसी का भी सामना नहीं करेंगे, या अपने विंडोज पीसी पर इस तरह के निष्पादनयोग्य को चलाने में सक्षम होंगे।
बाकी .exe विशिष्टताओं के साथ-साथ मशीन प्रकारों की पूरी सूची Microsoft PE और COFF विनिर्देश मशीन प्रकार अनुभाग में पाई जा सकती है ।
Microsoft PE and COFF Specification
, जो कि एक दस्तावेज अनुबंध जितना ही हो सकता है, साथ ही पीई हेडर का सही पता कैसे लगाएं, इस बारे में निर्देश दिए गए हैं। किसी भी .exe
फाइल में। यदि आपके पास Microsoft के स्वयं के निष्पादन योग्य प्रारूप पर Microsoft के आधिकारिक विनिर्देश की तुलना में अधिक विश्वसनीय स्रोत है, तो मुझे यह जानना अच्छा लगेगा कि वह क्या है।
विकल्प के dumpbin.exe
साथ एसडीके टूल /headers
में यह जानकारी शामिल है, इन दोनों की तुलना करें (मैंने महत्वपूर्ण जानकारी के लिए बोल्ड जोड़ा है)
PS [64] E: \ # 4> डंपबिन / हेडर C: \ Windows \ system32 \ cmd.exe Microsoft (R) COFF / PE डम्पर संस्करण 10.00.40219.01 कॉपीराइट (C) Microsoft Corporation। सभी अधिकार सुरक्षित। फ़ाइल C: \ Windows \ system32 \ cmd.exe की डंप पीई हस्ताक्षर मिला फ़ाइल प्रकार: विशिष्ट छवि फ़ाइल का प्रमुख मूल्य 8664 मशीन (x64) 6 वर्गों की संख्या 4CE798E5 समय की तारीख स्टाम्प सत 20 नवंबर 09:46:13 2010 प्रतीक तालिका के लिए 0 फ़ाइल सूचक प्रतीकों की संख्या वैकल्पिक हेडर का F0 आकार 22 विशेषताएँ निष्पादन एप्लिकेशन बड़े (> 2GB) पते को संभाल सकता है [...]
तथा
PS [64] E: \ # 5> डंपबिन / हेडर C: \ Windows \ syswow64 \ cmd.exe Microsoft (R) COFF / PE डम्पर संस्करण 10.00.40219.01 कॉपीराइट (C) Microsoft Corporation। सभी अधिकार सुरक्षित। फ़ाइल C: \ Windows \ syswow64 \ cmd.exe की डंप पीई हस्ताक्षर मिला फ़ाइल प्रकार: विशिष्ट छवि फ़ाइल का प्रमुख मूल्य 14C मशीन (x86) 4 वर्गों की संख्या 4CE78E2B टाइम डेट स्टैम्प Sat Nov 20 09:00:27 2010 प्रतीक तालिका के लिए 0 फ़ाइल सूचक प्रतीकों की संख्या वैकल्पिक हेडर का E0 आकार 102 विशेषताएँ निष्पादन 32 बिट वर्ड मशीन [...]
dumpbin /headers | findstr "machine"
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
यदि आपके पास संपूर्ण Windows SDK या Visual Studio नहीं है, तो आप sigcheck.exe
SysInternals से उपयोग कर सकते हैं :
sigcheck.exe C:\Windows\Notepad.exe
आउटपुट:
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
उपयोगिता (जैसे कि साइबरविन से) 32- और 64-बिट निष्पादन योग्य के बीच अंतर करेगी। वे इस प्रकार दिखाई देते हैं:
32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows
जैसा कि आप देख सकते हैं, यह बहुत स्पष्ट है जो कि है। इसके अतिरिक्त यह कंसोल और जीयूआई निष्पादन के बीच अंतर करता है, यह भी स्पष्ट है कि कौन सा है।
MZ
बजाय निष्पादन योग्य फाइलें क्यों हैं PE
?
एक सरल विधि यह है कि आप इसे चलाएं (यह मानते हुए कि आप इस पर विश्वास करते हैं) और कार्य प्रबंधक में प्रक्रिया टैब पर एक नज़र डालें। 32bit प्रक्रियाएं प्रक्रिया नाम के अंत में "* 32" दिखाएंगी। यदि यह आपके कंप्यूटर पर चलने के लिए आपकी इच्छा से कुछ नहीं है, तो आप EXE एक्सप्लोरर की कोशिश कर सकते हैं । यदि यह 32 या 64 बिट है, तो यह निष्पादनयोग्य पर जानकारी का एक पूरा गुच्छा दिखाएगा।
main
प्रवेश बिंदु नहीं है और इसलिए एक स्टैंड अलोन प्रक्रिया के रूप में निष्पादित नहीं होगा। जब इसे लोड किया जाता है तो एक इनिशियलाइज़ेशन फंक्शन होता है, लेकिन यह "मुख्य" नहीं होता है।
कई लोगों के पास उत्कृष्ट 7-ज़िप स्थापित है, और उनके लिए 7-ज़िप फ़ोल्डर जोड़ा है PATH
। 7-ज़िप ज़िप और RAR के अलावा अन्य फ़ाइल स्वरूपों को समझता है, जैसे MSI फ़ाइलें और PE निष्पादक। केवल 7z.exe
प्रश्न में PE फ़ाइल (Exe या DLL) पर कमांड लाइन का उपयोग करें :
7z l some.exe | more
7z l some.exe | findstr CPU
आउटपुट में निम्नानुसार लाइनें शामिल होंगी, या CPU
तो लाइन पढ़ने के साथ x86
या x64
, जो कि यहां पूछा जा रहा है:
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
कार्यान्वयन शामिल है ?
प्रक्रिया एक्सप्लोरर का 64-बिट संस्करण आपको बता सकता है। बस निष्पादन योग्य चलाएं और प्रक्रिया के गुणों की खिड़की खोलें। मुख्य टैब पर एक प्रविष्टि है जो "छवि: 32 बिट" या "छवि: 64 बिट" कहती है।
Simply run the executable
और अगर आप कार्यक्रम नहीं चलाना चाहते हैं तो क्या होगा ?
सबसे सरल तरीका (जब डेटा गोपनीय नहीं है)
मुझे लगता है कि विरुस्टोटल File detail
यह पता लगाने का सबसे सरल तरीका है कि क्या बाइनरी 32 बिट या 64 बिट है।
Additional information
विकल्प के अलावा फ़ाइल के बारे में ज्यादा उपयोगी जानकारियां में प्रदान करता है।
एक निष्पादन योग्य और फिर प्रक्रिया एक्सप्लोरर या इसी तरह के उपकरण में जांच करने की विधि में कुछ स्पष्ट कमियां हैं:
Dumpbin.exe विधि संभवतः उद्देश्य को हल कर सकती है।
एक अन्य विकल्प यह होगा कि साइबरविन की फाइल कमांड का उपयोग किया जाए । हालांकि, मैंने इसे खिड़कियों पर परीक्षण नहीं किया है। यह लिनक्स पर अच्छा काम करता है।
Usage: file program_under_test.exe
संपादित करें: बस खिड़की पर file.exe का परीक्षण किया। ठीक काम करता है। :)
cygwin
पैकेज को स्थापित करने से बचना चाहते हैं, वे gnuwin32 file
पैकेज को हड़प सकते हैं ।
file
बस द्विआधारी प्रारूप में डिस्क से डेटा पढ़ता है और किसी भी जादुई संख्या के लिए जाँच करता है, जो डेटाबेस की तुलना में उनकी पहचान करता है। विंडोज के 32-बिट प्रोग्राम PE32 के रूप में आते हैं, और 64-बिट और .NET प्रोग्राम दोनों PE32 + के रूप में आते हैं। file
स्वयं की बिटनेस बिल्कुल शून्य अंतर बनाती है - दोनों 32-बिट और 64-बिट एप्लिकेशन डिस्क से डेटा पढ़ सकते हैं, जो कि इसकी सभी आवश्यकताएं हैं।
यहाँ एक Powershell समाधान, कोई बाहरी निर्भरता या कुछ भी नहीं है। पॉवर्सशेल खोलें, फ़ंक्शन को वहां पेस्ट करें (दो बार दर्ज करें ताकि आप शीघ्र वापस आ जाएं), फिर फ़ंक्शन के नीचे मेरे उदाहरण में इसका उपयोग करें:
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
}
यहाँ उदाहरण आउटपुट है:
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();
बंद करने के बाद जोड़ सकते हैं ? फ़ाइल हैंडल रिलीज़ करना चाहिए। ( stackoverflow.com/questions/1999858/… )
यहां तक कि 32-बिट के रूप में एक निष्पादन योग्य 64-बिट के रूप में चल सकता है, उदाहरण के लिए, यह एक .NET निष्पादन योग्य है जो 32- या 64-बिट के रूप में चल सकता है। अधिक जानकारी के लिए देखें https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit , जिसमें एक उत्तर है जो कहता है कि .NET अनुप्रयोग कैसे चलेगा, यह निर्धारित करने के लिए CORFLAGS उपयोगिता का उपयोग किया जा सकता है।
CORFLAGS.EXE आउटपुट
32-बिट निष्पादन योग्य के लिए:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x3
ILONLY : 1
32BITREQ : 1
32BITPREF : 0
Signed : 0
64-बिट निष्पादन योग्य के लिए:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32+
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
निष्पादन योग्य के लिए जो 32- या 64-बिट के रूप में चल सकता है और जब संभव हो 64-बिट के रूप में चलेगा:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 0x1
ILONLY : 1
32BITREQ : 0
32BITPREF : 0
Signed : 0
निष्पादन योग्य के लिए जो 32- या 64-बिट के रूप में चल सकता है, लेकिन 32-बिट के रूप में चलेगा जब तक कि 64-बिट प्रक्रिया में लोड न हो जाए:
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
)
आप mingwfile
के msys बंडल के भीतर से भी टूल का उपयोग कर सकते हैं । यह यूनिक्स कमांड की तरह काम करता है। इसी तरह के file
उपकरण GNUwin32 से काम करता है ।
यदि आप विंडोज 7 पर हैं, तो विंडोज एक्सप्लोरर पर, निष्पादन योग्य पर क्लिक करें और गुण चुनें। गुण विंडो पर संगतता टैब का चयन करें। यदि संगतता मोड अनुभाग के अंतर्गत आप Windows XP देखते हैं, तो यह एक 32 बिट निष्पादन योग्य है। यदि आप विंडोज विस्टा देखते हैं, तो यह 64 बिट है।
Windows 8
Windows XP SP2
लेकिन अन्य के रूप में Vista
या के रूप में दिखाते हैं Windows 8
। इसलिए यह तरीका सही नहीं है।
Exetest.reg नाम की एक टेक्स्ट फ़ाइल बनाएं और इस कोड को शामिल करें:
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
केवल कोड की इस पंक्ति वाली एक टेक्स्ट फ़ाइल बनाएं और इसे C: \ temp में सहेजें:
c:\temp\x86or64.vbs %1
x86or64.vbs
इस कोड वाली एक टेक्स्ट फ़ाइल बनाएं और इसे 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
Exetest.reg फ़ाइल पर डबल क्लिक करें: विंडोज़ रजिस्ट्री में एक नई कुंजी जोड़ी जाएगी:
[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]
यह निष्पादन योग्य फ़ाइल पर राइट क्लिक करने पर संदर्भ मेनू में " 32/64 बिट टेस्ट " के रूप में दिखाई देगा ।
आइटम पर क्लिक करने से बैच फ़ाइल शुरू हो जाएगी c:\\temp\\x86TestStart.bat\
, जिसमें VBscript फ़ाइल शुरू होती है x86or64.vbs
, जो exe हस्ताक्षर पढ़ती है और परिणाम दिखाती है।
यदि आप रजिस्ट्री से छेड़छाड़ नहीं कर सकते हैं या नहीं करना चाहते हैं, तो बस QuickLaunch बार में .vbs फ़ाइल की प्रतिलिपि बनाएँ, और उस पर निष्पादन योग्य खींचें।
मेरे दो सेंट सिर्फ निर्भरता वॉकर डाउनलोड करेंगे और जांच करेंगे कि निष्पादन योग्य फ़ाइल में से एक में आर्किटेक्चर के लिए क्या उपयोग किया गया है।
बस केवल ऐप डाउनलोड करें, इसे शुरू करें, खुले आइकन पर क्लिक करें → एक * .exe फ़ाइल ढूंढें → चयन करें और नीचे पर प्रतिबिंब स्कैन के बाद आपको डेटा के साथ एक ग्रिड दिखाई देता है जहां एक कॉलम में "वास्तुकला" विवरण है (x86): 64)
निष्पादन योग्य खोलें और बिल्ड आर्किटेक्चर देखें
मैंने यह उल्लेख नहीं देखा है। NTCore द्वारा CFF एक्सप्लोरर नामक एक पीई दर्शक कार्यक्रम है , जो आपको यह जानकारी प्रदान कर सकता है। इसे डाउनलोड किया जा सकता है और पोर्टेबल के रूप में चलाया जा सकता है, लेकिन आप चाहें तो इसे इंस्टॉल कर सकते हैं।
राइट बाइनरी (पर क्लिक करें .exe
, .dll
आदि) और "CFF एक्सप्लोरर के साथ खोलें"। Nt Headers पर जाएं -> फ़ाइल हैडर -> "विशेषताओं" फ़ील्ड पर "यहां क्लिक करें" पर क्लिक करें।
यदि यह एक 32 बिट प्रोग्राम है, तो चेकबॉक्स "32 बिट वर्ड मशीन" टिक जाएगा। उदाहरण के लिए, मैंने नोटपैड ++ का 32 बिट संस्करण स्थापित किया है जैसा कि आप नीचे दी गई छवि में देख सकते हैं। अन्यथा, यह 64 बिट है।
.DMP
विज़ुअल स्टूडियो में डंप खोलेंमेरे दो सेंट: एक सी ++ डेवलपर के रूप में, निर्भरता वॉकर ( http: //www.d dependencywalker.com/) बहुत जानकारीपूर्ण है, न केवल 64/32 बिट्स प्रदर्शित करता है, बल्कि प्रत्येक Dll में भी शामिल है:
आप हर फ़ाइल नाम के बाईं ओर 64 देख सकते हैं ...
विंडोज़ 10 के टास्क मैनेजर में प्लेटफॉर्म कॉलम
विंडोज 7 में प्लेटफॉर्म कॉलम नहीं है। इसलिए विंडोज 7 टास्क मैनेजर इसे नहीं दिखाएगा।
विंडोज़ 10 में कॉलम चुनना अब 'दृश्य' के तहत नहीं है। विंडोज 10 में, जब विवरण टैब में, आप कॉलम हेडर पर राइट क्लिक करते हैं तो 'कॉलम चुनें'। फिर 'प्लेटफ़ॉर्म' के लिए बॉक्स चेक करें।