WEB开发网
开发学院软件开发汇编语言 详解驻留exe文件 阅读

详解驻留exe文件

 2008-12-27 09:35:59 来源:WEB开发网   
核心提示:(2.14) seg1段 grpGROUP seg2touch 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相对gr

(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

上一页  1 2 3 4 5 6  下一页

Tags:详解 驻留 exe

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接