详解驻留exe文件
2008-12-27 09:35:59 来源:WEB开发网运行重定位exe文件,重定位因子调度覆盖模块,链接器3制静态覆盖块,析栈初始startup
(1) X86汇编语言的组,段,类
伪指令group/segment,定义组/段,这使:
(1.1) 同组的各段,处于同一64k空间
(1.2) 段可声明'对齐,组合,类'可选属性:
(1.2.1) 段首,能对齐到BYTE,WORD,PARA(16字节),PAGE(256字节),缺省对齐到PARA.
(1.2.2) 不同源文的同名同类段,想靠链接,形成空间邻接或重叠的同名组合逻辑
段时,需用PUBLIC,COMMON,指明组合形式:
(1.2.2.1) PUBLIC,指明此段按对齐属性,邻在已包含在此组合逻辑段内的最末字面段之后
(1.2.2.2) COMMON,指明此段与同属此组合逻辑段的其他字面段,从组合逻辑段首铺展
同属组合逻辑段的各参与段的最大对齐属性(例如,WORD比BYTE大),决定组合逻辑段的对齐属性.
不与其它段组合的段,称为单逻辑段.
以下,用"逻辑段",统称组合逻辑段及单逻辑段.
(1.3) 类用'cls'指明,未指明类的各段,属'匿名'类.同类各段,邻接排列.
(2) 解释各逻辑段空间关系的3个源文
a1.asm,声明1个组,4个段,涉及'匿名','dec_'类
(2.1) grp组,含seg1段
(2.2) seg1段
(2.3) ovlap段,用COMMON参与组合,'dec_'类
(2.4) touch段,用PUBLIC参与组合
(2.5) stk1段,用STACK指明栈段及PARA对齐
grp GROUP seg1
seg1 SEGMENT PAGE
str1 DB "S1$"
seg1 ENDS
ovlap SEGMENT PARA COMMON 'dec_'
str3 DB '11$'
ovlap ENDS
touch SEGMENT PUBLIC
ASSUME cs:touch,ds:NOTHING
ORG 11H
@: mov ah,9
mov bx,grp ;取grp段值
mov ds,bx
mov dx,OFFSET str1 ;取str1相对seg1偏置
int 21h
EXTRN str2:far
mov dx,OFFSET grp:str2 ;取str2相对grp偏置
int 21h
ASSUME ds:ovlap
mov bx,SEG str3 ;取str3段值
mov ds,bx
lea dx,str3 ;取str3相对ds偏置
int 21h
touch ENDS
stk1 SEGMENT PAGE STACK
DW 16H DUP (4AH) ;初值4AH的16H个字
stk1 ENDS
END @
a2.asm,声明1个组,3个段,涉及'匿名','dec_','_stk'类:
(2.6) ovlap段,用COMMON参与组合,'dec_'类
(2.7) stk2段,用STACK指明栈段及PARA对齐,'_stk'类
(2.8) grp组,含seg3段
(2.9) seg3段,'dec_'类
ovlap SEGMENT COMMON 'dec_'
DB '2'
ovlap ENDS
stk2 SEGMENT WORD STACK '_stk'
DW 13H DUP (2BH) ;初值2BH的13H个字
stk2 ENDS
grp GROUP seg3
seg3 SEGMENT 'dec_'
PUBLIC str3
str3 DB '33$'
seg3 ENDS
END
a3.asm,声明1个组,4个段,涉及'匿名','_stk'类:
(2.10) grp组,含seg2段
(2.11) touch段,用PUBLIC参与组合
(2.12) seg2段
(2.13) stk2段,用STACK指明栈段及PARA对齐,'_stk'类
更多精彩
赞助商链接