Jak sprawdzić, czy plik binarny ma 32 lub 64 bity w systemie Windows?

319

Czy istnieje prosty sposób sprawdzenia, czy plik binarny ma 32 lub 64 bity w systemie Windows? Muszę sprawdzić, zanim przeniosę program na maszynę 32-bitową i doświadczę spektakularnej awarii.

Septagram
źródło
To pytanie jest podobne , jednak jego sprawdzenie wymaga trochę pracy.
ST3
3
@Guillaume: Obrazy wykonywalne nie są procesami. Menedżer zadań pokazuje tylko procesy.
Widoczny

Odpowiedzi:

346

Po przeanalizowaniu wartości nagłówka z odpowiedzi Richarda wymyśliłem rozwiązanie, które jest szybkie, łatwe i wymaga tylko edytora tekstu. Działa nawet domyślny notepad.exe systemu Windows.

  1. Otwórz plik wykonywalny w edytorze tekstu. Może być konieczne przeciągnięcie i upuszczenie lub skorzystanie z Open...okna edytora , ponieważ system Windows nie wyświetla Open with...opcji w menu kontekstowym dla plików wykonywalnych.

  2. Sprawdź pierwsze znaki do wydrukowania po pierwszym wystąpieniu PE. Ta część najprawdopodobniej zostanie otoczona przez co najmniej trochę białych znaków (może być jej dużo), więc można to łatwo zrobić wizualnie.

Oto, co znajdziesz:

x86:

PE  L

x64:

PE  d†

Słowo ostrzeżenia: używanie domyślnego Notatnika na dużych plikach może być bardzo powolne, więc lepiej nie używać go do plików większych niż megabajt lub kilka. W moim przypadku wyświetlenie pliku 12 MiB zajęło około 30 sekund. Jednak Notepad ++ był w stanie wyświetlić plik wykonywalny 120 MiB prawie natychmiast.

To rozwiązanie może być przydatne w przypadku konieczności sprawdzenia pliku na komputerze, na którym nie można zainstalować żadnego dodatkowego oprogramowania.

Dodatkowe informacje:

Jeśli masz dostępny edytor HEX, przesunięcie podpisu PE znajduje się w przesunięciu 0x3C. Podpis to PE\0\0(litery „P” i „E”, po których następują dwa puste bajty), a następnie dwubajtowy typ maszyny w Little Endian.

Odpowiednie wartości dotyczą 0x8664pliku wykonywalnego x64 i 0x14cx86. Istnieje o wiele więcej możliwych wartości, ale prawdopodobnie nigdy nie napotkasz żadnej z nich ani nie będziesz mógł uruchomić takich plików wykonywalnych na komputerze z systemem Windows.

Pełna lista typów maszyn wraz z resztą specyfikacji .exe znajduje się w sekcji Typy maszyn specyfikacji Microsoft PE i COFF .

Alexander Revo
źródło
21
Hej, to raczej hack. I na lepsze, ponieważ wydaje się, że jest to najszybsze i najłatwiejsze rozwiązanie w zdecydowanej większości przypadków :)
Septagram
4
Rzadka instancja, gdy notatnik pokonał notatnik ++. Notatnik pokazuje to dobrze, w notatniku masz bałagan z kodowaniem, aby pokazać, ale zadziałało!
zar
2
@CoDEmanX ta opcja oznacza, że ​​IDE lub JIT dokonuje wyboru za Ciebie. Zobacz to pytanie lub ten post na blogu, aby uzyskać więcej informacji.
Alexander Revo,
2
@Isprawdopodobny, gdybyś naprawdę chciał przeczytać cały post przed oddaniem go na głos, zobaczyłbyś link do Microsoft PE and COFF Specification, który jest tak udokumentowaną umową, jak to możliwe, a także instrukcje, jak znaleźć dokładny adres nagłówka PE w dowolnym .exepliku. Jeśli masz bardziej wiarygodne źródło niż oficjalna specyfikacja Microsoft dotycząca własnego formatu wykonywalnego Microsoftu, chciałbym wiedzieć, co to jest.
Alexander Revo
6
W przypadku plików rozpoczynających się od „MZ” należy zajrzeć nieco dalej. Znalazłem PE..L z przesunięciem 0x110, zaraz po „RichMQ _____”.
jnnnnn
120

