विंडोज पर बाइनरी 32 या 64 बिट है तो कैसे जांचें?


319

क्या विंडोज पर बाइनरी 32 या 64 बिट है या नहीं यह जांचने का एक आसान तरीका है? कार्यक्रम को 32 बिट मशीन पर ले जाने और शानदार विफलता का अनुभव करने से पहले मुझे जांच करने की आवश्यकता है।


यह सवाल समान है , हालांकि इसे जांचने के लिए कुछ काम करने की आवश्यकता है।
ST3

3
@ गिलूम: निष्पादन योग्य चित्र प्रक्रियाएं नहीं हैं। टास्क मैनेजर केवल प्रक्रियाओं को दिखाता है।
IInspectable

जवाबों:


346

रिचर्ड के जवाब से हेडर मूल्यों की जांच करने के बाद , मैं एक समाधान के साथ आया, जो तेज, आसान है, और केवल एक पाठ संपादक की आवश्यकता है। यहां तक ​​कि विंडोज का डिफ़ॉल्ट नोटपैड। Exe काम करेगा।

  1. पाठ संपादक में निष्पादन योग्य खोलें। आपको संपादक के Open...संवाद को ड्रैग-एंड-ड्रॉप या उपयोग करना पड़ सकता है , क्योंकि विंडोज़ Open with...निष्पादनयोग्य के लिए संदर्भ मेनू में विकल्प नहीं दिखाता है ।

  2. की पहली घटना के बाद पहले मुद्रण योग्य वर्णों की जाँच करें PE। यह भाग कम से कम कुछ व्हाट्सएप (यह बहुत कुछ हो सकता है) से घिरा होने की संभावना है, इसलिए इसे आसानी से नेत्रहीन रूप से देखा जा सकता है।

यहाँ आप खोजने जा रहे हैं:

86:

PE  L

64:

PE  d†

चेतावनी का एक शब्द: बड़ी फ़ाइलों पर डिफ़ॉल्ट नोटपैड का उपयोग करना बहुत धीमा हो सकता है, इसलिए बेहतर है कि इसे मेगाबाइट या कुछ से बड़ी फ़ाइलों के लिए उपयोग न करें। मेरे मामले में 12 MiB फ़ाइल प्रदर्शित करने में लगभग 30 सेकंड लगे। नोटपैड ++, हालांकि, लगभग तुरंत एक 120 मिब निष्पादन योग्य प्रदर्शित करने में सक्षम था।

यदि आप किसी ऐसी मशीन पर फ़ाइल का निरीक्षण करना चाहते हैं, जिस पर आप कोई अतिरिक्त सॉफ़्टवेयर स्थापित नहीं कर सकते, तो यह समाधान उपयोगी हो सकता है।

अतिरिक्त जानकारी:

यदि आपके पास एक हेक्स-संपादक उपलब्ध है, तो पीई हस्ताक्षर की ऑफसेट ऑफसेट पर स्थित है 0x3C। हस्ताक्षर PE\0\0(पत्र "पी" और "ई" दो नल बाइट्स के बाद है), इसके बाद लिटिल एंडियन में एक दो बाइट मशीन प्रकार है।

संबंधित मान 0x8664x64 निष्पादन योग्य और 0x14cx86 के लिए हैं। बहुत अधिक संभावित मूल्य हैं, लेकिन आप शायद इनमें से किसी का भी सामना नहीं करेंगे, या अपने विंडोज पीसी पर इस तरह के निष्पादनयोग्य को चलाने में सक्षम होंगे।

बाकी .exe विशिष्टताओं के साथ-साथ मशीन प्रकारों की पूरी सूची Microsoft PE और COFF विनिर्देश मशीन प्रकार अनुभाग में पाई जा सकती है ।


21
अरे, यह तो हैक नहीं है। और बेहतर के लिए, क्योंकि यह वास्तव में मामलों के विशाल बहुमत के लिए सबसे तेज और सबसे आसान समाधान प्रतीत होता है :)
सेप्टाग्राम

