程序段前缀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中保存的值恢复各中断的值。
评论