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

详解驻留exe文件

 2008-12-27 09:35:59 来源:WEB开发网   
核心提示:(6) 链接时的机器码暂定,及运行重定位exe文件作为操作数的段值,相对装入模块首,被暂定.外壳command.com启动命令行上的程序时,先开辟被节号x,节长1的存储控制块(MCB)标识的空闲内存,此MCB前3个域值为:字节值5A(内存块链尾),字0(无效进程PSP),字y(x+1+y=A000段,即640K内存尾)

(6) 链接时的机器码暂定,及运行重定位exe文件

作为操作数的段值,相对装入模块首,被暂定.外壳command.com启动命令行上的程序时,先开辟被节号x,节长1的存储控制块(MCB)标识的空闲内存,此MCB前3个域值为:字节值5A(内存块链尾),字0(无效进程PSP),字y(x+1+y=A000段,即640K内存尾),然后在x+1段首,先建10节程序段前缀(PSP),后铺展程序的装入模块.

这时,exe装入头的cs/ss值,与x+11h(叫"装入段值")相加,形成运行cs/ss值,此为"运行重定位exe".装入模块中,链接时的各机器码暂定,与外壳指定的"重定位因子"相加,形成运行逻辑段值.

一般地,重定位因子=装入段值.也可用功能4b03的装入段值/重定位因子两参数,分别指定,如(8)所述.

因此,改a1.exe为a,做debug a,用U 321,反出代码区:

0321 B409     MOV AH,09              
0323 BB0000    MOV BX,0000 ;取grp段值             
0326 8EDB     MOV DS,BX              
0328 BA0000    MOV DX,0000 ;取str1相对seg1偏置
032B CD21     INT 21               
032D BA8C00    MOV DX,008C ;取str2相对grp偏置
0330 CD21     INT 21               
0332 BB0A00    MOV BX,000A ;取str3段值
0335 8EDB     MOV DS,BX              
0337 8D160000   LEA DX,[0000] ;ASSUME ds:ovlap时,取str3相对ds偏置            
033B CD21     INT 21               
033D B90000    MOV CX,0000 ;取grp段值             
0340 8ED9     MOV DS,CX              
0342 BAB000    MOV DX,00B0 ;取str3相对grp偏置             
0345 CD21     INT 21               
0347 B90800    MOV CX,0008 ;取seg1段值             
034A 8ED9     MOV DS,CX              
034C BA0F00    MOV DX,000F ;取str4相对seg1偏置             
034F CD21     INT 21               
0351 B44C     MOV AH,4C              
0353 CD21     INT 21
   (7) MS-DOS的exe文件两部构成:

前部,含装入头(1ch字节长)及重定位表;后部,是装入模块.

链接时的各机器码暂定,相对装入模块首的偏置:节,用2个字w_o,w_p,存于重定位表.

(7.1) 装入头的字节偏置:

0,1 : 4d(M),5a(Z)标识

2,3 : exe文件净长度,除以512后的余数

4,5 : exe文件净长度,被512量的值

6,7 : 重定位表的项数

8,9 : 前部占用节数

a,b : 装入模块之后,所需最小节数

c,d : 装入模块之后,所需最大节数

e,f : ss相对装入模块首的节数

10,11 : sp

12,13 : exe文件的字检查和

14,15 : ip

16,17 : cs相对装入模块首的节数

18,19 : 重定位表相对exe文件的字节偏置

1a,1b : 覆盖号

a,长840字节(348h),做debug a,用D 100 L2e,显出exe文件头的前2Eh个字节:

0100 4D 5A 48 01 02 00 04 00-20 00 00 00 FF FF 0C 00
0110 88 00 D3 A2 11 00 01 00-1E 00 00 00 01 00 14 00
0120 01 00 23 00 01 00 2E 00-01 00 38 00 01 00

(7.2) 解释装入头:

(7.2.1) a的长度,除以512后,余148H,放2,3字节

(7.2.2) a的长度,被512量,占2,放4,5字节

(7.2.3) 重定位表,含4项

(7.2.4) exe文件前部,占20H节

(7.2.5) 重定位表相对a,字节偏置是1eh

(7.3) 相对a,字节偏置是1eh的重定位表解释:

第1项,w_o=14h,w_p=1,指出此机器码暂定,相对装入模块首,是1节14h偏置,即1*10h+14h=24h(字节).

debug从100h装a,向高20h节(200h字节),是装入模块首,(100h+200h)加上24h的324h处,恰为MOV BX,0000中的段值位置.

第2项,w_o=23,w_p=1,相对装入模块首,是1节23h偏置,即1*10h+23h=33h(字节).300h加上33h的333h处,恰为MOV BX,000A中的段值位置.

同理,第3,4项,是MOV CX,0000及MOV CX,0008中的段值位置.

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

Tags:详解 驻留 exe

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