了解Delphi MAP文件

时间:2014-08-09 07:05:16

标签: 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 ='?

3 个答案:

答案 0 :(得分:15)

格式为:
SegmentId:StartAddress Length C=SegmentClass S=SegmentName G=SegmentGroup M=ModuleName

ACBP与对齐有关,但我无法告诉你十六进制数字是什么意思。

C=CODE:代码段 C=ICODE:初始化代码段 C=DATA :(初始化)数据段
C=BSS :(未初始化)数据段
C=TLS:线程本地存储

G=(none):没有细分受众群

答案 1 :(得分:8)

这意味着您的单元MainU的asm代码从$ 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

答案 2 :(得分:1)

根据this Embarcadero docwiki page,A,C和B用于对齐,组合和“大”。似乎该页面没有解释P的含义。十六进制值是一个掩码,虽然我可以看到它没有列出所有值。 (列出的值不允许例如奇数值)

对齐

  • 00 - 绝对分段
  • 20 - 字节对齐的段
  • 40 - 字对齐段
  • 60 - 段落对齐的段
  • 80 - 页面对齐的细分
  • A0 - 未命名的存储绝对部分

组合

  • 00 - 无法合并
  • 08 - 公众合并段

大(16位)

  • 00 - 小于64 K的细分
  • 02 - 准确分段64K