Gibt es eine einfache Möglichkeit, unter Windows zu überprüfen, ob eine Binärdatei 32 oder 64 Bit enthält? Ich muss das überprüfen, bevor ich das Programm auf einen 32-Bit-Computer verschiebe und einen spektakulären Fehler erleide.
windows
binary-files
32-vs-64-bit
Septagramm
quelle
quelle
Antworten:
Nachdem ich die Header-Werte aus Richards Antwort untersucht hatte , kam ich zu einer Lösung, die schnell und einfach ist und nur einen Texteditor erfordert. Sogar Windows 'Standardnotepad.exe würde funktionieren.
Öffnen Sie die ausführbare Datei im Texteditor. Möglicherweise müssen Sie das
Open...
Dialogfeld des Editors ziehen und ablegen oder verwenden , da dieOpen with...
Option für ausführbare Dateien in Windows nicht im Kontextmenü angezeigt wird.Überprüfen Sie die ersten druckbaren Zeichen nach dem ersten Auftreten von
PE
. Dieser Teil wird höchstwahrscheinlich von mindestens einem Leerzeichen umgeben sein (könnte viel davon sein), so dass es leicht visuell gemacht werden kann.Folgendes werden Sie finden:
x86:
x64:
Ein Wort der Warnung: Die Verwendung des Standard-Editor für große Dateien kann sehr langsam sein. Verwenden Sie ihn daher besser nicht für Dateien, die größer als ein Megabyte oder weniger sind. In meinem Fall dauerte es ungefähr 30 Sekunden, bis eine 12-MiB-Datei angezeigt wurde. Notepad ++ war jedoch in der Lage, eine ausführbare Datei mit 120 MB fast sofort anzuzeigen.
Diese Lösung kann hilfreich sein, wenn Sie eine Datei auf einem Computer überprüfen müssen, auf dem Sie keine zusätzliche Software installieren können.
Zusätzliche Information:
Wenn Sie einen HEX-Editor zur Verfügung haben, befindet sich der Versatz von PE Signature am Versatz
0x3C
. Die Signatur lautetPE\0\0
(Buchstaben "P" und "E", gefolgt von zwei Null-Bytes), gefolgt von einem Zwei-Byte-Maschinentyp in Little Endian.Die relevanten Werte gelten
0x8664
für x64-ausführbare Dateien und0x14c
für x86. Es gibt viel mehr mögliche Werte, aber Sie werden wahrscheinlich nie auf einen dieser Werte stoßen oder solche ausführbaren Dateien auf Ihrem Windows-PC ausführen können.Die vollständige Liste der Maschinentypen sowie die übrigen EXE-Spezifikationen finden Sie im Abschnitt Maschinentypen mit Microsoft PE- und COFF-Spezifikation .
quelle
Microsoft PE and COFF Specification
, der so gut es geht ein dokumentierter Vertrag, sowie Anweisungen, wie Sie die genaue Adresse des PE-Headers finden in einer beliebigen.exe
Datei. Wenn Sie eine zuverlässigere Quelle als die offizielle Spezifikation von Microsoft für das von Microsoft selbst ausführbare Format haben, würde ich gerne wissen, was das ist.Das SDK-Tool
dumpbin.exe
mit der/headers
Option enthält diese Informationen. Vergleichen Sie diese beiden (die wichtigsten Informationen sind fett gedruckt).und
quelle
dumpbin /headers | findstr "machine"
vereinfacht die Verwendung die Darstellung dessen, wonach dieC:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Wenn Sie nicht das gesamte Windows SDK oder Visual Studio haben oder wollen, können Sie
sigcheck.exe
von SysInternals Folgendes verwenden :Ausgabe:
quelle
Ich kann bestätigen, dass das
file
Dienstprogramm (z. B. von Cygwin) zwischen ausführbaren 32-Bit- und 64-Bit-Dateien unterscheidet. Sie sehen wie folgt aus:Wie Sie sehen können, ist es sehr offensichtlich, welches welches ist. Außerdem wird zwischen ausführbaren Konsolen- und GUI-Dateien unterschieden.
quelle
MZ
stattPE
?Eine einfache Methode besteht darin, sie auszuführen (vorausgesetzt, Sie vertrauen ihr) und sich die Registerkarte process im Task-Manager anzusehen. Bei 32-Bit-Prozessen wird am Ende des Prozessnamens "* 32" angezeigt. Wenn Sie nicht bereit sind, auf Ihrem Computer zu laufen, können Sie den EXE-Explorer ausprobieren . Es werden eine ganze Reihe von Informationen zu ausführbaren Dateien angezeigt, einschließlich 32- oder 64-Bit-Dateien.
quelle
main
Einstiegspunkt und wird daher nicht als eigenständiger Prozess ausgeführt. Beim Laden wird eine Initialisierungsfunktion aufgerufen, die jedoch nicht "main" ist.Viele Leute haben die exzellente 7-Zip-Version installiert und den 7-Zip-Ordner hinzugefügt
PATH
. 7-zip versteht andere Dateiformate als ZIP und RAR, z. B. MSI-Dateien und ausführbare PE-Dateien. Verwenden Sie einfach die Befehlszeile7z.exe
für die betreffende PE-Datei (Exe oder DLL):Die Ausgabe umfasst die folgenden Zeilen, wobei die
CPU
Zeile entwederx86
oderx64
lautet, was hier abgefragt wird:quelle
file
Implementierung im Inneren?Die 64-Bit-Version von Process Explorer kann es Ihnen sagen. Führen Sie einfach die ausführbare Datei aus und öffnen Sie das Eigenschaftenfenster des Prozesses. Auf der Hauptregisterkarte befindet sich ein Eintrag mit der Aufschrift "Image: 32 Bit" oder "Image: 64 Bit".
quelle
Simply run the executable
Und wenn Sie das Programm nicht ausführen möchten ?Einfachster Weg (wenn die Daten nicht vertraulich sind)
Ich finde, dass Virustotal
File detail
der einfachste Weg ist, um herauszufinden, ob eine Binärdatei 32-Bit oder 64-Bit ist.Die
Additional information
Option liefert zusätzlich viele hilfreiche Informationen zur Datei.quelle
Die Methode, eine ausführbare Datei auszuführen und anschließend den Prozess-Explorer oder ein ähnliches Tool einzuchecken, weist einige offensichtliche Nachteile auf:
Die Methode Dumpbin.exe kann den Zweck wahrscheinlich lösen.
Eine weitere Alternative wäre Cygwin zu verwenden Datei - Befehl. Ich habe es jedoch nicht unter Windows getestet. Es funktioniert gut unter Linux.
BEARBEITEN: Gerade getestet file.exe auf Fenster. funktioniert gut. :)
quelle
cygwin
Pakets verzichten möchte, kann sich das Paket gnuwin32 zulegenfile
.file
Liest einfach Daten im Binärformat von der Festplatte und sucht nach magischen Zahlen, die sie identifizieren, und vergleicht sie mit einer Datenbank. Die 32-Bit-Programme von Windows werden als PE32 und die 64-Bit- und .NET-Programme als PE32 + angezeigt. Die Bit-Qualitätfile
macht keinen Unterschied - sowohl 32-Bit- als auch 64-Bit-Anwendungen können Daten von der Festplatte lesen, was alles ist, was sie benötigt.Hier ist eine Powershell-Lösung, keine externen Abhängigkeiten oder ähnliches. Öffnen Sie Powershell, fügen Sie die Funktion dort ein (drücken Sie zweimal die Eingabetaste, damit Sie zur Eingabeaufforderung zurückkehren), und verwenden Sie sie dann wie in meinen Beispielen unter der Funktion:
Hier ist eine Beispielausgabe:
quelle
$stream.dispose();
nach dem schließen hinzufügen ? Sollte Dateihandles freigeben. ( stackoverflow.com/questions/1999858/… )Sogar eine als 32-Bit markierte ausführbare Datei kann als 64-Bit ausgeführt werden, wenn es sich beispielsweise um eine ausführbare .NET-Datei handelt, die als 32- oder 64-Bit ausgeführt werden kann. Weitere Informationen finden Sie unter https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit . Die Antwort lautet: the Mit dem Dienstprogramm CORFLAGS können Sie bestimmen, wie eine .NET-Anwendung ausgeführt wird.
CORFLAGS.EXE-Ausgabe
Für ausführbare 32-Bit-Dateien:
Für ausführbare 64-Bit-Dateien:
Für ausführbare Dateien, die als 32- oder 64-Bit-Datei ausgeführt werden können und wenn möglich als 64-Bit-Datei ausgeführt werden:
Für ausführbare Dateien, die als 32- oder 64-Bit-Datei ausgeführt werden können, jedoch als 32-Bit-Datei ausgeführt werden, sofern sie nicht in einen 64-Bit-Prozess geladen werden:
quelle
corflags : error CF008 : The specified file does not have a valid managed header
)Sie können das
file
Tool auch im msys-Bundle von mingw verwenden . Es funktioniert wie der Unix-Befehl. Ähnlich funktioniert dasfile
Tool von GNUwin32 .quelle
Wenn Sie unter Windows 7 arbeiten, klicken Sie mit der rechten Maustaste auf die ausführbare Datei und wählen Sie Eigenschaften. Wählen Sie im Eigenschaftenfenster die Registerkarte Kompatibilität. Wenn Sie im Abschnitt "Kompatibilitätsmodus" Windows XP sehen, handelt es sich um eine 32-Bit-ausführbare Datei. Wenn Sie Windows Vista sehen, ist es 64-Bit.
quelle
Windows 8
Windows XP SP2
, andere zeigen alsVista
oderWindows 8
. Diese Methode ist also nicht korrekt.So fügen Sie Ihrem Kontextmenü einen 32/64-Bit-Test hinzu
Erstellen Sie eine Textdatei mit dem Namen exetest.reg, die den folgenden Code enthält:
Erstellen Sie eine Textdatei mit dem Namen,
x86TestStart.bat
die nur diese Codezeile enthält, und speichern Sie sie in C: \ temp:Erstellen Sie eine Textdatei mit dem Namen,
x86or64.vbs
die diesen Code enthält, und speichern Sie sie in C: \ temp:Doppelklicken Sie auf die Datei exetest.reg: In der Windows-Registrierung wird ein neuer Schlüssel hinzugefügt:
Wenn Sie mit der rechten Maustaste auf eine ausführbare Datei klicken, wird sie im Kontextmenü als " 32/64-Bit-Test " angezeigt.
Durch Klicken auf das Element wird die Batch-Datei
c:\\temp\\x86TestStart.bat\
gestartet, die die VBscript-Datei startetx86or64.vbs
, die die exe-Signatur liest und das Ergebnis anzeigt.Wenn Sie die Registrierung nicht manipulieren können oder möchten, kopieren Sie einfach die VBS-Datei in die QuickLaunch-Leiste und ziehen Sie die ausführbare Datei darüber.
quelle
Meine zwei Cent werden nur Abhängigkeits-Walker herunterladen und überprüfen, was für die Architektur in einer der ausführbaren Dateien verwendet wurde.
Wie man es benutzt:
Laden Sie einfach die App herunter, starten Sie sie und klicken Sie auf das Symbol zum Öffnen. → Suchen Sie eine * .exe-Datei. → Wählen Sie diese aus. Nach Abschluss des Reflexionsscans wird unten ein Raster mit Daten angezeigt, in dem sich in einer Spalte Details zur Architektur befinden. x64)
Öffnen Sie die ausführbare Datei und sehen Sie sich die Build-Architektur an
quelle
Ich habe das nicht erwähnt gesehen. Es gibt ein PE-Viewer-Programm namens CFF Explorer von NTCore , das Ihnen diese Informationen zur Verfügung stellen kann. Es kann heruntergeladen und als portable Version ausgeführt werden, aber Sie können es auch installieren, wenn Sie möchten.
Rechtsklick auf dem binären (
.exe
,.dll
etc.) und wählen Sie „Öffnen mit CFF Explorer“. Gehen Sie zu Nt Headers -> File Header -> Klicken Sie im Feld "Characteristics" auf "Click here".Wenn es sich um ein 32-Bit-Programm handelt, ist das Kontrollkästchen "32-Bit-Wortmaschine" aktiviert. Zum Beispiel habe ich die 32-Bit-Version von Notepad ++ installiert, wie Sie im Bild unten sehen können. Ansonsten ist es 64bit.
quelle
.DMP
Dump in Visual Studioquelle
Meine zwei Cent: Als C ++ - Entwickler ist Dependency Walker ( http://www.dependencywalker.com/ ) sehr informativ und zeigt nicht nur 64/32 Bit an, sondern auch jede beteiligte Dll:
Sie können 64 links von jedem Dateinamen sehen ...
quelle
Doch WSL ‚s
file
Befehl funktioniert sehr.file /mnt/c/p/bin/rg.exe
würde ausgeben:file /mnt/c/p/bin/u.exe
würde ausgeben:quelle
Die Plattformspalte im Task-Manager von Windows 10
Windows 7 hat keine Plattformspalte. Der Windows 7 Task-Manager zeigt es also nicht an.
In Windows 10 ist das Auswählen von Spalten nicht mehr unter "Ansicht". In Windows 10 klicken Sie auf der Registerkarte "Details" mit der rechten Maustaste auf die Spaltenüberschrift und wählen dann "Spalten auswählen". Aktivieren Sie dann das Kontrollkästchen für "Plattform".
quelle