1 votes

Tous les exécutables que je lis commencent par l'en-tête MZ

Au départ, j'essayais de créer un programme permettant de distinguer les exécutables DOS (16 bits) et Windows (32/64 bits).

J'ai lu dans une autre réponse qu'un exécutable peut être classé sur la base de ses deux premiers octets. (MZ/...)

Mais lorsque je suis allé manuellement comparer quelques exécutables (à la fois 16 et (32/64 bit)), j'ai constaté qu'ils commençaient tous par MZ .

Y a-t-il une raison à cela ou est-ce que je fais quelque chose de mal ?

Les exécutables 16 bits ont été écrits par moi en assembleur->compilés avec TASM et les exécutables 32/64 bits proviennent des fichiers système de mon ordinateur. C:\Windows\System32

Existe-t-il un autre moyen plus précis de distinguer un exécutable ?

0voto

DavidPostill Points 140654

J'ai découvert qu'ils commençaient tous par MZ

MZ est en effet la signature caractéristique d'un .exe fichier :

Le format exécutable DOS MZ est le format de fichier exécutable utilisé pour les fichiers .EXE sous DOS.

Le fichier peut être identifié par la chaîne ASCII "MZ" (hexadécimal : 4D 5A) au début du fichier (le "numéro magique"). "MZ" sont les initiales de Mark Zbikowski, l'un des principaux développeurs de MS-DOS.

Source : Exécutable DOS MZ - Wikipédia

Cette signature a ensuite été étendue à ses descendants (dont NE et PE) :

Le New Executable (abrégé NE ou NewEXE) est un format de fichier .exe 16 bits, successeur du format exécutable MZ de DOS. Il a été utilisé dans Windows 1.0-3.x, MS-DOS multitâche 4.0,[1] OS/2 1.x, et le sous-ensemble OS/2 de Windows NT jusqu'à la version 5.0 (Windows 2000). Un NE est également appelé exécutable segmenté.

Source : Nouvel exécutable - Wikipedia

Le format Portable Executable (PE) est un format de fichier pour les exécutables, code objet, DLL et autres utilisés dans les versions 32 bits et 64 bits de systèmes d'exploitation Windows. Le format PE est une structure de données qui encapsule les informations nécessaires au chargeur du système d'exploitation Windows pour gérer le code exécutable enveloppé. Cela inclut les références de bibliothèques dynamiques dynamiques pour l'édition de liens, les tables d'exportation et d'importation d'API des données de gestion des ressources et des données de stockage local des threads (TLS). Sur les systèmes d'exploitation NT NT, le format PE est utilisé pour les fichiers EXE, DLL, SYS (pilote de périphérique) et d'autres types de fichiers. d'autres types de fichiers. Le format EFI (Extensible Firmware Interface) spécification indique que PE est le format exécutable standard dans les environnements EFI dans les environnements EFI.

Sur les systèmes d'exploitation Windows NT, PE prend actuellement en charge les systèmes IA-32, IA-64, x86, x86-64 (AMD64/Intel 64), ARM et ARM64. d'instructions (ISA). Avant Windows 2000, Windows NT (et donc PE) supportait les ISA MIPS, Alpha et PowerPC. Comme PE est utilisé dans Windows CE, il continue à prendre en charge plusieurs variantes des architectures MIPS, ARM (y compris Thumb) et SuperH.

Source : Portable Executable - Wikipedia

Alors MZ est utilisé pour 16, 32 et 64 bits .exe et ne peuvent pas être utilisés pour distinguer les programmes 16 et 32/64 bits.


Alors comment faire la différence entre les programmes 16 et 32/64 bits ?

Windows a étendu l'ancien format d'exécutable DOS plusieurs fois, donc si vous regardez un exécutable Windows "moderne", tout près du début, il y aura un MZ (ou éventuellement un ZM si le programme est en cours). début, il y aura un MZ (ou éventuellement un ZM si l'exécutable est destiné à un système qui utilise l'ordre inverse des bits). Cela désigne l'en-tête pour le deuxième format d'exécutable DOS, connu simplement sous le nom de format MZ.

Au-delà, vous verrez un charabia apparent, suivi de quelque chose du genre "Ce programme ne peut pas être exécuté en mode DOS". Ce charabia est en fait un programme DOS très simple qui imprime un message message pour indiquer à l'utilisateur que ce programme ne peut pas être exécuté en mode DOS.

Après ça, vous avez l'en-tête de l'exécutable, qui peut commencer par l'une des quatre paires de lettres NE, LX, LE ou PE. Si vous ne voyez pas l'une de ces lettres et le message mentionné ci-dessus, il s'agit d'une application DOS DOS.

Source : Comment vérifier si un binaire est de 16 bits sous Windows ? Réponse de Austin Hemmelgarn

Vous pouvez également utiliser le système Unix file (qui est disponible dans Cygwin et Sous-système Windows pour Linux :

C:\Program Files\GnuWin32\bin>file "C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE"
C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE; PE32 executable for MS Windows (GUI) Intel 80386 32-bit

Je crois que lorsque c'est un exécutable 16 bits, il dit quelque chose du genre d'un exécutable MS-DOS ou Win 3.X.

Source : Résolu : Astuce ou outil pour distinguer les fichiers .exe 16/32/64 bits ? | Le gars du support technique

Le lien ci-dessus inclut également le code source (qui ressemble à du C) avec lequel vous pouvez jouer.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X