Понимание файла MAP Delphi

Вот пример файла MAP из моего тестового проекта...

.......
 .......
 .......
 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
 ..... 
 .....

Мой блок (MainU) находится от 00232C28 до 00006998. Здесь здесь префикс адреса памяти с номером 0001. Начиная с следующего блока, он начинается 0002 и так далее.

Что это значит?

Также, что такое 'C =', 'S =' 'G =' 'M =' и 'ACBP ='?

Ответ 1

Формат:
SegmentId:StartAddress Length C=SegmentClass S=SegmentName G=SegmentGroup M=ModuleName

ACBP имеет какое-то отношение к выравниванию, но я не могу сказать вам, что означают шестнадцатеричные числа.

C=CODE: Код-сегмент
C=ICODE: код-сегмент инициализации
C=DATA: (инициализировано) Сегмент данных
C=BSS: (неинициализированный) Сегмент данных
C=TLS: Локальное хранилище потоков

G=(none): Нет сегментной группы

Ответ 2

Это означает, что ваш код asm вашего устройства MainU начинается с адреса $00232C28, а длина скомпилированного элемента - $00006998 байт.

Класс сегмента (C =) - это CODE, определенный в начале файла карты.

Название сегмента (S =) - .text

Группа сегментов (G =) не равна.

Сегментный модуль (M =) равен MainU

Атрибут ACBP = A9 означает:

  • Абсолютная абсолютная часть адресного пространства памяти
  • Публичное объединение
  • Сегмент может быть больше 64K

Также проверьте: http://files.mpoli.fi/unpacked/software/programm/general/ss0288.zip/ss0288_4.txt

Ответ 3

В соответствии с этой страницей dcomwiki Embarcadero A, C и B предназначены для выравнивания, сочетания и "большого". Кажется, страница не объясняет, что означает P. Шестнадцатеричное значение - это маска, хотя, насколько я вижу, она не перечисляет все значения. (Указанные значения не допускают, например, нечетное значение)

Выравнивание

  • 00 - Абсолютный сегмент
  • 20 - Выровненный по байтам сегмент
  • 40 - Выровненный по слову сегмент
  • 60 - сегмент, выровненный по абзацу
  • 80 - Выровненный по страницам сегмент
  • A0 - неназванная абсолютная часть хранилища

Комбинация

  • 00 - Невозможно объединить
  • 08 - Публичный сегмент объединения

Большой (для 16 бит)

  • 00 - Сегмент менее 64 К
  • 02 - сегмент точно 64K