Datei "Detaillierte Segmentzuordnung"
Nach oben zu Map-Debug-Datei
Eine detaillierte Segmentzuordnungsdatei ist eine Map-Datei, die umfassendste Map-Datei, die eine detaillierte Zuordnung von Segmenten enthält.
Generieren einer detaillierten Segmentzuordnungsdatei
Um in Delphi die Generierung einer detaillierten Segmentzuordnungsdatei (Map-Datei) durch DCC32 (32-Bit-Windows), DCC64 (64-Bit-Windows), macOS ARM (64 Bit), macOS (64 Bit) oder iOS-Gerät (64 Bit) zu aktivieren, wählen Sie Projekt > Optionen > Delphi-Compiler > Linken aus und ändern den Wert von "Map-Datei" in "Detailliert".
Um in C++ die Generierung einer detaillierten Segmentzuordnungsdatei (Map-Datei) durch ILINK32 (32-Bit-Windows) oder ILINK64 (64-Bit-Windows) zu aktivieren, wählen Sie Projekt > Optionen > C++-Linker > Ausgabe und ändern den Wert von "Map-Dateityp" in "Detaillierte Segmentzuordnung". In der Befehlszeile können Sie die Option -s
verwenden.
Format von detaillierten Segmentzuordnungsdateien
Der Inhalt einer normalen Map-Datei sieht folgendermaßen aus:
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>() . . .
Eine detaillierte Segmentzuordnungsdatei enthält den neuen Abschnitt Detailed map of segments. Die detaillierte Liste der Segmente enthält (für jede Zeile):
- Die Startadresse (Segment:Offset) des Segmentmoduls
- Die Länge des Segmentmoduls
- Die Segmentklasse (C=)
- Den Segmentnamen (S=)
- Die Segmentgruppe (G=)
- Das Segmentmodul (M=)
- Die Segment-ACBP-Informationen (ACBP=)
Wenn dasselbe Segment in mehreren Modulen erscheint, wird jedes Modul in einer eigenen Zeile aufgeführt.
Das ACBP-Feld codiert die Attribute A (Ausrichtung), C (Kombination) und B (Big) in einem Satz von 4-Bit-Feldern, wie von Intel definiert. Die C++-Linker verwenden nur drei der Felder: A, C und B. Der ACBP-Wert in der Zuordnung wird in hexadezimaler Form ausgegeben. Die folgenden Feldwerte müssen mit einem logischen ODER verbunden werden, damit der ACBP-Wert ausgegeben werden kann.
Feld | Wert | Beschreibung |
---|---|---|
A (Ausrichtung) |
00 |
Ein absolutes Segment |
20 |
Ein an Byte-Grenzen ausgerichtetes Segment | |
40 |
Ein an Word-Grenzen ausgerichtetes Segment | |
60 |
Ein an Paragraph-Grenzen ausgerichtetes Segment | |
80 |
Ein an Seitengrenzen ausgerichtetes Segment | |
A0 |
Ein nicht benannter absoluter Speicherabschnitt | |
C (Kombination) |
00 |
Kann nicht kombiniert werden |
08 |
Ein public-kombinierendes Segment | |
B (Big, für 16 Bit) |
00 |
Segment kleiner als 64 K |
02 |
Segment genau 64 K |