详解驻留exe文件
2008-12-27 09:35:59 来源:WEB开发网(10) 析栈初始
ML611,汇编map含
00000H , 00000H _TEXT CODE
00000H , 00019H _DATA DATA
00020H , 00020H STACK STACK
00040H , 00033H TAIL
Origin Group
0000:0 DGROUP
entry point at 0004:0000
的t.asm
.model small ;仅数据段,代码段
.data ;随psp
assume cs:@data
cry dw '$!'
i72: push ax
push dx
push ds
mov ah,9
mov dx,cs
mov ds,dx
lea dx,cry
int 21h
pop ds
pop dx
pop ax
iret
i27 dw 0,@data
.stack 32
tail segment
.startup
mov ax,2572h
lea dx,i72
int 21h
mov dx,256+i27 ;计psp的驻容
mov byte ptr es:[1],27h ;es矢psp
sub i27[2],16 ;矢psp
call dword ptr i27 ;转psp:0
tail ends
end
lst含
0015 0000 ---- R i27 dw 0,@data
0000 tail segment
.startup
0017 mov ax,2572h
002F call dword ptr i27
exe文件头
0100 4D 5A 73 00 02 00 02 00-20 00 00 00 FF FF 02 00
0110 20 00 00 00 00 00 04 00-1E 00 00 00 01 00 17 00
0120 00 00 01 00 04 00
重定位表,第1项,矢i27的@data,第2项,矢17字节长的.startup第1字节
00 BA0000 MOV DX,0000 ;运行时,字节1,2,加mcb所占节号及11h,制DS
03 8EDA MOV DS,DX
05 8CD3 MOV BX,SS ;外壳,已加好mcb所占节号及13h到SS
07 2BDA SUB BX,DX ;13h-11h,差值2节,合20h字节
09 D1E3 SHL BX,1
0B D1E3 SHL BX,1
0D D1E3 SHL BX,1
0F D1E3 SHL BX,1
11 FA CLI ;防来中断 12 8ED2 MOV SS,DX ;
14 03E3 ADD SP,BX ;本模式,移栈段环境到数据段高端
16 FB STI
(10.1) DEBUG t.exe实例
栈初始前,DS矢psp,SS已加好,SP=exe头偏移10,11字节值20h:
AX=0000 BX=0000 CX=0073 DX=0000 SP=0020 BP=0000 SI=0000 DI=0000
DS=188B ES=188B SS=189D CS=189F IP=0000
初始后,DS,SS矢@data,SP多加栈容20h字节:
AX=0000 BX=0020 CX=0073 DX=189B SP=0040 BP=0000 SI=0000 DI=0000
DS=189B ES=188B SS=189B CS=189F IP=0017
更多精彩
赞助商链接