Narzędzie SDK dumpbin.exez /headersopcją zawiera te informacje, porównaj te dwa (dodałem pogrubienie dla kluczowych informacji)

PS [64] E: \ # 4> śmietnik / nagłówki C: \ Windows \ system32 \ cmd.exe
Microsoft (R) COFF / PE Dumper Wersja 10.00.40219.01
Prawa autorskie (C) Microsoft Corporation. Wszelkie prawa zastrzeżone.


Zrzut pliku C: \ Windows \ system32 \ cmd.exe

Znaleziono podpis PE

Typ pliku: WYKONANIE OBRAZU

WARTOŚCI NAGŁÓWKA PLIKU
            8664 maszyna (x64)
               6 liczba sekcji
        4CE798E5 data i godzina Sob 20 listopada 09:46:13 2010
               0 wskaźnik pliku do tablicy symboli
               0 liczba symboli
              Rozmiar F0 opcjonalnego nagłówka
              22 cechy
                   Plik wykonywalny
                   Aplikacja może obsługiwać duże (> 2 GB) adresy
[...]

i

PS [64] E: \ # 5> śmietnik / nagłówki C: \ Windows \ syswow64 \ cmd.exe
Microsoft (R) COFF / PE Dumper Wersja 10.00.40219.01
Prawa autorskie (C) Microsoft Corporation. Wszelkie prawa zastrzeżone.


Zrzut pliku C: \ Windows \ syswow64 \ cmd.exe

Znaleziono podpis PE

Typ pliku: WYKONANIE OBRAZU

WARTOŚCI NAGŁÓWKA PLIKU
             Maszyna 14C (x86)
               4 liczba sekcji
        Datownik 4CE78E2B Sob 20 listopada 09:00:27 2010
               0 wskaźnik pliku do tablicy symboli
               0 liczba symboli
              Rozmiar E0 opcjonalnego nagłówka
             102 cechy
                   Plik wykonywalny
                   32-bitowa maszyna słów
[...]
Richard
źródło
1
Możesz także zobaczyć (IA64) dla 64-bitowego exe Itanium.
Darryl Braaten,
21
jak czytałem w innym miejscu na temat superużytkownika, użycie dumpbin /headers | findstr "machine"znacznie upraszcza prezentację tego, czego QA szuka ...
user1055604
3
Dumpbin.exe znajduje się tutaj:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Devid
3
@David: niekoniecznie (inna wersja VS, nie używa domyślnej lokalizacji instalacji, używa wersji z Windows SDK): dlatego nie określiłem.
Richard
6
Najłatwiej jest użyć śmietnika, jeśli uruchomisz go z wiersza polecenia programu Visual Studio: stackoverflow.com/a/477389/1390430
Ben
46

Jeśli nie masz lub nie chcesz całego zestawu Windows SDK lub Visual Studio, możesz użyć sigcheck.exeSysInternals :

sigcheck.exe C:\Windows\Notepad.exe

