1. 用户程序结构分析(实模式)-nasm编译器

 


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:                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值