资源描述
单击此处编辑母版标题样式,*,*,-,*,COFF文件格式,1,段(,Section,),2,汇编器对段的处理,3 C,编译器建立的段,4,链接器对段的处理,5 COFF,文件结构,COFFCommon Object File Format,ELFExecutable and Linkable Format,23:57:55,1,-,COFF文件格式 1 段(Section)COFFCom,1,COFF文件格式,段,(Section),1,段(,Section,),目标文件中的最小单位,段是代码或数据块的组合,它最终将在存储器中占据一个连续的空间,目标文件的每一个段都是各自独立的,23:57:55,2,-,COFF文件格式段(Section)1 段(Section,2,COFF文件格式,段,(Section),23:57:55,3,-,COFF文件格式段(Section)03:11,3,COFF文件格式,段,(Section),.text 通常包含可执行代码,.data通常包含已初始化的数据,.bss 符号,字数通常为未初始化变量保留空间,COFF,目标文件的,3,个默认段,23:57:55,4,-,COFF文件格式段(Section).text 通常,4,COFF文件格式,汇编器对段的处理,2,汇编器对段的处理,汇编器对段的处理主要是确定汇编语言程序的各部分属于哪个特定的段,如果程序中没有用到任何伪指令来标识段,则汇编器默认将所有的代码段和数据段统一汇编到,.tex,段中,23:57:55,5,-,COFF文件格式汇编器对段的处理2 汇编器对段的处理汇编器,5,COFF文件格式,汇编器对段的处理,COFF目标文件的3个默认段,.text通常包含可执行代码,.data通常包含一初始化的数据,.bss 符号,字数,通常为未初始化变量保留空间,段的标识,汇编伪指令,自定义段,.sect“段名”,自定义已初始化段,符号 .usect“段名”,字数自定义未初始化段,.asect“段名”,地址自定义绝对地址段,段名:,程序员自己定义的段的名称,符号:,指向由,.bss,或,.usect,伪指令保留的第一个字,对应于为变量保留空间的变量名,可以在其它段中被访问,也可以用,.global,伪指令定义为全局符号,字数:,保留空间的大小,23:57:55,6,-,COFF文件格式汇编器对段的处理COFF目标文件的3个默认,6,COFF文件格式,汇编器对段的处理,汇编伪指令,.text.data.sect.asect,已初始化段,作用,已初始化段包含可执行代码或已初始化数据,已初始化段的内容存储在,COFF,目标文件中,程序加载时放入存储器中,每个已初始化段可以独立地进行重定位,且可以访问在其它段中定义的符号,链接器自动解决段之间的符号访问问题,汇编器的处理,当汇编器遇到上述伪指令之一时,停止汇编当前段,然后把后面的代码或数据汇编至伪指令指定的段中,直到遇见另一个,.text,、,.data,、,.sect,或,.asect,为止,23:57:55,7,-,COFF文件格式汇编器对段的处理汇编伪指令已初始化段作用汇,7,COFF文件格式,汇编器对段的处理,汇编伪指令,.bss.usect,未初始化段,作用,未初始化段主要用来在存储器中保留空间,它们通常被分配到,RAM,中,未初始化段在,COFF,目标文件中没有实际内容,只是保留空间,程序在运行时利用这些空间来创建和存储变量,汇编器的处理,当汇编器遇到,.bss,或,.usect,伪指令时,并不终止对当前段的汇编而开始一个新段,它们只是暂时从当前段转移开,.bss,和,.usect,伪指令可以在一个已初始化段的任何位置出现而不影响它的内容,23:57:55,8,-,COFF文件格式汇编器对段的处理汇编伪指令未初始化段作用汇,8,例,Field1,:,源代码行计数器,Field2,:,段程序计数器,Field3,:,目标代码,Field4,:,源代码语句,COFF文件格式,汇编器对段的处理,23:57:55,9,-,例Field1:COFF文件格式汇编器对段的处理,9,例(续),.text,包含,7,个字的目标代码,.data,包含,5,个字的数据,.bss,在存储器中保留,11,个字,newvars,用,.usect,伪指令定义的段,在存储器中保留,8,个字,COFF文件格式,汇编器对段的处理,23:57:55,10,-,例(续).text COFF文件格式汇编器对段的处理,10,COFF文件格式,C编译器建立的段,3 C,编译器建立的段,例:,TMS320C2x/C2xx/C5x,的,C,编译器建立的段,23:57:55,11,-,COFF文件格式C编译器建立的段3 C编译器建立的段例:T,11,COFF文件格式,链接器对段的处理,4,链接器对段的处理,功能,链接器用可重定位,COFF,目标文件中的段作为输入段,当链接多于一个文件时,它组合输入段,从而在可执行,COFF,目标文件中创建输出段,链接器为输出段选择存储器地址,定位到目标系统的存储器中,23:57:55,12,-,COFF文件格式链接器对段的处理4 链接器对段的处理功能链,12,COFF文件格式,链接器对段的处理,链接器伪指令,MEMORY,:定义目标系统的存储器,可以为存储器命名,并指定其起始地址和长度,SECTIONS,:告诉链接器如何将输入段组合到输出段,以及将这些输出段存放在存储器的什么地方,链接器的默认分配算法,如果不给链接器提供,MEMORY,和,SECTIONS,命令,则链接器就采用缺省的分配算法,23:57:55,13,-,COFF文件格式链接器对段的处理链接器伪指令MEMORY:,13,COFF文件格式,链接器对段的处理,例,23:57:55,14,-,COFF文件格式链接器对段的处理例 03:11:,14,COFF文件格式,链接器对段的处理,例,23:57:55,15,-,COFF文件格式链接器对段的处理例 03:11:,15,COFF文件格式,COFF文件结构,5 COFF,文件结构,23:57:55,16,-,COFF文件格式COFF文件结构5 COFF文件结构,16,
展开阅读全文