正文

PSP程序段前缀(转)2007-04-23 12:44:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/25154.html

分享到:

程序段前缀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

一个操作示例:

D:\Masm615>dir jch           ;显示计算阶乘的程序

  Volume in drive D has no label
Volume Serial Number is 18F0-186B
Directory of D:\Masm615

JCH    OBJ        371  04-10-03 20:58  JCH.obj
JCH    ASM      3,637  04-03-03 20:46  jch.asm
JCH    COM     12,486  04-10-03  20:58 Jch.com
       3 file(s) 16,494 bytes
       0 dir(s) 915,632,128 bytes free

D:\Masm615>jch 7             ;计算7的阶乘
5040
D:\Masm615>debug jch.com 7   ;用DEBUG查看命令行参数情况
-d80 L10                     ;可看出命令行参数长度为02,参数是:2037 0D
128D:0080 02 20 37 0D 68 2E 63 6F-6D 20 37 0D 00 00 00 00 . 7.h.com 7.....
-
-D0 7F                       ;显示PSP数据
128D:0000 CD 20 00 9D 00 9A F0 FE-1D F0 4F 03 F2 0B 8A 03
128D:0010 F2 0B 17 03 F2 0B E1 0B-01 01 01 00 02 FF FF FF  ;父进程的PSP
128D:0020 FF FF FF FF FF FF FF FF-FF FF FF FF 7E 12 4C 01  ;环境块段地址
128D:0030 F9 0F 14 00 18 00 8D 12-FF FF FF FF 00 00 00 00
128D:0040 07 0A 00 00 00 00 00 00-00 00 00 00 00 00 00 00
128D:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 37 20 20
128D:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20
128D:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00

-D127E:0                      ;显示环境块的内容(在DOS提示符下可用SET命令查看环境信息)
127E:0000 54 4D 50 3D 43 3A 5C 57-49 4E 44 4F 57 53 5C 54 TMP=C:\WINDOWS\T
127E:0010 45 4D 50 00 54 45 4D 50-3D 43 3A 5C 57 49 4E 44 EMP.TEMP=C:\WIND
127E:0020 4F 57 53 5C 54 45 4D 50-00 50 52 4F 4D 50 54 3D OWS\TEMP.PROMPT=
127E:0030 24 70 24 67 00 77 69 6E-62 6F 6F 74 64 69 72 3D $p$g.winbootdir=
127E:0040 43 3A 5C 57 49 4E 44 4F-57 53 00 50 41 54 48 3D C:\WINDOWS.PATH=
127E:0050 43 3A 5C 57 49 4E 44 4F-57 53 3B 43 3A 5C 57 49 C:\WINDOWS;C:\WI
127E:0060 4E 44 4F 57 53 5C 43 4F-4D 4D 41 4E 44 00 43 4F NDOWS\COMMAND.CO
127E:0070 4D 53 50 45 43 3D 43 3A-5C 57 49 4E 44 4F 57 53 MSPEC=C:\WINDOWS
127E:0080 5C 43 4F 4D 4D 41 4E 44-2E 43 4F 4D 00 77 69 6E \COMMAND.COM.win
127E:0090 64 69 72 3D 43 3A 5C 57-49 4E 44 4F 57 53 00 42 dir=C:\WINDOWS.B
127E:00A0 4C 41 53 54 45 52 3D 41-32 32 30 20 49 35 20 44 LASTER=A220 I5 D
127E:00B0 31 20 54 34 20 50 33 30-30 00 43 4D 44 4C 49 4E 1 T4 P300.CMDLIN
127E:00C0 45 3D 64 65 62 75 67 20-6A 63 68 2E 63 6F 6D 20 E=debug jch.com
127E:00D0 37 00 00 01 00 4A 43 48-2E 43 4F 4D 00 FF 1E 8E 7....JCH.COM....
                      (环境块中可找到当前执行的程序名)

-d be1:0                 ;显示父进程的PSP(利用父进程PSP可测知程序是否被其他程序加载跟踪)
0BE1:0000 CD 20 00 A0 00 9A F0 FE-1D F0 14 03 0F 0A 6D 01 . ............m.
0BE1:0010 0F 0A 78 01 0F 0A 0F 0A-01 01 01 00 02 FF FF FF ..x.............
0BE1:0020 FF FF FF FF FF FF FF FF-FF FF FF FF CF 0B 2E 3E ...............>
0BE1:0030 EF 0B 14 00 18 00 DE 0B-FF FF FF FF 00 00 00 00 ................
0BE1:0040 07 0A 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0BE1:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 4A 43 48 .!...........JCH
0BE1:0060 20 20 20 20 20 43 4F 4D-00 00 00 00 00 37 20 20 .....COM.....7
0BE1:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........
0BE1:0080 0A 20 6A 63 68 2E 63 6F-6D 20 37 0D 00 00 00 00 . jch.com 7.....
         ;父进程中的命令行参数

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

阅读(5675) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册