3. 用户代码的结构分析

; write by zhujiu123
; nasm编译器
;========================================================
SECTION header vstart=0            ;定义用户程序头部段
    program_length  dd program_end ;双字节来存储代码长度            
    ;用户程序入口点
    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:
;==============================================================================
start;
SECTION code_1 align=16 vstart=0
SECTION code_2 align=16 vstart=0
SECTION data_1 align=16 vstart=0
SECTION data_2 align=16 vstart=0
SECTION stack  align=16 vstart=0

SECTION trail align=16
program_end:

 

代码编译后:

 上述代码,并没有执行实际的机器指令,只是将数据进行了存储。伪指令不占用地址。

上述代码定义了32个字节的变量,所以到header_end 地址就是0x20.    code_1_segment 等于12 . 

realloc_tbl_len =(32-12)/4 = 5;

彻底清了以上的结构,便可以写应用程序了。

 

 

 

 

 

 

 

 

 

 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值