Wynik:

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
briantist
źródło
4
Wydaje się, że nie zawsze jest to dokładne: spróbuj użyć go z LinqPad.exe (wersja AnyCPU-64bit), a Sigcheck powie ci, że to „32-bit”…
Matt
@Matt ciekawe. LinqPad brzmi jak aplikacja .net; Zastanawiam się, czy sigcheck działa poprawnie tylko na natywnych plikach wykonywalnych (w tym celu).
briantist
2
Tak, jest to aplikacja .NET. W .NET, jeśli nie jest prekompilowany, możesz kierować reklamy na „x86” lub „AnyCPU”. „x86” zawsze będzie działało jako 32-bitowe, ale AnyCPU będzie działać jako 64-bitowe w systemie 64-bitowym, ale jako 32-bitowe w systemie 32-bitowym. SigCheck powinien rozważyć to i pokazać co najmniej „.NET 32-bitowy lub 64-bitowy (AnyCPU)”. Na przykład ILSpy mówi w tym przypadku „Architektura: AnyCPU (preferowana wersja 64-bitowa)” - ale ILSpy nie będzie działać dla plików EXE innych niż .NET.
Matt
1
Może tak być, np. Stary nagłówek „MZ”, który jest dostępny tylko dla systemu operacyjnego innego niż Windows („DOS”), mówiąc „Ta aplikacja wymaga systemu Microsoft Windows” ... ;-)
Matt
2
Tak, dobre stare czasy, w których miałeś debugger DOS w powłoce i mogłeś zdemontować kod (który zawierał tylko jedno wywołanie DOS drukujące ten komunikat) ... i zastąpić tekst słowem „Odpowiedź to 42.” :-D
Matt
38

Mogę potwierdzić, że filenarzędzie (np. Z cygwin) rozróżnia pliki wykonywalne 32- i 64-bitowe. Wyglądają następująco:

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

Jak widać, jest bardzo oczywiste, która jest która. Dodatkowo rozróżnia pliki wykonywalne konsoli i GUI, również oczywiste, które jest które.

wmassingham
źródło
1
To rozwiązanie jest dość powszechnie dostępne dla wszystkich programistów, którzy zainstalowali msysgit.
FrontierPsycho
Dlaczego MZzamiast plików wykonywalnych w systemie Windows PE?
BattleTested
Warto zauważyć, że narzędzia GNU można uzyskać jako pojedyncze pliki binarne, jeśli w przeciwnym razie nie potrzebujesz Cygwin. gnuwin32.sourceforge.net/packages/file.htm
MJ Walsh
32

Prostą metodą jest uruchomienie go (zakładając, że mu ufasz) i spojrzenie na kartę procesu w menedżerze zadań. Procesy 32-bitowe pokażą „* 32” na końcu nazwy procesu. Jeśli nie jest to coś, co chcesz uruchomić na swoim komputerze, możesz wypróbować EXE Explorer . Wyświetli całą masę informacji o plikach wykonywalnych, w tym jeśli jest to wersja 32- lub 64-bitowa.

Dracs
źródło
8
Niestety wymaga to uruchomienia pliku wykonywalnego. Być może musisz sprawdzić architekturę programu jako metodę rozwiązywania problemów, dlaczego nie jest uruchomiony.
Mike Christiansen
6
Jak ty prowadzisz DLL?
user34660,
1
@ user34660 RUNDLL32.EXE <nazwa_dll>, <
entrypoint
1
@samusarin, które powinny być w poście.
user34660,
@ user34660 Technicznie masz rację, biblioteka DLL nie ma mainpunktu wejścia, więc nie będzie działać jako samodzielny proces. Podczas ładowania jest wywoływana funkcja inicjalizacji, ale nie jest to „main”.
samis,
24

Wiele osób ma zainstalowaną doskonałą wersję 7-zip i dodało do niej folder 7-Zip PATH. 7-zip rozumie formaty plików inne niż ZIP i RAR, takie jak pliki MSI i pliki wykonywalne PE. Wystarczy użyć wiersza polecenia 7z.exena odpowiednim pliku PE (Exe lub DLL):

7z l some.exe | more
7z l some.exe | findstr CPU

Dane wyjściowe będą zawierać wiersze w następujący sposób, z CPUodczytem wiersza albo, x86albo x64o to tutaj pytamy:

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
Lumi
źródło
wow, nigdy nie wiedziałem, że 7z może to zrobić. Prawdopodobnie zawiera fileimplementację w środku?
phuclv
17

64-bitowa wersja Process Explorer może ci powiedzieć. Po prostu uruchom plik wykonywalny i otwórz okno właściwości procesu. Na głównej karcie znajduje się wpis „Image: 32 Bit” lub „Image: 64 Bit”.

wprowadź opis zdjęcia tutaj

