1. 应用程序的头部包含,程序的总长度,入口点,段重定位表项数,以及段重定位表。
2. 程序的长度
SECTION header vstart=0 ;
program_length dd program_end
...
...
...
...
...
program_end: ; program_end 代表的汇编地址在数值上等于程序的长度。
3.应用程序的入口点(包括段地址以及偏移地址)。
SECTION header vstart=0 ;
program_length dd program_end
;用户程序入口点
code_entry dw start ;偏移地址 [0x04]
dd section.code_1.start ;段地址 [0x06]
...
...
...
...
...
program_end: ; program_end 代表的汇编地址在数值上等于程序的长度。
4.段重定位表
用户程序可能包括多个段,段重定位是加载器的工作,但是加载器需要知道每个段在用户程序内的位置,即他们分别位于用户程序内多少字节处。所以,用户程序必须设置一个段重定位表。
5 一个完整的头部
;===============================================================================
SECTION header vstart=0 ;定义用户程序头部段
program_length dd program_end ;程序总长度[0x00]
;用户程序入口点
code_entry dw start ;偏移地址[0x04]
dd section.code_1.start ;段地址[0x06]
realloc_tbl_len dw (header_end-code_1_segment)/4
;段重定位表项个数[0x0a]
;段重定位表
code_1_segment dd section.code_1.start ;[0x0c]
code_2_segment dd section.code_2.start ;[0x10]
data_1_segment dd section.data_1.start ;[0x14]
data_2_segment dd section.data_2.start ;[0x18]
stack_segment dd section.stack.start ;[0x1c]
header_end: