Section courante

A propos

Section administrative du site

Introduction

Les fichiers exécutables (.EXE) du systèmes d'exploitation DOS contiennent des informations communes permettant de savoir de quel façon il est chargé en mémoire. Il s'agit d'une structure de données de 28 octets situé au début du fichier exécutable de format MZ. Les deux premiers caractères sont la signature pour indiquer qu'il s'agit d'un fichier exécutable et les 13 mots suivants correspondent à des champs de données.

Visualisateur d'entête EXE

Voici un petit programme écrit en Turbo Pascal permettant d'afficher le contenu de cette entête sous forme de chiffre hexadécimal et décimal :

  1. Program EXEHEAD;
  2.  
  3. Type
  4.  ExeHeaderRec=Record
  5.   Signature:Array[0..1]of Char;
  6.   LengthRem:Word;
  7.   LengthPages:Word;
  8.   NumReloc:Word;
  9.   HeaderSize:Word;
  10.   MinHeap:Word;
  11.   MaxHeap:Word;
  12.   StackSeg:Word;
  13.   StackPtr:Word;
  14.   CheckSum:Word;
  15.   IpInit:Word;
  16.   CodeSeg:Word;
  17.   RelocOfs:Word;
  18.   OverlayNum:Word;
  19.  End;
  20.  
  21. Var 
  22.  Fich:File;
  23.  Header:ExeHeaderRec;
  24.  
  25. Procedure Help;Begin
  26.  Writeln;
  27.  Writeln('EXEHEAD: Visualisateur d''entete EXE');
  28.  Writeln;
  29.  Writeln('SYNTAXE: EXEHEAD program.exe');
  30.  Writeln;
  31. End;
  32.  
  33. Function WordToHex(Number:Word):String;
  34. Const Hexa:Array[0..15] of Char=('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
  35. Begin
  36.  WordToHex:=Hexa[Hi(Number) shr 4]+Hexa[Hi(Number) and $F]+Hexa[Lo(Number) shr 4]+Hexa[Lo(Number) and $F];
  37. End;
  38.  
  39. BEGIN
  40.  If((ParamCount = 0)or(ParamCount > 1))Then Help
  41.  Else 
  42.  Begin
  43.   Assign(Fich, ParamStr(1));
  44.   Reset(Fich,1);
  45.   BlockRead(Fich,Header,SizeOf(Header));
  46.   Close (Fich);
  47.   WriteLn;
  48.   Writeln('Analyse de l''entete...');
  49.   WriteLn;
  50.   If(Header.Signature[0]='M') and (Header.Signature[1]='Z')Then Begin
  51.    WriteLn('Signature du fichier : ',Header.Signature[0],Header.Signature[1]);
  52.    WriteLn('Taille de la dernière page : ' ,WordToHex(Header.LengthRem),'h, ',Header.LengthRem);
  53.    WriteLn('Nombres de pages : ' ,WordToHex(Header.LengthPages),'h, ', Header.LengthPages);
  54.    WriteLn('Entrées de la table de relocalisation : ' ,WordToHex(Header.NumReloc),'h, ', Header.NumReloc);
  55.    WriteLn('Paragraphes de l''en-tête : ',WordToHex(Header.HeaderSize),'h, ', Header.HeaderSize);
  56.    WriteLn('MINALLOC : ' ,WordToHex(Header.MinHeap),'h, ', Header.MinHeap);
  57.    WriteLn('MAXALLOC : ' ,WordToHex(Header.MaxHeap),'h, ', Header.MaxHeap);
  58.    WriteLn('SS initial (Segment de la pile) : ' ,WordToHex(Header.StackSeg),'h, ', Header.StackSeg);
  59.    WriteLn('SP initial (Taille de la pile) : ' ,WordToHex(Header.StackPtr),'h, ',Header.StackPtr);
  60.    WriteLn('Sommation de contrôle : ' ,WordToHex(Header.CheckSum),'h, ',Header.CheckSum);
  61.    WriteLn('IP initial : ' ,WordToHex(Header.IpInit),'h, ',Header.IpInit);
  62.    WriteLn('CS initial : ' ,WordToHex(Header.CodeSeg),'h, ',Header.CodeSeg);
  63.    WriteLn('Deplacement de la table de relocalisation : ' ,WordToHex(Header.RelocOfs),'h, ',Header.RelocOfs);
  64.    WriteLn('Nombre du segment de recouvrement : ' ,WordToHex(Header.OverlayNum),'h, ',Header.OverlayNum);
  65.   End
  66.    Else 
  67.   Begin
  68.    WriteLn('Analyse impossible, le fichier n''est pas d''un type MZ');
  69.   End;
  70.  End;
  71. END.

Vous compilez le programme et ensuite vous exécutez la commande suivante pour lui demander de visualiser le contenu du fichier de sa propre entête EXE :

EXEHEAD exehead.exe

vous obtiendrez alors un résultat ressemblant à ceci :

Analyse de l'entete...

Signature du fichier                        : MZ
Taille de la dernière page                  : 0000h, 0
Nombres de pages                            : 000Dh, 13
Entr?es de la table de relocalisation       : 0087h, 135
Paragraphes de l'en-tête                    : 0024h, 36
MINALLOC                                    : 042Eh, 1070
MAXALLOC                                    : A42Eh, 42030
SS initial (Segment de la pile)             : 01AAh, 426
SP initial (Taille de la pile)              : 4000h, 16384
Sommation de contrôle                       : 0000h, 0
IP initial                                  : 0431h, 1073
CS initial                                  : 0000h, 0
Deplacement de la table de relocalisation   : 001Ch, 28
Nombre du segment de recouvrement           : 0000h, 0

Voir également

Fichiers - Lexique des extensions de fichier - Fichier EXE - Format de fichier MZ

Dernière mise à jour : Samedi, le 18 avril 2020