Skip to content

ASh-en/OMF-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

OMF-

OMF51 文件格式部分解析 1、 目标文件格式解析

    (1)     目标文件格式概述

目标文件是由源代码编译但未链接的中间文件,它与可执行文件的内容与结构十分相似,目标文件的格式主要有COFF、ELF、OMF等格式。下面以OMF格式为例描述如何从目标文件中获取调试信息。

OMF格式是目前还在使用的最古老的格式之一,在一些嵌入式系统中就是使用这种目标文件格式存储调试信息的。

    (2)     OMF记录格式

OMF出现在微处理器开发的早期,当时内存容量都很小。因此,OMF将目标文件划分成一系列短记录,OMF在这一点上也是如此,如图1所示,每个记录包含1字节的类型,2字节的长度,内容,和可以让整个记录的字节和为零的校验字节。

记录类型

记录序列

长度

内容

校验位

图1OMF记录格式

(3) OMF的记录类型

OMF目标文件格式有许多记录序列,这里列出一个简单的OMF文件的记录。 THEADR 程序名称 COMENT 标志和选项 LNAMES 段、段组和段类的名字列表 SEGDEF 段(每个段一个记录) GRPDEF 段组(每个段组一个记录) PUBDEF 全局符号 EXTDEF 未定义的外部符号(每个符号一个记录) COMDEF 公共块 COMENT 第一遍扫描信息 LEDATA 代码或数据块(多个) LIDATA 重复数据块(多个) FIXUPP 重定位和外部引用修正信息 MODEND 模块结尾 表1典型的OMF记录序列 下面是具体的几个较为重要的调试信息记录类型介绍:

a) 模块开始记录

记录 类型 02H 记录序列长度 模块名称 生成标志

校验位 每个模块必须以模块开始记录开头。 模块开始记录的记录类型为02H,模块名称是一个变长的序列,有一字节的字符串长度与后面相应长度的字符串组成。 除了模块名称,记录还包含: 一个字节的生成标志位,该字节标识生成该模块的程序。 阴影的一个字节块表示该字节留用,默认为00H。

b) 模块结束记录

记录类型 04H 记录序列 长度 模块名称

记录表

校验位 模块结束记录的记录类型为04H,此处的模块名称应与模块开始记录相匹配,长矩形阴影表示两字节留用,短矩形表示一字节留用,默认设为0000H与00H,此处记录表可得到该模块的存储区。

c) 内容记录

记录类型06H

记录序列

长度 段标志 段内偏移 数据 校验位

重复

内容记录的记录类型为06H,其中段标志指定为00H,表示代码段,两字节的段内偏移表示首个数据在代码段的段内偏移,这里的数据为二进制的指令码。

d) 范围记录

记录类型10H 记录序列 长度 块类型 块名称 校验位 范围记录的记录类型为10H,此记录用于将“调试项目记录”中的符号和行号的范围限制为源程序定义的块。 块类型字段可以采用以下值: 模块开始块(00H),为每个模块生成一次。这种类型的范围定义记录应该是模块中的第一个调试记录,因为它将模块中的整个调试信息(包括其各自的模块结束类型范围定义记录)包含在内。 DO开始块(01H),为每个包含其块中的声明的简单DO语句生成。 程序开始块(02H),为每个程序生成,该语句包含过程块中的声明。 模块结束块(03H),为每个关闭模块的END语句生成。此记录中的块名称必须与最后一个模块开始块定义的名称匹配。 DO结束块(04H),为每个关闭DO块的END语句生成。此记录中的块名称必须与上次打开的DO开始块定义 的名称匹配 。 程序结束块(05H),为每个关闭程序块的END语句生成。此记录中的块名称必须与上次打开的程序开始块范定义 的名称匹配 。

e) 调试项目记录

记录类型22H

记录序列

长度 定义类型

内容

校验位

重复

调试项目记录的记录类型为22H,它提供有关模块、DO块、程序块的本地符号,公共符号,段符号和行号等调试信息。 定义类型指定了该调试项目记录在此记录中定义的项目: 本地符号(00H);公共符号(01H);段符号(02H);行号(03H)。

f) 源文件记录

记录类型24H 记录序列 长度 源文件名称 校验位 源文件记录的记录类型为24H,它提供了范围记录中模块的源文件信息,其中阴影块为三字节的留用空间,默认设为000000H。源文件名称由一字节的名称长度和相应长度的字符串组成。

About

OMF51 文件格式部分解析

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published