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

详解驻留exe文件

 2008-12-27 09:35:59 来源:WEB开发网   
核心提示: (9) 链接器3制静态覆盖块link4的obj参数,囿于括号时,生成OVERLAY_DATA,OVERLAY_AREA,OVERLAY_END块,使DOS的exe长达16M.用4个源文阐述:(9.1) root文要点: 入口@需处于装入模块首要点: extrn的near/far,声明近/远标号 c_root segm

   (9) 链接器3制静态覆盖块

link4的obj参数,囿于括号时,生成OVERLAY_DATA,OVERLAY_AREA,OVERLAY_END块,使DOS的exe长达16M.

用4个源文阐述:

(9.1) root文

要点: 入口@需处于装入模块首

要点: extrn的near/far,声明近/远标号

c_root  segment
     assume cs:c_root
     extrn  ov_near:near,ov_far:far,ov_far1:far
@:   call  ov_near     ;近调用
     call  ov_far     ;远调用  
     jmp   ov_far1     ;远转移
c_root  ends
stk  segment  STACK
     dw   16   dup(1)
stk  ends
     END   @
 

(9.2) ov_near文

要点: ret是近返回

c_near  segment
     assume cs:c_near
     public ov_near
ov_near:mov   ah,2
     mov   dl,'N'
     int   21h
     ret  ;近返回
c_near  ends
     END

(9.3) ov_far文

要点: retf是远返回

c_far  segment
     assume cs:c_far
     public ov_far
ov_far: mov   ah,2
     mov   dl,'F'
     int   21h
     retf  ;远返回
c_far  ends
     END
(9.4) ov_far1文:
c_far1 segment
     assume cs:c_far1
     public ov_far1
ov_far1:mov   ah,2
     mov   dl,'f'
     int   21h
       mov  ah,4ch
      int  21h
c_far1 ends
     END
   用masm5,生成扩展名为obj的root,ov_near,ov_far,ov_far1

用link4 root (ov_near ov_far) (ov_far1),root3,3,,,

生成root3.exe,3.map

exe文件,未囿于括号的obj的各逻辑段,及不属于'CODE'类的代码,是常驻部分,计为0号覆盖块.括号组,生成1号,2号覆盖块.

root3.exe,显'NFf'

改root3.exe为root3,做debug root3,用U 300,反出代码区:

0300 E82D00    CALL  0330              
0303 9A40000000  CALL  0000:0040            
0308 EA50000000  JMP  0000:0050
            

3.map含:

Start Stop  Length Name          Class
Resident
00000H 0000CH 0000DH C_ROOT       
00010H 0002FH 00020H STK         
00030H 00036H 00007H C_NEAR       
00040H 00046H 00007H C_FAR        
00050H 00059H 0000AH C_FAR1       
00060H 00082H 00023H OVERLAY_DATA      DATA
00090H 00090H 00000H OVERLAY_AREA      CODE
00090H 00090H 00000H OVERLAY_END      CODE
Overlay 1H
Overlay 2H
Origin  Group
0006:0  DGROUP

改root3.exe为root3,做debug root3,用D 100 L2A,显出exe文件头的前2Ah个字节:

0100 4D 5A 83 00 02 00 03 00-20 00 01 00 FF FF 01 00
0110 20 00 79 52 00 00 00 00-1E 00 00 00 01 00 04 00
0120 06 00 06 00 00 00 0B 00-00 00
   root3的重定位表,含3项:

第1项,w_o=4,w_p=6,指出OVERLAY_DATA块的字节偏置4,5

第2项,w_o=6,w_p=0,指出CALL 0000:0040中的段值位置.

第3项,w_o=b,w_p=0,指出JMP 0000:0050中的段值位置.

用D 360 L23,显出OVERLAY_DATA块:

0360 01 00 03 00 00 00 00 00-00 00 00 00 00 00 00 00
0370 00 00 00 52 4F 4F 54 33-2E 45 58 45 00 00 00 00
0380 00 00 3F

笔者探出,对OVERLAY_DATA块,字节偏置2,3,是覆盖块数3,偏置4,5,是cs相对装入模块首的节数.

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

Tags:详解 驻留 exe

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