1、COFFCOFF文件格式文件格式 1 段(段(Section)2 汇编器对段的处理汇编器对段的处理 3 C编译器建立的段编译器建立的段 4 链接器对段的处理链接器对段的处理 5 COFF文件结构文件结构COFFCommon Object File FormatELFExecutable and Linkable Format 10:19:471-COFF文件格式文件格式段(Section)1 段(段(Section)目标文件中目标文件中的最小单位的最小单位段是代码或段是代码或数据块的组合,数据块的组合,它最终将在存它最终将在存储器中占据一储器中占据一个连续的空间个连续的空间目标文件的目标文件的
2、每一个段都是每一个段都是各自独立的各自独立的 10:19:482-COFF文件格式文件格式段(Section)10:19:493-COFF文件格式文件格式段(Section)l.text 通常包含可执行代码通常包含可执行代码l.data通常包含已初始化的数据通常包含已初始化的数据l.bss 符号符号,字数字数通常为未初始化变量保留空间通常为未初始化变量保留空间COFF目标文件的目标文件的3个默认段个默认段 10:19:494-COFF文件格式文件格式汇编器对段的处理2 汇编器对段的处理汇编器对段的处理汇编器对段的处理主要是确定汇编语言程序的汇编器对段的处理主要是确定汇编语言程序的各部分属于哪个
3、特定的段各部分属于哪个特定的段如果程序中没有用到任何伪指令来标识段,则如果程序中没有用到任何伪指令来标识段,则汇编器默认将所有的代码段和数据段统一汇编汇编器默认将所有的代码段和数据段统一汇编到到.tex段中段中 10:19:495-COFF文件格式文件格式汇编器对段的处理l COFF目标文件的目标文件的3个默认段个默认段l.text通常包含可执行代码l.data通常包含一初始化的数据l.bss 符号,字数通常为未初始化变量保留空间段的标识段的标识汇编伪指令汇编伪指令l 自定义段自定义段l .sect“段名”自定义已初始化段l 符号 .usect“段名”,字数自定义未初始化段l .asect“段
4、名”,地址自定义绝对地址段l 段名:段名:程序员自己定义的段的名称l 符号:符号:指向由.bss或.usect伪指令保留的第一个字,对应于为变量保留空间的变量名,可以在其它段中被访问,也可以用.global伪指令定义为全局符号l 字数:字数:保留空间的大小 10:19:496-COFF文件格式文件格式汇编器对段的处理l 汇编伪指令汇编伪指令l.text.data.sect.asect已初始化段已初始化段l 作用作用l 已初始化段包含可执行代码或已初始化数据已初始化段包含可执行代码或已初始化数据l 已初始化段的内容存储在已初始化段的内容存储在COFF目标文件中,程序加载时放入存目标文件中,程序加
5、载时放入存储器中储器中l 每个已初始化段可以独立地进行重定位,且可以访问在其它段中每个已初始化段可以独立地进行重定位,且可以访问在其它段中定义的符号,链接器自动解决段之间的符号访问问题定义的符号,链接器自动解决段之间的符号访问问题l 汇编器的处理汇编器的处理l 当汇编器遇到上述伪指令之一时,停止汇编当前段,然后把后面当汇编器遇到上述伪指令之一时,停止汇编当前段,然后把后面的代码或数据汇编至伪指令指定的段中,直到遇见另一的代码或数据汇编至伪指令指定的段中,直到遇见另一个个.text、.data、.sect或或.asect为止为止 10:19:497-COFF文件格式文件格式汇编器对段的处理l 汇
6、编伪指令汇编伪指令l.bss.usect未初始化段未初始化段l 作用作用l 未初始化段主要用来在存储器中保留空间,它们通常被分配到未初始化段主要用来在存储器中保留空间,它们通常被分配到RAM中中l 未初始化段在未初始化段在COFF目标文件中没有实际内容,只是保留空间目标文件中没有实际内容,只是保留空间l 程序在运行时利用这些空间来创建和存储变量程序在运行时利用这些空间来创建和存储变量l 汇编器的处理汇编器的处理l 当汇编器遇到当汇编器遇到.bss或或.usect伪指令时,并不终止对当前段的汇编伪指令时,并不终止对当前段的汇编而开始一个新段,它们只是暂时从当前段转移开而开始一个新段,它们只是暂时
7、从当前段转移开l.bss和和.usect伪指令可以在一个已初始化段的任何位置出现而不伪指令可以在一个已初始化段的任何位置出现而不影响它的内容影响它的内容 10:19:498-例例l Field1:l 源代码行计数器源代码行计数器l Field2:l 段程序计数器段程序计数器l Field3:l 目标代码目标代码l Field4:l 源代码语句源代码语句 COFF文件格式文件格式汇编器对段的处理 10:19:499-例(续)例(续)l.text l 包含包含7个字的目标代个字的目标代码码l.datal 包含包含5个字的数据个字的数据l.bssl 在存储器中保留在存储器中保留11个字个字l new
8、varsl 用用.usect伪指令定伪指令定义的段,在存储器义的段,在存储器中保留中保留8个字个字COFF文件格式文件格式汇编器对段的处理 10:19:4910-COFF文件格式文件格式C编译器建立的段3 C编译器建立的段编译器建立的段例:例:TMS320C2x/C2xx/C5x的的C编译器建立的编译器建立的段段 10:19:4911-COFF文件格式文件格式链接器对段的处理4 链接器对段的处理链接器对段的处理功能功能链接器用可重定位链接器用可重定位COFF目标文件中的段作目标文件中的段作为输入段,当链接多于一个文件时,它组合为输入段,当链接多于一个文件时,它组合输入段,从而在可执行输入段,从
9、而在可执行COFF目标文件中创目标文件中创建输出段建输出段链接器为输出段选择存储器地址,定位到目链接器为输出段选择存储器地址,定位到目标系统的存储器中标系统的存储器中 10:19:4912-COFF文件格式文件格式链接器对段的处理链接器伪指令链接器伪指令MEMORY:定义目标系统的存储器,可以:定义目标系统的存储器,可以为存储器命名,并指定其起始地址和长度为存储器命名,并指定其起始地址和长度SECTIONS:告诉链接器如何将输入段组合:告诉链接器如何将输入段组合到输出段,以及将这些输出段存放在存储器到输出段,以及将这些输出段存放在存储器的什么地方的什么地方链接器的默认分配算法链接器的默认分配算法如果不给链接器提供如果不给链接器提供MEMORY和和SECTIONS命令,则链接器就采用缺省的分命令,则链接器就采用缺省的分配算法配算法 10:19:4913-COFF文件格式文件格式链接器对段的处理例例 10:19:4914-COFF文件格式文件格式链接器对段的处理例例 10:19:4915-COFF文件格式文件格式COFF文件结构5 COFF文件结构文件结构 10:19:4916-
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。