Andrew Lambert
źródło
23
Simply run the executableA co jeśli nie chcesz uruchamiać programu?
Synetech,
3
@ Synetech Oryginalne pytanie nie oznacza, że ​​tak jest.
Andrew Lambert
Myślę, że jest to dla mnie najłatwiejsza metoda, chyba że plik wykonywalny kończy się zbyt szybko.
starbeamrainbowlabs
7
Jak ty prowadzisz DLL?
user34660,
15

Najprostszy sposób (gdy dane nie są poufne)

Uważam, że Virustotal File detail jest najprostszym sposobem, aby dowiedzieć się, czy plik binarny jest 32-bitowy czy 64-bitowy.

Ta Additional informationopcja zapewnia ponadto wiele przydatnych informacji o pliku.

Analiza Virustotal


[Virustotal TrID

wiggle marsh
źródło
12

Metoda uruchamiania pliku wykonywalnego, a następnie sprawdzania w eksploratorze procesów lub podobnym narzędziu, ma pewne oczywiste wady:

  1. Musimy wykonać proces.
  2. W przypadku krótkotrwałych procesów (takich jak echo hello world.) Eksplorator procesów może nawet nie zarejestrować, że nowy proces się rozpoczął.

Metoda Dumpbin.exe może prawdopodobnie rozwiązać cel.

Inną alternatywą byłoby użycie polecenia pliku cygwina. Nie testowałem go jednak w systemie Windows. Działa dobrze w systemach Linux.

Usage: file program_under_test.exe

EDYCJA: Właśnie przetestowałem file.exe w oknie. działa w porządku. :)

anishsane
źródło
1
Chciałem tylko powiedzieć, że są sytuacje, w których metoda Dracsa nie będzie zbyt pomocna.
anishsane,
3
>> Nadal wymaga to uruchomienia programu, którego autor chciał uniknąć: Nie.
Uruchamiamy
1
A ci, którzy chcą uniknąć instalowania całego cygwinpakietu, mogą pobrać pakiet gnuwin32file .
Bob
6
@anishsane Całkowicie źle. filepo prostu odczytuje dane z dysku w formacie binarnym i sprawdza wszelkie magiczne liczby identyfikujące je, porównując z bazą danych. 32-bitowe programy systemu Windows pojawiają się jako PE32, a zarówno programy 64-bitowe, jak i .NET jako PE32 +. Sama bitowość filerobi absolutnie zerową różnicę - zarówno 32-bitowe, jak i 64-bitowe aplikacje mogą odczytywać dane z dysku, co jest wszystkim, czego potrzebuje.
Bob
1
@MarcH Ha! To jest interesujące. Zgaduję, że to oznacza, że ​​skrót uruchomieniowy .NET jest 32-bitowy. Tak więc uruchamia proces 32-bitowy na ułamek sekundy, ale wszystko, co robi, to uruchamianie środowiska uruchomieniowego .NET, które tworzy natywny proces 64-bitowy.
clacke
10

Oto rozwiązanie Powershell, żadnych zewnętrznych zależności ani niczego. Otwórz PowerShell, wklej tam funkcję (naciśnij Enter dwa razy, aby powrócić do monitu), a następnie użyj jej jak w moich przykładach poniżej funkcji:

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
}

Oto przykładowy wynik:

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
megamorf
źródło
Zręczność Powyższy skrypt wydaje się pozostawić otwarte odwołanie do pliku. Nie można było budować, dopóki nie zamknąłem PowerShell (uruchomiłem skrypt, aby przesłuchać DLL w \ bin).
samis,
1
Bardzo fajny. +1. Itanium jest zdecydowanie 64-bitowy :)
Rich Homolka
@samusarin: może dodać $stream.dispose();po zamknięciu? Powinny zwolnić uchwyty plików. ( stackoverflow.com/questions/1999858/… )
Yorik
1
bardziej kompletną wersję można znaleźć w Sprawdź, czy exe jest 64-bitowy
phuclv
6