4
दुर्लभ उदाहरण जब नोटपैड ने नोटपैड को हराया +। नोटपैड यह सही दिखाता है, नोटपैड में आपको इसे दिखाने के लिए एन्कोडिंग के साथ गड़बड़ है लेकिन यह काम कर गया!
zar

2
@CoDEmanX इस विकल्प का अर्थ है IDE या JIT आपके लिए विकल्प बनाता है। देखें इस सवाल या इस ब्लॉग पोस्ट अधिक जानकारी के लिए।
अलेक्जेंडर रेवो

2
@IIspectable यदि आपने वास्तव में इसे डाउनवोट करने से पहले पूरी पोस्ट को पढ़ने की जहमत उठाई है, तो आपने लिंक को देखा होगा Microsoft PE and COFF Specification, जो कि एक दस्तावेज अनुबंध जितना ही हो सकता है, साथ ही पीई हेडर का सही पता कैसे लगाएं, इस बारे में निर्देश दिए गए हैं। किसी भी .exeफाइल में। यदि आपके पास Microsoft के स्वयं के निष्पादन योग्य प्रारूप पर Microsoft के आधिकारिक विनिर्देश की तुलना में अधिक विश्वसनीय स्रोत है, तो मुझे यह जानना अच्छा लगेगा कि वह क्या है।
अलेक्जेंडर रेवो

6
"MZ" से शुरू होने वाली फ़ाइलों के लिए, आपको थोड़ा और देखने की जरूरत है। मुझे ऑफ़सेट 0x110 पर PE..L मिला, उसके बाद "RichMQ _........"।
jnnnnn

120

विकल्प के 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 बिट वर्ड मशीन
[...]

1
आप 64 बिट इटेनियम एक्सई के लिए (IA64) भी देख सकते हैं।
डैरिल ब्राटन

21
जैसा कि मैंने dumpbin /headers | findstr "machine"
सुपरयूज़र

3
Dumpbin.exe यहाँ स्थित है:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Devid

3
@ डेविड: जरूरी नहीं (वीएस का अलग संस्करण, डिफ़ॉल्ट इंस्टॉल लोकेशन का उपयोग न करते हुए, विंडोज एसडीके से संस्करण का उपयोग करके): यही कारण है कि मैंने निर्दिष्ट नहीं किया।
रिचर्ड

6
यदि आप इसे विज़ुअल स्टूडियो कमांड-लाइन: stackoverflow.com/a/477389/1390430
Ben

46

यदि आपके पास संपूर्ण Windows SDK या Visual Studio नहीं है, तो आप sigcheck.exeSysInternals से उपयोग कर सकते हैं :

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

4
हमेशा सटीक नहीं लगता है: LinqPad.exe (AnyCPU-64bit संस्करण) और सिगचेक के साथ इसका उपयोग करने का प्रयास करें आपको बताएगा कि यह "32 बिट" है ...
मैट

@Matt दिलचस्प। LinqPad एक .net ऐप की तरह लगता है; मुझे आश्चर्य है कि अगर sigcheck केवल देशी निष्पादनों (इस उद्देश्य के लिए) पर सही ढंग से काम करता है।
ब्रायंटिस्ट

2
हाँ, यह एक .NET ऐप है। .NET में, यदि यह पूर्व निर्धारित नहीं है, तो आप "x86" या "AnyCPU" को लक्षित कर सकते हैं। "x86" हमेशा 32 बिट के रूप में चलेगा, लेकिन AnyCPU 64 बिट सिस्टम पर 64 बिट के रूप में चलेगा, लेकिन 32 बिट सिस्टम पर 32 बिट के रूप में। सिगचेक को इस पर विचार करना चाहिए और कम से कम ".NET 32 बिट या 64 बिट (AnyCPU)" दिखाना चाहिए। उदाहरण के लिए ILSpy इस मामले में कहता है "आर्किटेक्चर: AnyCPU (64-बिट पसंदीदा)" - लेकिन ILSpy गैर- .NET EXE के लिए काम नहीं करेगा।
मैट

