Datei "Detaillierte Segmentzuordnung"

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Map-Debug-Datei (*.map)


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 für DCC32 (32-Bit-Windows), DCC64 (64-Bit-Windows), DCCOSX (OS X) oder DCCIOS32 (iOS-Simulator) zu aktivieren, wählen Sie Projekt > Optionen > Delphi-Compiler > Linken und ändern den Wert von "Map-Datei" in "Detailliert".

Um in C++ die Generierung einer detaillierten Segmentzuordnungsdatei für ILINK32 (32-Bit-Windows), ILINK64 (64-Bit-Windows) oder XLINK (OS X) 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\20.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9
 .
 .
 .
 0001:0001F484 00001F24 C=CODE    S=_TEXT    G=(none)   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\20.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\20.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9
 .
 .
 .
 0002:00004FD8 000009E0 C=DATA    S=_DATA    G=DGROUP   M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\20.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\20.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\20.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\20.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

Siehe auch