程序段前缀

王朝百科·作者佚名  2010-08-14  
宽屏版  字体: |||超大  

program segment prefix ,简称PSP(程序段的前缀)

当输入一个外部命令或通过EXEC子功能(系统功能调用INF 21h的子功能号为4BH)加载一子程序时,COMMAND确定当时内存可用空间的最低端作为程序段起点。在程序所占内存空间的前256个字节中,系统会为程序创建程序的前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通信;PSP内有程序返回、程序文件名等信息,可以通过研究psp定位文件名信息,进而获取文件名。

从这段内存区的256字节处开始(在PSP的后面),将程序装入,程序的地址被设为SA+10H:0 (其中SA为系统为程序分配内存的起始位置的段地址即当前寄存器DS的内容);

(注意:PSP区和程序区虽然物理地址连续,却有不同的段地址。)

该PSP中包含以下三部分信息:

(1)供被加载程序使用的DOS入口,如PSP+0、+2、+5和+2CH字段;

(2)供DOS本身使用的DOS入口,如PSP+0AH、+0EH、+12H和+2CH字段;

(3)供被加载程序使用传递参数,如PSP+5CH,+6CH和80H字段。

PSP结构与CP/M中的“控制区域”是十分相近的。这是因为,DOS本身便是从CP/M演变而来的。!

程序段前缀PSP格式:

偏移

字节数

说 明

0000

02

中断20H

0002

02

以节计算的内存大小(利用这个可看出是否感染引导型病毒)

0004

01

保留

0005

05

至DOS的长调用

000A

02

INT 22H 入口 IP

000C

02

INT 22H 入口 CS

000E

02

INT 23H 入口 IP

0010

02

INT 23H 入口 CS

0012

02

INT 24H 入口 IP

0014

02

INT 24H 入口 CS

0016

02

父进程的PSP段值(可测知是否被跟踪)

0018

14

存放20个SOFT号

002C

02

环境块段地址(从中可获知执行的程序名)

002E

04

存放用户栈地址指针

0032

1E

保留

0050

03

DOS调用 ( INT 21H / RETF )

0053

02

保留

0055

07

扩展的FCB头

005C

10

格式化的FCB1

006C

10

格式化的FCB2

007C

04

保留

0080

80

命令行参数长度(不包含总为最后的0D)及参数也是程序运行期间缺省的DTA

另外:保存INT 22/INT 23/INT 24H的值使得用户在程序中可修改这些中断的值,病毒就曾利用这种技术防止不能传染时引起出错信息。在程序退出时根据PSP中保存的值恢复各中断的值。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有