了解Delphi MAP文件

Sar*_*osh 12 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
 ..... 
 .....
Run Code Online (Sandbox Code Playgroud)

我的单元(MainU)驻留在00232C28到00006998.此处,内存地址前缀为0001.从下一个单元开始,它开始为0002,依此类推.

这是什么意思?

同样,什么是'C =','S =''G =''M ='和'ACBP ='?

And*_*den 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):没有细分群组


GJ.*_*GJ. 8

这意味着你的单元的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