Existe-t-il un moyen simple de vérifier si un binaire est au format 32 ou 64 bits sous Windows? Je dois vérifier avant de transférer le programme sur une machine 32 bits et de subir un échec spectaculaire.
windows
binary-files
32-vs-64-bit
Septagram
la source
la source
Réponses:
Après avoir examiné les valeurs d'en-tête de la réponse de Richard , j'ai proposé une solution rapide, simple et ne nécessitant qu'un éditeur de texte. Même le bloc-notes par défaut de Windows fonctionnerait.
Ouvrez l'exécutable dans l'éditeur de texte. Vous devrez peut-être glisser-déposer ou utiliser la
Open...
boîte de dialogue de l'éditeur , car Windows n'affiche pas l'Open with...
option dans le menu contextuel des exécutables.Vérifiez les premiers caractères imprimables après la première occurrence de
PE
. Il est fort probable que cette partie soit entourée d'au moins quelques espaces (cela pourrait en être beaucoup), de sorte qu'elle peut être facilement réalisée visuellement.Voici ce que vous allez trouver:
x86:
x64:
Un mot d'avertissement: l' utilisation du bloc-notes par défaut sur les gros fichiers peut être très lente, il est donc préférable de ne pas l'utiliser pour des fichiers plus volumineux qu'un mégaoctet ou peu. Dans mon cas, il a fallu environ 30 secondes pour afficher un fichier de 12 Mo. Notepad ++, cependant, était capable d'afficher un exécutable de 120 Mio presque instantanément.
Cette solution peut être utile si vous devez inspecter un fichier sur une machine sur laquelle vous ne pouvez installer aucun logiciel supplémentaire.
Information additionnelle:
Si vous disposez d'un éditeur HEX, le décalage de PE Signature est situé au décalage
0x3C
. La signature estPE\0\0
(lettres "P" et "E" suivies de deux octets nuls), suivies d'un type de machine de deux octets dans Little Endian.Les valeurs pertinentes
0x8664
concernent l'exécutable x64 et0x14c
x86. Il y a beaucoup plus de valeurs possibles, mais vous ne rencontrerez probablement jamais aucune de ces valeurs, ni ne pourrez exécuter de tels exécutables sur votre PC Windows.La liste complète des types de machines, ainsi que le reste des spécifications .exe, se trouvent dans la section Types de machines de spécifications PE PE et COFF .
la source
Microsoft PE and COFF Specification
, qui est un contrat aussi documenté que possible, ainsi que des instructions sur la façon de trouver l'adresse exacte de l'en-tête PE. dans n'importe quel.exe
fichier. Si vous avez une source plus fiable que les spécifications officielles de Microsoft sur le propre format exécutable de Microsoft, j'aimerais savoir ce que c'est.Le SDK
dumpbin.exe
avec l'/headers
option inclut cette information, comparez ces deux (j'ai ajouté en gras pour l'information clé)et
la source
dumpbin /headers | findstr "machine"
simplifie grandement la présentation de ce que le contrôle qualité recherche ...C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
Si vous ne possédez pas ou ne voulez pas tout le Kit de développement logiciel (SDK) Windows ou Visual Studio, vous pouvez utiliser
sigcheck.exe
depuis SysInternals :Sortie:
la source
Je peux confirmer que l'
file
utilitaire (de cygwin, par exemple) fera la distinction entre les exécutables 32 et 64 bits. Ils apparaissent comme suit:Comme vous pouvez le constater, il est très évident de savoir lequel est lequel. De plus, il fait la distinction entre les exécutables de la console et de l’interface graphique, ce qui est également évident.
la source
MZ
au lieu dePE
?Une méthode simple consiste à l'exécuter (en supposant que vous y faites confiance) et à consulter l'onglet Processus du gestionnaire de tâches. Les processus 32 bits afficheront "* 32" à la fin du nom du processus. Si ce n'est pas quelque chose que vous voulez exécuter sur votre ordinateur, vous pouvez essayer EXE Explorer . Il montrera une foule d'informations sur les exécutables, y compris s'il s'agit de 32 ou 64 bits.
la source
main
point d'entrée et ne s'exécutera donc pas en tant que processus autonome. Il y a une fonction d'initialisation appelée quand il est chargé mais ce n'est pas "main".Beaucoup de gens ont l'excellent 7-zip installé et ont ajouté le dossier 7-Zip à leur dossier
PATH
. 7-zip comprend les formats de fichiers autres que ZIP et RAR, tels que les fichiers MSI et les exécutables PE. Utilisez simplement la ligne de commande7z.exe
sur le fichier PE (Exe ou DLL) en question:Sortie comprendra des lignes comme suit, avec la
CPU
ligne de lecture soitx86
oux64
, ce qui est ce qui est demandé ici:la source
file
implémentation à l'intérieur?La version 64 bits de Process Explorer peut vous en informer. Exécutez simplement l'exécutable et ouvrez la fenêtre de propriétés du processus. Dans l'onglet principal, une entrée indique "Image: 32 bits" ou "Image: 64 bits".
la source
Simply run the executable
Et si vous ne voulez pas exécuter le programme?Manière la plus simple (quand les données ne sont pas confidentielles)
Je trouve que Virustotal
File detail
est le moyen le plus simple de savoir si un binaire est 32 bits ou 64 bits.L'
Additional information
option fournit en outre de nombreuses informations utiles sur le fichier.la source
La méthode consistant à exécuter un exécutable puis à archiver l’explorateur de processus ou un outil similaire présente certains inconvénients évidents:
La méthode Dumpbin.exe peut probablement résoudre le problème.
Une autre alternative serait d'utiliser la commande de fichier de cygwin . Cependant, je ne l'ai pas testé sur Windows. Cela fonctionne bien sur les Linux.
EDIT: Je viens de tester le fichier.exe sur la fenêtre. fonctionne bien. :)
la source
cygwin
paquet peuvent récupérer le paquet gnuwin32file
.file
lit simplement les données du disque au format binaire et vérifie si des nombres magiques les identifient et les comparent à une base de données. Les programmes 32 bits de Windows apparaissent en tant que PE32 et les programmes 64 bits et .NET en tant que PE32 +. Le nombre defile
bits en lui-même ne fait aucune différence - les applications 32 bits et 64 bits peuvent lire les données du disque, ce qui est tout ce dont il a besoin.Voici une solution Powershell, aucune dépendance externe ou quoi que ce soit. Ouvrez Powershell, collez la fonction là-bas (appuyez deux fois sur Entrée pour revenir à l'invite), puis utilisez-la comme dans mes exemples ci-dessous:
Voici un exemple de sortie:
la source
$stream.dispose();
après la clôture? Doit libérer les descripteurs de fichier. ( stackoverflow.com/questions/1999858/… )Même un exécutable marqué en 32 bits peut être exécuté en 64 bits si, par exemple, il s'agit d'un exécutable .NET pouvant être exécuté en 32 ou 64 bits. Pour plus d'informations, voir https://stackoverflow.com/questions/3782191/how-do-i-determine-if-a-net-application-is-32-or-64-bit , qui contient une réponse indiquant que le L’utilitaire CORFLAGS peut être utilisé pour déterminer le fonctionnement d’une application .NET.
Sortie CORFLAGS.EXE
Pour l'exécutable 32 bits:
Pour l'exécutable 64 bits:
Pour les exécutables pouvant fonctionner en 32 ou 64 bits et exécutés en 64 bits lorsque cela est possible:
Pour les exécutables pouvant fonctionner en 32 ou 64 bits, mais s'exécutant en 32 bits sauf s'ils sont chargés dans un processus 64 bits:
la source
corflags : error CF008 : The specified file does not have a valid managed header
)vous pouvez également utiliser l'
file
outil à partir du groupe msys de mingw . Cela fonctionne comme la commande unix. Travaux similaires l'file
outil de GNUwin32 .la source
Si vous êtes sous Windows 7, dans un explorateur Windows, cliquez avec le bouton droit sur l'exécutable et sélectionnez Propriétés. Dans la fenêtre des propriétés, sélectionnez l’onglet Compatibilité. Si vous voyez Windows XP dans la section Mode de compatibilité, il s'agit d'un exécutable 32 bits. Si vous voyez Windows Vista, il est en 64 bits.
la source
Windows 8
Windows XP SP2
mais d'autres montrent commeVista
ouWindows 8
. Donc, cette méthode n'est pas correcte.Comment ajouter un test 32/64 bits à votre menu contextuel
Créez un fichier texte nommé exetest.reg et contenant ce code:
Créez un fichier texte nommé
x86TestStart.bat
contenant uniquement cette ligne de code et enregistrez-le dans C: \ temp:Créez un fichier texte nommé
x86or64.vbs
contenant ce code et enregistrez-le dans C: \ temp:Double-cliquez sur le fichier exetest.reg: une nouvelle clé sera ajoutée dans le registre de Windows:
Il apparaîtra comme " test 32/64 bits " dans le menu contextuel en cliquant avec le bouton droit de la souris sur un fichier exécutable.
En cliquant sur l'élément, le fichier de commandes démarrera
c:\\temp\\x86TestStart.bat\
, ce qui démarrera le fichier VBscriptx86or64.vbs
, qui lira la signature exe et affichera le résultat.Si vous ne pouvez pas ou ne voulez pas altérer le registre, copiez simplement le fichier .vbs dans la barre QuickLaunch et faites glisser le fichier exécutable dessus.
la source
Mes deux cents seront juste télécharger dépendance dépendance et vérifier ce qui pour l'architecture a été utilisé dans l'un des fichiers exécutables.
Comment l'utiliser:
Téléchargez simplement l’application, démarrez-la, cliquez sur l’icône ouverte → trouvez un fichier * .exe → sélectionnez et en bas, une fois l’analyse par réflexion terminée, une grille contenant des données dans laquelle une colonne contient des détails «d’architecture» (x86, x64)
Ouvrir l'exécutable et voir l'architecture de construction
la source
Je n'ai pas vu cela mentionné. Il existe un programme de visualisation PE appelé CFF Explorer par NTCore , qui peut vous fournir ces informations. Il peut être téléchargé et exécuté en mode portable, mais vous pouvez également l'installer si vous le souhaitez.
Faites un clic droit sur le fichier binaire (
.exe
,.dll
etc.) et sélectionnez "Ouvrir avec CFF Explorer". Allez à Nt En-têtes -> En-tête de fichier -> Dans le champ "Caractéristiques", cliquez sur "Cliquez ici".S'il s'agit d'un programme 32 bits, la case à cocher "Machine à 32 mots" sera cochée. Par exemple, j'ai installé la version 32 bits de Notepad ++ comme vous pouvez le voir dans l'image ci-dessous. Sinon, c'est 64 bits.
la source
.DMP
vidage dans Visual Studio.la source
Mes deux cents: en tant que développeur C ++, Dependency Walker ( http://www.dependencywalker.com/ ) est très informatif. Il affiche non seulement les 64/32 bits, mais également toutes les Dll impliquées:
Vous pouvez voir 64 à gauche de chaque nom de fichier ...
la source
Pourtant, la commande de WSL
file
fonctionne grandement.file /mnt/c/p/bin/rg.exe
produirait:file /mnt/c/p/bin/u.exe
produirait:la source
La colonne de la plateforme dans le gestionnaire de tâches de Windows 10
Windows 7 n'a pas de colonne de plate-forme. Donc, le gestionnaire de tâches de Windows 7 ne l'affichera pas.
Dans Windows 10, le choix des colonnes n’est plus dans la vue. Sous Windows 10, lorsque vous êtes dans l'onglet Détails, vous cliquez avec le bouton droit de la souris sur l'en-tête de colonne, puis sur "sélectionner les colonnes". Cochez ensuite la case 'plateforme'.
la source