详解驻留exe文件
2008-12-27 09:35:59 来源:WEB开发网(2.14) seg1段
grp GROUP seg2
touch SEGMENT BYTE PUBLIC
EXTRN str3:far
ASSUME cs:touch,ds:NOTHING
@1: mov cx,SEG grp ;取grp段值
mov ds,cx
mov dx,OFFSET grp:str3 ;取str3相对grp偏置
int 21h
mov cx,seg1 ;取seg1段值
mov ds,cx
mov dx,OFFSET seg1:str4 ;取str4相对seg1偏置
int 21h
mov ah,4ch ;程序终止
int 21h
touch ENDS
seg2 SEGMENT BYTE
PUBLIC str2
str2 DB "S2$"
seg2 ENDS
stk2 SEGMENT WORD STACK '_stk'
DW 31H DUP (0B2H) ;初值B2H的31H个字
stk2 ENDS
seg1 SEGMENT BYTE
str4 DB "%$"
seg1 ENDS
END @1
用masm5.exe(版5.10B,囿95 DDK),生成同名obj及lst文件.例如,汇编a1,命令行是:
masm5 a1,,a1;
用含覆盖管理器的link4.exe(版5.01.17,同囿DDK),依序链接obj,生成a.exe程序文件,a.map映像文件,命令行是:link4 a1+a2+a3,a,a,,,
a.exe,显'S1S22133%'
a.map含:
Start Stop Length Name Class
00000H 00002H 00003H SEG1
00010H 00055H 00046H TOUCH
00060H 0008BH 0002CH STK1
0008CH 0008EH 00003H SEG2
0008FH 00090H 00002H SEG1
000A0H 000A2H 00003H OVLAP DEC_
000B0H 000B2H 00003H SEG3 DEC_
000C0H 00147H 00088H STK2 _STK
Origin Group
0000:0 GRP
entry point at 0001:0011
(3) 逻辑段排列准则:按链接次序,按字面段的源文次序,按类名大写ASCII次序
因此,a.exe含8个逻辑段(段名被大写):
(3.1) '匿名'类的a1的单逻辑段SEG1
(3.2) '匿名'类的a1与a3的组合逻辑段TOUCH,参与的a1及a3中touch字面段,代码相接.
(3.3) '匿名'类的a1的单逻辑段STK1
(3.4) '匿名'类的a3的单逻辑段SEG2
(3.5) '匿名'类的a3的单逻辑段SEG1
(3.6) 'DEC_'类的a1与a2的组合逻辑段OVLAP,参与的a2及a3中ovlap字面段,使str3变为'21$'
(3.7) 'DEC_'类的a2的单逻辑段SEG3
(3.8) '_STK'类的a2与a3的组合逻辑段STK2,参与的a2及a3中stk2字面段,按PUBLIC,两空间邻接
(4) 链接时,程序cs:ip及ss:sp设定
用'END expression'形式指明的各伪指令,最先者,expression所在段,及expression相对所在段的偏置,是程序的cs:ip.无此伪指令,cs,ip是0.
例如,a1的'END @'先于a3的'END @1',因此,程序a.exe入口,cs=1,是@所在段相对exe文件装入模块首的节数,ip=11,是@相对所在段的偏置.
用组合属性STACK指明的各逻辑段,map文件最末者,是栈段;无此逻辑段,map文件最先逻辑段,是栈段.
例如,指明STACK的组合逻辑段STK2,后于单逻辑段STK1,因此,程序a.exe栈区,ss=STK2相对exe文件装入模块首的节数0ch,sp=88h,是STK2尺寸.
(5) 汇编时的机器码暂定
能/不能被链接解决的作为操作数的段值/段偏置,其指令后面,带后缀R被暂定;能被链接解决的外部定义,其指令后面,带后缀E被暂定.因此,
a1.lst含:
0013 BB ---- R mov bx,grp
0018 BA 0000 R mov dx,OFFSET str1
001D BA 0000 E mov dx,OFFSET grp:str2
0022 BB ---- R mov bx,SEG str3
0027 8D 16 0000 R lea dx,str3
a3.lst含:
0000 B9 ---- R @1: mov cx,SEG grp
0005 BA 0000 E mov dx,OFFSET grp:str3
000A B9 ---- R mov cx,seg1
000F BA 0000 R mov dx,OFFSET seg1:str4
更多精彩
赞助商链接