Qu'est-ce que c'est l'entête NE ?
L'entête NE est utilisé par les fichiers exécutables de l'environnement graphique et du système d'exploitation Windows ainsi que par le système d'exploitation OS/2 de l'entreprise IBM. Habituellement, cette entête ce situe après le déplacement 0080h de départ de l'entête MZ du format EXE original. S'il est situé avant, cette situation risque de provoquer des conflits dans l'environnement graphique de Windows.
Descriptions
Voici la significations des différentes informations contenu dans le tableau :
- Déplacement (Hex) : Le déplacement dans le fichier, il s'agit d'un déplacement à effectuer par rapport à son entête. Les valeurs utilisées sont 0 à 9, ensuite de A à F. Les anglais appel le déplacement Offset.
- Taille : Indique la taille du champ dans l'entête de l'exécutable.
- Description : Description du déplacement courant.
- Valeur de démarrage (Hex) : Valeur de démarrage recommendé dans un fichier exécutable vide.
- Headersize : Taille de l'entête.
Taille | Type de valeurs |
---|---|
Octet | Une valeur situé entre 0 et 255 |
Mot | Une valeur situé entre 0 et 65535 (2 octets = 256 x 256 = 65536) |
Double mot | Une valeur situé entre 0 et 4294967295 |
4 octets | 256 x 256 x 256 x 256 = 4294967296 |
Entête NE (Nouveau Exécutable) :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) | |
---|---|---|---|---|
0000h | 2 octets | Ce champ contient la signature "NE" | 4Eh 45h | |
0002h | Octet | Ce champ contient la version de liaison (Linker major version) | 01h | |
0003h | Octet | Ce champ contient la sous-version de liaison (Linker minor version) | 00h | |
0004h | Mot | Ce champ contient le déplacement de départ de l'entête de la table d'entrée. | 00h 00h | |
0006h | Mot | Ce champ contient la longueur de la table d'entrée. | 00h 00h | |
0008h | Double mot | Ce champ contient le code CRC du fichier à chargé (0 avec TPW de Borland) | 00h 00h 00h 00h | |
000Ch | Octet | Ce champ contient le drapeau du programme : | 00h | |
Bit(s) | Description | |||
0 à 1 | Type DGROUP 0 = Aucun 1 = Partage simple 2 = Multiple (non partagé) 3 = (nulle) |
|||
2 | Initialisation global | |||
3 | Mode protégé seulement | |||
4 | Instructions code machine de la famille 8086 | |||
5 | Instructions code machine de la famille 80286 | |||
6 | Instructions code machine de la famille 80386 | |||
7 | Instructions coprocesseur mathématique 80x87 | |||
000Dh | Octet | Ce champ contient les drapeaux d'option de l'application | 00h | |
Bit(s) | Description | |||
0 à 2 | Type d'Application : 001b = Plein écran (pas l'environnement de Windows ou le P.M. API d'OS/2) 010b = Compatible avec Windows/P.M. API 011b = Utilise Windows/P.M. API |
|||
3 | C'est une application de la famille d'OS/2. | |||
5 | 0 = Exécutable, 1 = Erreurs dans l'image | |||
6 | Programme non-conforme (Pile valide n'est pas maintenu) | |||
7 | DLL ou pilote de l'Application (Si l'information SS:SP est invalide, CS:IP pointes sur une routine FAR d'initialisation appeler avec AX=Handle du module handle lequel retourne AX=0000h en cas d'échec, AX<>0000h si l'initialisation est un succès) |
|||
000Eh | Mot | Ce champ contient l'index de données segment automatique | 00h 00h | |
0010h | Mot | Ce champ contient la taille initiale du tas local | 00h 00h | |
0012h | Mot | Ce champ contient la taille initiale de la pile (additionné au segment de donnée, 0000h si SS ≠ DS) | 00h 00h | |
0014h | Double mot | Ce champ contient le point d'entrée du programme (CS:IP), "CS" est le segment de l'index | 00h 00h 00h 00h | |
0018h | Double mot | Ce champ contient un pointeur de la pile initiale (SS:SP), "SS" est l'index de segment. Si SS = Index de données segment automatique et SP = 0000h, le pointeur de pile est fixé au maximum de Index de données segment automatique, juste avant le tas local. | 00h 00h 00h 00h | |
001Ch | Mot | Ce champ contient le compteur de segment | 00h 00h | |
001Eh | Mot | Ce champ contient le compteur de référence du module | 00h 00h | |
0020h | Mot | Ce champ contient la longueur de la table de nom non-résidente en octet. | 00h 00h | |
0022h | Mot | Ce champ contient le déplacement de départ de l'entête de la table de segment. | 00h 00h | |
0024h | Mot | Ce champ contient le déplacement de départ de l'entête de la table de ressource | 00h 00h | |
0026h | Mot | Ce champ contient le déplacement de départ de l'entête de la table de nom résident | 00h 00h | |
0028h | Mot | Ce champ contient le déplacement de départ de l'entête de la table de référence | 00h 00h | |
002Ah | Mot | Ce champ contient le déplacement de départ de l'entête de la table de nom d'importation (tableau de chaîne de caractères de format ASCIZ) | 00h 00h | |
002Ch | Double mot | Ce champ contient le déplacement de départ de l'entête de la table de nom de non-resident | 00h 00h 00h 00h | |
0030h | Mot | Ce champ contient le compteur du point d'entrée déplacable contenu dans la table d'entrée. | 00h 00h | |
0032h | Mot | Ce champ contient la taille d'alignement du fichier multiple de 512 (requérant un décalage de bit de 9) | 00h 00h | |
0034h | Mot | Ce champ contient le nombre d'entrées dans la table ressource | 00h 00h | |
0036h | Octet | Ce champ contient le système d'exploitation destinataire : | 00h | |
Valeur | Description | |||
00h | Inconnu | |||
01h | OS/2 | |||
02h | Windows | |||
03h | MS-DOS 4.x européen | |||
04h | Windows 386 | |||
05h | BOSS (Borland Operating System Services) | |||
0037h | Octet | Autre drapeaux d'EXE | 00h | |
Bit(s) | Description | |||
0 | Supporte les noms de fichiers long | |||
1 | Mode protégée 2.X | |||
2 | Police de caractères proportionnel 2.X | |||
3 | Région "Gangload" | |||
0038h | Mot | Déplacement de retour ou départ de la région "gangload" | 00h 00h | |
003Ah | Mot | Déplacement de référence segment ou longueur de la région "gangload" | 00h 00h | |
003Ch | Mot | Taille minimal de la région du "Swap Code" | 00h 00h | |
003Eh | Octet | Sous-Version de Windows | 00h | |
003Fh | Octet | Version de Windows | 04h |
Enregistrement de la table de segment NE :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) | |
---|---|---|---|---|
0000h | Mot | Déplacement dans le fichier (Décalage à gauche pour aligner sur le déplacement de demande d'octet) | 00h 00h | |
0002h | Mot | Longueur de l'image dans le fichier (0000h = 64Ko) | 00h 00h | |
0004h | Mot | Attributs de Segment | 00h 00h | |
Bit(s) | Description | |||
0 | Segment de donnée reliée au segment de code | |||
1 | Inutilisé? | |||
2 | Mode réel | |||
3 | Héritage | |||
4 | Déplaçable | |||
5 | Partagable | |||
6 | Préchargeable demande chargement | |||
7 | Execute seulement (codes) ou lecture seulement (données) | |||
8 | Rélaction des segments nécessaires? | |||
9 | Information de déboguage présent | |||
10,11 | 80286 DPL bits | |||
12 | Injectable de la mémoire | |||
13 à 15 | Priorité d'injection de la mémoire | |||
0006h | Mot | Nombre d'octets devant être allouée dans le segment (0000h = 64Ko) | 00h 00h |
Table d'entrée NE (un item de la liste) :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) | ||
---|---|---|---|---|---|
0000h | Octet | Nombre de point d'entrée (00h si c'est la fin de la liste) | 00h | ||
0001h | Octet | Numéro de Segment (00h si c'est la fin de la liste) | 00h | ||
0002h | 3 octets | Entrée d'enregistrements | 00h 00h 00h | ||
Déplacement | Type | Description | |||
0000h | Octet | Drapeaux Bit 0: Exporter Bit 1: Simple données Bits 2-7: Inutilisé |
|||
0001h | Mot | Déplacement dans le segment |
Donnée de réallocation NE :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) | ||
---|---|---|---|---|---|
0000h | Mot | Nombre de réallocation d'items. | 00h 00h | ||
0002h | 8 Octets par item | Réallocation d'items | [Items] | ||
Déplacement | Type | Description | |||
0000h | Octet | Type de réallocation: 00h = LOBYTE 02h = BASE 03h = PTR 05h = OFFS 0Bh = PTR48 0Dh = OFFS32 |
|||
0001h | Octet | Drapeaux Bit 2: Additive |
|||
0002h | Mot | Déplacement dans le segment | |||
0004h | Mot | Adresse destinataire dans le segment | |||
0006h | Mot | Adresse destinataire dans le déplacement |
Données ressource NE :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) | ||
---|---|---|---|---|---|
0000h | Mot | Compteur de décalage pour les données ressouces. | 00h 00h | ||
0002h | Octets | Enregistrement de ressource | [Enregistrements] | ||
Déplacement | Type | Description | |||
0000h | Mot | Type d'identicateur (ID) 0000h si c'est la fin de la ressource des enregistrements >= 8000h si le type est entier autrement le déplacement de départ est dans la table de ressource au type de chaîne de caractères. |
|||
0002h | Mot | Nombre de ressource dans le type | |||
0004h | Double mot | Réservé pour l'exécution. | |||
0008h | Mot | Entrée de la ressource (NE) |
Ressource d'entrée NE :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) |
---|---|---|---|
0000h | Mot | Déplacement d'alignement des unités de démarrage pour le fichier contenant les ressources de données. | 00h 00h |
0002h | Mot | Longueur de l'image ressource en octets. | 00h 00h |
0004h | Mot | Drapeaux bit 4: Déplacable bit 5: Partageable bit 6: Préchargable |
00h 00h |
0006h | Mot | Identificateur de Ressource >= 8000h si c'est une ressource entière autrement déplacement de départ de la ressource de la table de ressource. |
00h 00h |
0008h | Double mot | Réservé à des fins d'exécution. | 00h 00h 00h 00h |
Table de référence du module NE :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) | ||
---|---|---|---|---|---|
0000h | Octet | Nombre d'enregistrements dans cette partie (00h si c'est le dernier de la table) | 00h | ||
0001h | Octet | Indicateur de Segment: 00h = Inutilisée FFh = Segment déplacable, nombre de segment d'entrée autrement nombre de segment fixe. |
00h | ||
0002h | Octets | Format de l'enregistrement de segment | [Enregistrements] | ||
Déplacement | Type | Description | |||
0000h | Octet | Drapeaux bit 0: Entrée des exportations bit 1: Entrée utilisé globalement pour le partages des données bits 7-3: Nombre de mots de paramètres |
|||
--- segment fixe --- | |||||
0001h | Mot | Déplacement | |||
--- segment déplacable --- | |||||
0001h | 2 Octets | instruction INT 3Fh (CDh 3Fh) | |||
0003h | Octet | Nombre de segment | |||
0005h | Mot | Déplacement |
Table d'entrée de nom non-résidente/résidente NE :
Déplacement (Hexadécimal) | Type | Description | Valeur de démarrage (Hexadécimal) |
---|---|---|---|
0000h | Octet | Longueur de la chaîne de caractères (00h si c'est la fin de la table) | 00h 00h |
0001h | N Octets | Texte ASCII de la chaîne de caractères | 00h 00h |
N+1 | Mot | Nombre ordinal (index dans la table d'entrée) | 00h 00h |
Référence
Ralf Brown's interrupt list, release 60