Nawet plik wykonywalny oznaczony jako 32-bitowy może działać jako 64-bitowy, jeśli na przykład jest to plik wykonywalny .NET, który może działać jako 32- lub 64-bitowy. Aby uzyskać więcej informacji, zobacz https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit , który zawiera odpowiedź, która mówi, że Za pomocą narzędzia CORFLAGS można określić sposób działania aplikacji .NET.

Dane wyjściowe CORFLAGS.EXE

W przypadku 32-bitowego pliku wykonywalnego:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x3
ILONLY    : 1
32BITREQ  : 1
32BITPREF : 0
Signed    : 0

W przypadku 64-bitowego pliku wykonywalnego:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32+
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0

W przypadku pliku wykonywalnego, który może działać jako 32- lub 64-bitowy i będzie działał jako 64-bitowy, jeśli to możliwe:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0

W przypadku pliku wykonywalnego, który może działać jako 32- lub 64-bitowy, ale będzie działał jako 32-bitowy, chyba że zostanie załadowany do procesu 64-bitowego:

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x20003
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 1
Signed    : 0
BlueMonkMN
źródło
Fajne polecenie, ale nie będzie działać dla natywnych (niezarządzanych) plików wykonywalnych / bibliotek DLL. ( corflags : error CF008 : The specified file does not have a valid managed header)
Tomasz Gandor
@TomaszGandor Tak, kontekstem tej odpowiedzi był tylko kod zarządzany. Na niezarządzany kod odpowiadają inne odpowiedzi. O ile mi wiadomo, tylko kod zarządzany może przełączać się między wykonaniem w wersji 32- i 64-bitowej.
BlueMonkMN
4

możesz również użyć tego filenarzędzia z pakietu msys mingw . Działa jak polecenie unix. Podobne działa filenarzędzie z GNUwin32 .

Bastian Ebeling
źródło
3

Jeśli korzystasz z systemu Windows 7, w Eksploratorze Windows, kliknij prawym przyciskiem myszy plik wykonywalny i wybierz Właściwości. W oknie właściwości wybierz kartę Zgodność. Jeśli w sekcji Tryb zgodności widzisz Windows XP, jest to 32-bitowy plik wykonywalny. Jeśli widzisz system Windows Vista, jest on 64-bitowy.

axxis
źródło
-1 wcale nie jest prawdą. Różne 32-bitowe i 64-bitowe pliki binarne są pokazywane w trybie zgodnościWindows 8
Peter Hahndorf
@Peter Próbowałem sporo na Windows 7 i zawsze działało to dla mnie. Czy możesz podać przykład pliku binarnego, w którym domyślnym trybem zgodności jest Windows 8? Również na jakim systemie Windows jesteś? Dzięki.
axxis
Jestem na serwerze 2012 R2 i wypróbowałem kilka losowych plików binarnych. Niektóre 32-bitowe są wyświetlane jako, Windows XP SP2ale inne jako Vistalub Windows 8. Więc ta metoda jest nieprawidłowa.
Peter Hahndorf,
3

Jak dodać test 32/64-bitowy do menu kontekstowego

Utwórz plik tekstowy o nazwie exetest.reg i zawierający ten kod:

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\""

Utwórz plik tekstowy o nazwie x86TestStart.batzawierającej tylko ten wiersz kodu i zapisz go w C: \ temp:

c:\temp\x86or64.vbs %1

Utwórz plik tekstowy o nazwie x86or64.vbszawierający ten kod i zapisz go w 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

Kliknij dwukrotnie plik exetest.reg: nowy klucz zostanie dodany do rejestru systemu Windows:

[HKEY_CLASSES_ROOT\exefile\shell\command32_64\command]

Pojawi się jako „ test 32/64-bitowy ” w menu kontekstowym po kliknięciu prawym przyciskiem myszy pliku wykonywalnego.

Kliknięcie elementu spowoduje uruchomienie pliku wsadowego c:\\temp\\x86TestStart.bat\, który uruchamia plik VBscript x86or64.vbs, który odczytuje sygnaturę exe i wyświetla wynik.

