Fichier map des segments détaillés
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 |