1
यह पुराने "MZ" हेडर की तरह ही हो सकता है, जो कि नॉन-विंडोज ("DOS") OS के लिए है, "यह एप्लिकेशन Microsoft Windows के लिए आवश्यक है" ... ;-)
मैट

2
हाँ, अच्छा पुराना समय, जहाँ आपके पास शेल में एक डीओएस डीबगर था और कोड को डिसाइड कर सकता था (जिसमें सिर्फ एक सिंगल डॉस इस संदेश को प्रिंट कर रहा था) ... और टेक्स्ट को "उत्तर 42 है।" :
मैट

38

मैं पुष्टि कर सकता हूं कि fileउपयोगिता (जैसे कि साइबरविन से) 32- और 64-बिट निष्पादन योग्य के बीच अंतर करेगी। वे इस प्रकार दिखाई देते हैं:

32.exe: PE32 executable (GUI) Intel 80386, for MS Windows
64.exe: PE32+ executable (console) x86-64, for MS Windows

जैसा कि आप देख सकते हैं, यह बहुत स्पष्ट है जो कि है। इसके अतिरिक्त यह कंसोल और जीयूआई निष्पादन के बीच अंतर करता है, यह भी स्पष्ट है कि कौन सा है।


1
यह समाधान आमतौर पर किसी भी डेवलपर्स के लिए उपलब्ध है, जिन्होंने msysgit स्थापित किया है।
FrontierPsycho

खिड़कियों के MZबजाय निष्पादन योग्य फाइलें क्यों हैं PE?
बैटलटाइड

यदि आप अन्यथा सिग्विन की आवश्यकता नहीं है तो वर्थ नोटिंग कि GNU उपयोगिताओं को अलग-अलग बायनेरिज़ के रूप में प्राप्त किया जा सकता है। gnuwin32.sourceforge.net/packages/file.htm
एमजे वाल्श

32

एक सरल विधि यह है कि आप इसे चलाएं (यह मानते हुए कि आप इस पर विश्वास करते हैं) और कार्य प्रबंधक में प्रक्रिया टैब पर एक नज़र डालें। 32bit प्रक्रियाएं प्रक्रिया नाम के अंत में "* 32" दिखाएंगी। यदि यह आपके कंप्यूटर पर चलने के लिए आपकी इच्छा से कुछ नहीं है, तो आप EXE एक्सप्लोरर की कोशिश कर सकते हैं । यदि यह 32 या 64 बिट है, तो यह निष्पादनयोग्य पर जानकारी का एक पूरा गुच्छा दिखाएगा।


8
दुर्भाग्य से, आपको निष्पादन योग्य चलाने की आवश्यकता है। शायद आपको प्रोग्राम की वास्तुकला को समस्या निवारण विधि के रूप में जांचना होगा कि यह क्यों नहीं चल रहा है।
माइक क्रिस्टियनसेन

6
आप एक DLL कैसे चलाते हैं?
1934 में user34660


1
@samusarin जो पोस्ट में होना चाहिए।
user34660

@ user34660 आप तकनीकी रूप से सही हैं, एक DLL में एक mainप्रवेश बिंदु नहीं है और इसलिए एक स्टैंड अलोन प्रक्रिया के रूप में निष्पादित नहीं होगा। जब इसे लोड किया जाता है तो एक इनिशियलाइज़ेशन फंक्शन होता है, लेकिन यह "मुख्य" नहीं होता है।
Samis

24

कई लोगों के पास उत्कृष्ट 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

वाह मैंने कभी नहीं जाना कि 7z ऐसा कर सकता है। संभवतः इसमें एक fileकार्यान्वयन शामिल है ?
फुलेवव सेप

17

प्रक्रिया एक्सप्लोरर का 64-बिट संस्करण आपको बता सकता है। बस निष्पादन योग्य चलाएं और प्रक्रिया के गुणों की खिड़की खोलें। मुख्य टैब पर एक प्रविष्टि है जो "छवि: 32 बिट" या "छवि: 64 बिट" कहती है।

यहां छवि विवरण दर्ज करें


