执行程序结构 ■Exe文件结构包括: 文件头 格式化区 ■重定位表 程序体 代码段 ■数据段 ■堆栈段 ■Exe文件的长度可以大于64k
执行程序结构 Exe文件结构包括: – 文件头 格式化区 重定位表 – 程序体 代码段 数据段 堆栈段 Exe文件的长度可以大于64k
■EXe文件头格式为: 偏移量 意义 偏移量 意义 00h-01h MZ,为EXE文0eh-0mh 堆栈段的段值 件标记 (SS) 2h-03h 文件长度除51210h11h SP 的余数 04h-05h 文件长度除51212h-13h 文件校验和 的商 06h-07h 重定位项的个数14h-15h 被装入模块入口 P值 08h-09h 文件头除16的商16h-17h 被装入模块入口 的CS Oah-obh 程序运行所需最18h-19h 第一个重定位项 小段数 的位移 Och-Odh 程序运行所需最1ah1bh 覆盖号 大段数 1ch 可变保留区
Exe文件头格式为: 偏移量 意义 偏移量 意义 00h-01h MZ,为EXE文 件标记 0eh-0fh 堆栈段的段值 (SS) 2h-03h 文件长度除512 的余数 10h-11h SP 04h-05h 文件长度除512 的商 12h-13h 文件校验和 06h-07h 重定位项的个数 14h-15h 被装入模块入口 IP值 08h-09h 文件头除16的商 16h-17h 被装入模块入口 的CS 0ah-0bh 程序运行所需最 小段数 18h-19h 第一个重定位项 的位移 0ch-0dh 程序运行所需最 大段数 1ah-1bh 覆盖号 1ch 可变保留区
执行程序结构 ■EXe文件装载过程是 确定内存起始段 确定长度 读eXe文件到内存 根据重定位表对内存的exe文件体进行重定位 ■取出重定位项中的段值 ■段值加起始段=实际段值 ■加偏移量得到程序体的一个字 取出该字,加上起始段值 ■写回内存原来位置 初始化寄存器 控制权转移,开始执行
执行程序结构 Exe文件装载过程是 – 确定内存起始段 – 确定长度 – 读exe文件到内存 – 根据重定位表对内存的exe文件体进行重定位 取出重定位项中的段值 段值加起始段=实际段值 加偏移量得到程序体的一个字 取出该字,加上起始段值 写回内存原来位置 – 初始化寄存器 – 控制权转移,开始执行