Fichier map des segments détaillés

De RAD Studio
Aller à : navigation, rechercher

Remonter à Fichier de débogage map


Un fichier map des segments détaillés est un fichier map complet qui inclut un map détaillé des segments.

Génération d'un fichier map des segments détaillés

Sur Delphi, pour activer la génération d'un fichier map des segments détaillés sur DCC32 (Windows 32 bits), DCC64 (Windows 64 bits), DCCOSX (macOS) ou DCCIOS32 (Simulateur iOS), sélectionnez Projet > Options > Compilateur Delphi > Liaison et redéfinissez la valeur de "Fichier map" sur "Détaillé".

Sur C++, pour activer la génération d'un fichier map des segments détaillés sur ILINK32 (Windows 32 bits), ILINK64 (Windows 64 bits) ou XLINK (macOS), sélectionnez Projet > Options > Lieur C++ > Sortie et redéfinissez la valeur de "Type du fichier map" sur "Map de segment détaillé". Sur la ligne de commande, vous pouvez utiliser le commutateur -s.

Format des fichiers map des segments détaillés

Le contenu d'un fichier map normal a l'aspect suivant :

 Start Length Name Class
 0001:00401000 0000214D4H _TEXT                  CODE
 0002:00423000 0000059B8H _DATA                  DATA
 0003:004289B8 000002F24H _BSS                   BSS
 0004:00000000 00000009CH _TLS                   TLS
 
 
Detailed map of segments
 0001:000000E4 00001038 C=CODE    S=_TEXT    G=(none)   M=C:\TEMP\HELLO\HELLO.OBJ ACBP=A9
 0001:0000111C 0000014F C=CODE    S=_TEXT    G=(none)   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\22.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9
 .
 .
 .
 0001:0001F484 00001F24 C=CODE    S=_TEXT    G=(none)   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\22.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9
 0002:00000000 000001E8 C=DATA    S=_DATA    G=DGROUP   M=C:\TEMP\HELLO\HELLO.OBJ ACBP=A9
 0002:000001E8 000000C8 C=DATA    S=_DATA    G=DGROUP   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\22.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9
 .
 .
 .
 0002:00004FD8 000009E0 C=DATA    S=_DATA    G=DGROUP   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\22.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9
 0003:00000000 00000244 C=BSS     S=_BSS     G=DGROUP   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\22.0\LIB\WIN32\RELEASE\CW32.LIB|iostream ACBP=A9
 .
 .
 .
 0003:00002F04 00000020 C=BSS     S=_BSS     G=DGROUP   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\22.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9
 0004:00000000 0000009C C=TLS     S=_TLS     G=DGROUP   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\22.0\LIB\WIN32\RELEASE\CW32.LIB|xxv ACBP=A9
 
 Address Publics by Name
 
 0002:000024C4  @std@%basic_filebuf$b19std@%char_traits$b%%@3
 0002:000010E8  @std@%basic_filebuf$c19std@%char_traits$c%%@3
 0002:00002450  @std@%basic_ios$b19std@%char_traits$b%%@3
 .
 .
 .
 
 Address Publics by Value
 
 0001:000000E4  _main
 0001:00000730  std::allocator<char>::allocator<char>()
 .
 .
 .

Un fichier map des segments détaillés insère une nouvelle section dans le fichier map, appelée Detailed map of segments. La liste détaillée des segments contient (pour chaque ligne) :

  • L'adresse de démarrage (segment:offset) du module du segment
  • La longueur du module du segment
  • La classe du segment (C=)
  • Le nom du segment (S=)
  • Le groupe du segment (G=)
  • Le module du segment (M=)
  • Les informations ACBP du segment (ACBP=)

Si le même segment apparaît dans plusieurs modules, chaque module apparaît sur une ligne distincte.

Le champ ACBP encode les attributs A (alignement), C (combinaison) et B (big) dans un ensemble de quatre champs de bits, tels que définis par Intel. Les lieurs C++ utilisent uniquement trois des champs : A, C et B. La valeur ACBP est inscrite en hexadécimal dans le map. Les valeurs des champs ci-dessous doivent être combinées par une opération OU pour donner la valeur ACBP inscrite.

Champ Valeur Description

A (alignement)

00

Un segment absolu

20

Un segment aligné sur les octets

40

Un segment aligné sur les mots

60

Un segment aligné sur les paragraphes

80

Un segment aligné sur les pages

A0

Une portion de stockage absolue et non nommée

C (combinaison)

00

Combinaison impossible

08

Un segment de combinaison public

B (big, pour 16 bits)

00

Un segment inférieur à 64 Ko

02

Un segment de 64 Ko exactement

Voir aussi