13

Here is the sample of MAP file from my test project...

.......
 .......
 .......
 0001:001EFC14 00000020 C=CODE     S=.text    G=(none)   M=Vcl.CategoryButtons ACBP=A9
 0001:001EFC34 0000284C C=CODE     S=.text    G=(none)   M=Vcl.SysStyles ACBP=A9
 0001:001F2480 000407A8 C=CODE     S=.text    G=(none)   M=Vcl.Styles ACBP=A9
 0001:00232C28 00006998 C=CODE     S=.text    G=(none)   M=MainU ACBP=A9
 0002:00000000 000000B4 C=ICODE    S=.itext   G=(none)   M=System   ACBP=A9
 0002:000000B4 00000008 C=ICODE    S=.itext   G=(none)   M=SysInit  ACBP=A9
 ..... 
 .....

My Unit (MainU) resides from 00232C28 to 00006998. Upto here, the memory address prefix with 0001. Starting from the next unit, it begins 0002 and so on.

What does it mean?

As well, what is 'C=', 'S=' 'G=' 'M=' and 'ACBP = '?

3 Answers3

15

The format is:
SegmentId:StartAddress Length C=SegmentClass S=SegmentName G=SegmentGroup M=ModuleName

The ACBP has something to do with alignment but I can't tell you what the hex numbers mean.

C=CODE: Code-Segment
C=ICODE: Initialization Code-Segment
C=DATA: (initialized) Data-Segment
C=BSS: (uninitialized) Data-Segment
C=TLS: Thread Local Storage

G=(none): No Segment-Group

Andreas Hausladen
  • 8,081
  • 1
  • 41
  • 44
8

It mean that your asm code of your unit MainU start at $00232C28 address and the length of compiled unit is $00006998 bytes.

The segment class (C=) is CODE, defined at beginning of map file.

The segment name (S=) is .text

The segment group (G=) is none.

The segment module (M=) is MainU

The ACBP attribute = A9 mean:

  • Unnamed absolute portion of memory address space
  • A public combining
  • The segment may be larger than 64K

Check also: http://files.mpoli.fi/unpacked/software/programm/general/ss0288.zip/ss0288_4.txt

GJ.
  • 10,810
  • 2
  • 45
  • 62
1

According to this Embarcadero docwiki page the A, C and B are for Alignment, Combination and "Big". It seems the page does not explain what the P means. The hex value is a mask, although as far as I can see it doesn't list all values. (The listed values don't allow for an odd value for instance)

Alignment

  • 00 - An absolute segment
  • 20 - A byte-aligned segment
  • 40 - A word-aligned segment
  • 60 - A paragraph-aligned segment
  • 80 - A page-aligned segment
  • A0 - An unnamed absolute portion of storage

Combination

  • 00 - Cannot be combined
  • 08 - A public combining segment

Big (for 16 bit)

  • 00 - Segment less than 64 K
  • 02 - Segment exactly 64K
  • The documentation that @GJ linked to, describes the meaning of A, C, B and also P (which is 0 for 16-bit and 1 for 32-bit, if I understood correctly). Therefore odd values are valid for what Delphi 2 to current Delphi produces. I don't know how 64-bit exes are marked. Generally, to avoid duplicated answers, it is good to read through what others have answered, before posting own ones. – Tom Brunberg Feb 19 '16 at 13:18
  • Having said the previous, since the linked document potentially may be unreachable in the future, opening it up here in your answer could be beneficial. – Tom Brunberg Feb 19 '16 at 13:22
  • Yes I noticed afterward that the documentation that @GJ linked to gives more detailed information. At first I thought that reply only answered what the value A9 means and not the question of what ACBP is. I wondered this myself and as I just found the link, I thought I'd share it. Perhaps I was a bit too eager to please :) – Tim Veldhuizen Feb 19 '16 at 14:19