23
Simply run the executableऔर अगर आप कार्यक्रम नहीं चलाना चाहते हैं तो क्या होगा ?
Synetech

3
@Synetech मूल प्रश्न का अर्थ यह नहीं है कि यह मामला है।
एंड्रयू लैंबर्ट

मेरे लिए यह सबसे आसान तरीका है, जब तक कि निष्पादन योग्य बहुत तेजी से बाहर नहीं निकलता है।
स्टारबिम्रेनबोलाब्स

7
आप एक DLL कैसे चलाते हैं?
user34660

15

सबसे सरल तरीका (जब डेटा गोपनीय नहीं है)

मुझे लगता है कि विरुस्टोटल File detail यह पता लगाने का सबसे सरल तरीका है कि क्या बाइनरी 32 बिट या 64 बिट है।

Additional informationविकल्प के अलावा फ़ाइल के बारे में ज्यादा उपयोगी जानकारियां में प्रदान करता है।

विरोस्तुटल विश्लेषण


[विरोस्तुलाल ट्रिड


12

एक निष्पादन योग्य और फिर प्रक्रिया एक्सप्लोरर या इसी तरह के उपकरण में जांच करने की विधि में कुछ स्पष्ट कमियां हैं:

  1. हमें प्रक्रिया को निष्पादित करना होगा।
  2. छोटी जीवित प्रक्रियाओं के लिए (जैसे इको हैलो दुनिया के प्रकार।), प्रक्रिया एक्सप्लोरर भी पंजीकृत नहीं हो सकता है कि एक नई प्रक्रिया शुरू हो गई है।

Dumpbin.exe विधि संभवतः उद्देश्य को हल कर सकती है।

एक अन्य विकल्प यह होगा कि साइबरविन की फाइल कमांड का उपयोग किया जाए । हालांकि, मैंने इसे खिड़कियों पर परीक्षण नहीं किया है। यह लिनक्स पर अच्छा काम करता है।

Usage: file program_under_test.exe

संपादित करें: बस खिड़की पर file.exe का परीक्षण किया। ठीक काम करता है। :)


1
बस यह कहना चाहता था, कि कुछ परिस्थितियाँ हैं, जहाँ ड्रेक्स का तरीका ज्यादा मददगार नहीं होगा।
ऐंशसैन

3
>> इसके लिए अभी भी उस प्रोग्राम को चलाने की आवश्यकता है जिसे लेखक टालना चाहता था: नहीं .. हम इसे चलाते हैं जैसे: file.exe program_under_test.exe
anishsane

1
और जो लोग पूरे cygwinपैकेज को स्थापित करने से बचना चाहते हैं, वे gnuwin32 fileपैकेज को हड़प सकते हैं ।
बॉब

6
@ गायब होना पूरी तरह से गलत है। fileबस द्विआधारी प्रारूप में डिस्क से डेटा पढ़ता है और किसी भी जादुई संख्या के लिए जाँच करता है, जो डेटाबेस की तुलना में उनकी पहचान करता है। विंडोज के 32-बिट प्रोग्राम PE32 के रूप में आते हैं, और 64-बिट और .NET प्रोग्राम दोनों PE32 + के रूप में आते हैं। fileस्वयं की बिटनेस बिल्कुल शून्य अंतर बनाती है - दोनों 32-बिट और 64-बिट एप्लिकेशन डिस्क से डेटा पढ़ सकते हैं, जो कि इसकी सभी आवश्यकताएं हैं।
बॉब

1
@ मारक हा! यही कारण है कि है दिलचस्प। मैं अनुमान लगा रहा हूँ कि .NET रनटाइम स्टब 32-बिट है। तो यह एक दूसरे के एक अंश के लिए 32-बिट प्रक्रिया को चलाता है, लेकिन वह सभी प्रक्रिया .NET रनटाइम को शुरू करता है, जो एक मूल 64-बिट प्रक्रिया बनाता है।
क्लैक् ड

10

यहाँ एक 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

