程式段前綴

程式段前綴

program segment prefix ,簡稱PSP(程式段的前綴) 當輸入一個外部命令或通過EXEC子功能(系統功能調用INT 21h的子功能號為4BH)載入一子程式時,COMMAND確定當時記憶體可用空間的最低端作為程式段起點。在程式所占記憶體空間的前256個位元組中,系統會為程式創建程式的前綴(PSP)的數據區,DOS要利用PSP來和被載入程式進行通信;PSP內有程式返回、程式檔案名稱等信息,可以通過研究psp定位檔案名稱信息,進而獲取檔案名稱。 從這段記憶體區的256位元組處開始(在PSP的後面),將程式裝入,程式的地址被設為SA+10H:0 (其中SA為系統為程式分配記憶體的起始位置的段地址即當前暫存器DS的內容);

基本信息

介紹

program segment prefix ,簡稱PSP(程式段的前綴)

當輸入一個外部命令或通過EXEC子功能(系統功能調用INT 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中保存的值恢復各中斷的值。

相關詞條

相關搜尋

熱門詞條

聯絡我們