Jeśli nie możesz lub nie chcesz manipulować rejestrem, po prostu skopiuj plik .vbs na pasku QuickLaunch i przeciągnij nad nim plik wykonywalny.

skoczek
źródło
3

Moje dwa centy będą po prostu walkerem zależności pobierania i sprawdzą, co dla architektury zostało użyte w jednym z plików wykonywalnych.

Jak tego użyć:

Wystarczy pobrać aplikację, uruchomić ją, kliknąć ikonę otwartą → znaleźć plik * .exe → wybrać, a na dole po zakończeniu skanowania refleksyjnego widać siatkę z danymi, w której w jednej kolumnie znajdują się szczegóły „architektury” (x86, x64)

Otwórz plik wykonywalny i zobacz architekturę kompilacji

zrzut ekranu chodzika zależności

stenly
źródło
1

Nie widziałem tego wspomnianego. Istnieje program przeglądarki PE o nazwie CFF Explorer firmy NTCore , który może dostarczyć ci te informacje. Można go pobrać i uruchomić jako przenośny, ale możesz go również zainstalować, jeśli chcesz.

Kliknij prawym przyciskiem myszy na plik binarny ( .exe, .dlletc.) i wybierz „Otwórz za pomocą CFF Explorer”. Idź do Nt Nagłówki -> Nagłówek pliku -> W polu „Charakterystyka” kliknij „Kliknij tutaj”

Jeśli jest to program 32-bitowy, pole wyboru „32-bitowa maszyna słów” zostanie zaznaczone. Na przykład zainstalowałem 32-bitową wersję Notepad ++, jak widać na poniższym obrazku. W przeciwnym razie jest 64-bitowy.

wprowadź opis zdjęcia tutaj

Nikos
źródło
Jest szybszy sposób z eksploratorem CFF: bezpośrednio podczas ładowania pliku, w „typie pliku” masz „Portable Executable 64” lub „Portable Executable 32”
Arthur.V
0
  • uruchom aplikację
  • otwórz Menedżera zadań
  • kliknij prawym przyciskiem myszy i utwórz plik zrzutu
  • zanotuj ścieżkę
  • przejdź do ścieżki i otwórz .DMPzrzut w Visual Studio
  • tam dostajesz wszystkie szczegóły
  • sprawdź architekturę procesu:
użytkownik429538
źródło
3
Czuję się zobowiązany do podkreślenia faktu, że ta odpowiedź wymaga uruchomienia aplikacji. Poprzedni komentatorzy sugerowali, że może to być niepożądane. Ponadto program Visual Studio nie będzie automatycznie dostępny na wszystkich platformach Windows.
G-Man,
0

moje dwa centy: jako programista C ++ walker zależności ( http://www.dependencywalker.com/ ) jest bardzo pouczający, wyświetla nie tylko 64/32 bity, ale także wszystkie zaangażowane biblioteki Dll: wprowadź opis zdjęcia tutaj

Możesz zobaczyć 64 po lewej stronie każdej nazwy pliku ...

ingconti
źródło
1
Zrzut ekranu nie wyświetla odpowiedzi - informacje 32-bitowe vs 64-bitowe ...
TomEus
0

Jednak WSL jest filekomenda działa znacznie.

file /mnt/c/p/bin/rg.exe wyprowadziłby:

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

file /mnt/c/p/bin/u.exe wyprowadziłby:

/mnt/c/p/bin/u.exe: PE32 executable (GUI) Intel 80386, for MS Windows, UPX compressed
Bohr
źródło
0

Kolumna platformy w menedżerze zadań systemu Windows 10

Windows 7 nie ma kolumny platformy. Menedżer zadań systemu Windows 7 go nie wyświetli.

W systemie Windows 10 wybieranie kolumn nie jest już „widoczne”. W systemie Windows 10 na karcie szczegółów kliknij prawym przyciskiem myszy nagłówek kolumny, a następnie „wybierz kolumny”. Następnie zaznacz pole „platforma”.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

barlop
źródło