Понимание файла 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