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.
windows
binary-files
32-vs-64-bit
Septagram
źródło
źródło
Odpowiedzi:
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.
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świetlaOpen with...
opcji w menu kontekstowym dla plików wykonywalnych.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:
x64:
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 toPE\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ą
0x8664
pliku wykonywalnego x64 i0x14c
x86. 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 .
źródło
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.exe
pliku. 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.Narzędzie SDK
dumpbin.exe
z/headers
opcją zawiera te informacje, porównaj te dwa (dodałem pogrubienie dla kluczowych informacji)i
źródło
dumpbin /headers | findstr "machine"
znacznie upraszcza prezentację tego, czego QA szuka ...C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Jeśli nie masz lub nie chcesz całego zestawu Windows SDK lub Visual Studio, możesz użyć
sigcheck.exe
SysInternals :Wynik:
źródło
Mogę potwierdzić, że
file
narzędzie (np. Z cygwin) rozróżnia pliki wykonywalne 32- i 64-bitowe. Wyglądają następująco: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.
źródło
MZ
zamiast plików wykonywalnych w systemie WindowsPE
?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.
źródło
main
punktu wejścia, więc nie będzie działać jako samodzielny proces. Podczas ładowania jest wywoływana funkcja inicjalizacji, ale nie jest to „main”.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 polecenia7z.exe
na odpowiednim pliku PE (Exe lub DLL):Dane wyjściowe będą zawierać wiersze w następujący sposób, z
CPU
odczytem wiersza albo,x86
albox64
o to tutaj pytamy:źródło
file
implementację w środku?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”.
źródło
Simply run the executable
A co jeśli nie chcesz uruchamiać programu?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 information
opcja zapewnia ponadto wiele przydatnych informacji o pliku.źródło
Metoda uruchamiania pliku wykonywalnego, a następnie sprawdzania w eksploratorze procesów lub podobnym narzędziu, ma pewne oczywiste wady:
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.
EDYCJA: Właśnie przetestowałem file.exe w oknie. działa w porządku. :)
źródło
cygwin
pakietu, mogą pobrać pakiet gnuwin32file
.file
po 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śćfile
robi absolutnie zerową różnicę - zarówno 32-bitowe, jak i 64-bitowe aplikacje mogą odczytywać dane z dysku, co jest wszystkim, czego potrzebuje.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:
Oto przykładowy wynik:
źródło
$stream.dispose();
po zamknięciu? Powinny zwolnić uchwyty plików. ( stackoverflow.com/questions/1999858/… )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:
W przypadku 64-bitowego pliku wykonywalnego:
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:
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:
źródło
corflags : error CF008 : The specified file does not have a valid managed header
)możesz również użyć tego
file
narzędzia z pakietu msys mingw . Działa jak polecenie unix. Podobne działafile
narzędzie z GNUwin32 .źródło
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.
źródło
Windows 8
Windows XP SP2
ale inne jakoVista
lubWindows 8
. Więc ta metoda jest nieprawidłowa.Jak dodać test 32/64-bitowy do menu kontekstowego
Utwórz plik tekstowy o nazwie exetest.reg i zawierający ten kod:
Utwórz plik tekstowy o nazwie
x86TestStart.bat
zawierającej tylko ten wiersz kodu i zapisz go w C: \ temp:Utwórz plik tekstowy o nazwie
x86or64.vbs
zawierający ten kod i zapisz go w C: \ temp:Kliknij dwukrotnie plik exetest.reg: nowy klucz zostanie dodany do rejestru systemu Windows:
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 VBscriptx86or64.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.
źródło
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
źródło
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
,.dll
etc.) 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.
źródło
.DMP
zrzut w Visual Studioźródło
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:
Możesz zobaczyć 64 po lewej stronie każdej nazwy pliku ...
źródło
Jednak WSL jest
file
komenda działa znacznie.file /mnt/c/p/bin/rg.exe
wyprowadziłby:file /mnt/c/p/bin/u.exe
wyprowadziłby:źródło
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”.
źródło