Slickness। उपरोक्त स्क्रिप्ट फ़ाइल को खोलने के लिए एक संदर्भ छोड़ देता है। तब तक निर्माण नहीं किया जा सकता, जब तक कि मैं पहले पॉवरशेल को बंद नहीं कर देता (डीएनएल से पूछताछ करने के लिए स्क्रिप्ट चलाता)।
samis

1
बहुत ही शांत। +1। इटेनियम निश्चित रूप से 64 बिट है हालांकि :)
रिच होमोलका

@samusarin: शायद $stream.dispose();बंद करने के बाद जोड़ सकते हैं ? फ़ाइल हैंडल रिलीज़ करना चाहिए। ( stackoverflow.com/questions/1999858/… )
योरिक

1
अधिक पूर्ण संस्करण चेक
phuclv

6

यहां तक ​​कि 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

कूल कमांड, लेकिन यह देशी (गैर-प्रबंधित) निष्पादनयोग्य / dll के लिए काम नहीं करेगा। ( corflags : error CF008 : The specified file does not have a valid managed header)
टॉमस गैंडर

@TomaszGandor हां, इस उत्तर का संदर्भ केवल प्रबंधित कोड था। अन्य उत्तरों से अप्रबंधित कोड का उत्तर दिया जाता है। जहाँ तक मुझे पता है, केवल प्रबंधित कोड 32- और 64-बिट दोनों को निष्पादित करने के बीच स्विच कर सकता है।
BlueMonkMN


3

यदि आप विंडोज 7 पर हैं, तो विंडोज एक्सप्लोरर पर, निष्पादन योग्य पर क्लिक करें और गुण चुनें। गुण विंडो पर संगतता टैब का चयन करें। यदि संगतता मोड अनुभाग के अंतर्गत आप Windows XP देखते हैं, तो यह एक 32 बिट निष्पादन योग्य है। यदि आप विंडोज विस्टा देखते हैं, तो यह 64 बिट है।


-1 बिल्कुल सच नहीं है। विभिन्न 32 और 64 बिट बायनेरिज़ में सभी को एक संगतता मोड दिखाया गया हैWindows 8
पीटर हैन्डॉर्फ

@Peter मैंने विंडोज 7 पर काफी कोशिश की है और यह हमेशा मेरे लिए काम करता है। क्या आप एक बाइनरी का उदाहरण दे सकते हैं जहां डिफ़ॉल्ट संगतता मोड विंडोज 8 है? इसके अलावा आप किस विंडोज पर हैं? धन्यवाद।
एकैनिस

मैं सर्वर 2012 R2 पर हूँ और कुछ यादृच्छिक बायनेरिज़ की कोशिश की। कुछ 32 बिट्स के रूप में दिखाते हैं, Windows XP SP2लेकिन अन्य के रूप में Vistaया के रूप में दिखाते हैं Windows 8। इसलिए यह तरीका सही नहीं है।
पीटर हैनडॉर्फ

3

अपने संदर्भ मेनू में 32/64 बिट परीक्षण कैसे जोड़ें

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 फ़ाइल की प्रतिलिपि बनाएँ, और उस पर निष्पादन योग्य खींचें।


3

मेरे दो सेंट सिर्फ निर्भरता वॉकर डाउनलोड करेंगे और जांच करेंगे कि निष्पादन योग्य फ़ाइल में से एक में आर्किटेक्चर के लिए क्या उपयोग किया गया है।

इसे कैसे उपयोग करे:

बस केवल ऐप डाउनलोड करें, इसे शुरू करें, खुले आइकन पर क्लिक करें → एक * .exe फ़ाइल ढूंढें → चयन करें और नीचे पर प्रतिबिंब स्कैन के बाद आपको डेटा के साथ एक ग्रिड दिखाई देता है जहां एक कॉलम में "वास्तुकला" विवरण है (x86): 64)

निष्पादन योग्य खोलें और बिल्ड आर्किटेक्चर देखें

निर्भरता वॉकर स्क्रीनशॉट


1

मैंने यह उल्लेख नहीं देखा है। NTCore द्वारा CFF एक्सप्लोरर नामक एक पीई दर्शक कार्यक्रम है , जो आपको यह जानकारी प्रदान कर सकता है। इसे डाउनलोड किया जा सकता है और पोर्टेबल के रूप में चलाया जा सकता है, लेकिन आप चाहें तो इसे इंस्टॉल कर सकते हैं।

राइट बाइनरी (पर क्लिक करें .exe, .dllआदि) और "CFF एक्सप्लोरर के साथ खोलें"। Nt Headers पर जाएं -> फ़ाइल हैडर -> "विशेषताओं" फ़ील्ड पर "यहां क्लिक करें" पर क्लिक करें।

यदि यह एक 32 बिट प्रोग्राम है, तो चेकबॉक्स "32 बिट वर्ड मशीन" टिक जाएगा। उदाहरण के लिए, मैंने नोटपैड ++ का 32 बिट संस्करण स्थापित किया है जैसा कि आप नीचे दी गई छवि में देख सकते हैं। अन्यथा, यह 64 बिट है।

यहां छवि विवरण दर्ज करें


CFF एक्सप्लोरर के साथ एक तेज़ तरीका है: फ़ाइल लोड करने के तुरंत बाद, "फ़ाइल प्रकार" के तहत आपके पास "पोर्टेबल निष्पादन योग्य 64" या "पोर्टेबल निष्पादन योग्य 32" है
आर्थर वीवी

0
  • एप्लिकेशन चलाएँ
  • टास्क मैनेजर खोलें
  • राइट क्लिक करें और डंप फ़ाइल बनाएँ
  • नोट नीचे पथ
  • पथ पर जाएं और .DMPविज़ुअल स्टूडियो में डंप खोलें
  • वहां आपको सभी विवरण मिलते हैं
  • जाँच प्रक्रिया वास्तुकला:

3
मैं इस तथ्य को रेखांकित करने के लिए बाध्य महसूस करता हूं कि इस उत्तर के लिए एप्लिकेशन को चलाने की आवश्यकता है। पिछले टिप्पणीकारों ने सुझाव दिया कि यह अवांछनीय हो सकता है। इसके अलावा, विजुअल स्टूडियो स्वचालित रूप से सभी विंडोज प्लेटफॉर्म पर उपलब्ध नहीं होगा।
जी-मैन

0

मेरे दो सेंट: एक सी ++ डेवलपर के रूप में, निर्भरता वॉकर ( http: //www.d dependencywalker.com/) बहुत जानकारीपूर्ण है, न केवल 64/32 बिट्स प्रदर्शित करता है, बल्कि प्रत्येक Dll में भी शामिल है: यहां छवि विवरण दर्ज करें

आप हर फ़ाइल नाम के बाईं ओर 64 देख सकते हैं ...


1
स्क्रीनशॉट में उत्तर नहीं दिखाया गया है - 32 बिट बनाम 64 बिट जानकारी ...
टॉमएप्स

0

फिर भी, WSL की fileकमांड बहुत काम करती है।

file /mnt/c/p/bin/rg.exe उत्पादन होगा:

/mnt/c/p/bin/rg.exe: PE32+ executable (console) x86-64, for MS Windows

file /mnt/c/p/bin/u.exe उत्पादन होगा:

/mnt/c/p/bin/u.exe: PE32 executable (GUI) Intel 80386, for MS Windows, UPX compressed

0

विंडोज़ 10 के टास्क मैनेजर में प्लेटफॉर्म कॉलम

विंडोज 7 में प्लेटफॉर्म कॉलम नहीं है। इसलिए विंडोज 7 टास्क मैनेजर इसे नहीं दिखाएगा।

विंडोज़ 10 में कॉलम चुनना अब 'दृश्य' के तहत नहीं है। विंडोज 10 में, जब विवरण टैब में, आप कॉलम हेडर पर राइट क्लिक करते हैं तो 'कॉलम चुनें'। फिर 'प्लेटफ़ॉर्म' के लिए बॉक्स चेक करें।

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.