⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 内核.txt

📁 会变语言实现的一些程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
C0 13 C9 00 相应DPT地址为00C9:13C0
44 3A 5C 表示目录路径区为D:\
FD 13 C9 00 相应DPT地址为00C9:13FD
45 3A 5C 表示目录路径区为E:\
3A 14 C9 00 相应DPT地址为00C9:143A
46 3A 5C 表示目录路径区为F:\
47 3A 5C 表示目录路径区为G:\
分析
1) 从上面读出的内容可了解到:硬盘有A、B、C、D、E五个区,其中A、B是默认
设置,而C、D、E是硬盘上的逻辑分区。
2) 这五个区的DPT地址都与DPT表中的地址相符合。而F、G这些不是逻辑分区,所
以在硬盘路径表DPAT中虽然都为这些盘符开设了相应空间,但并没有给出具体内容
。三、句柄参数区HPA和句柄参数表HPT
由EMB表格可读出句柄FILES运行环境链链头地址为00C9:00CC,由此可读出下列
代码:
// 0 1 2 3 4 5 6 7 8 9 A B C D E F 
-d00c9:00cc
00C9:00C0 00 00 64 D2 
..d.
00C9:00D0 05 00 1C 00 02 00 00 C0-00 28 00 70 00 00 00 2E .........
(.p....
00C9:00E0 4E 91 26 00 00 00 00 00-00 00 00 00 00 00 00 00 N.&.......
......
00C9:00F0 00 00 41 55 58 20 20 20-20 20 20 20 20 28 00 00 ..AUX 
(..
00C9:0100 00 00 00 92 84 00 00 00-00 00 00 00 00 54 00 02 ..........
...T..
-dd264:0000
D264:0000 08 00 30 06 23 00 01 00-80 00 20 42 90 01 00 01 ..0.#.....
B....
D264:0010 00 00 00 20 A0 D3 24 EB-EA 01 00 13 1F 00 00 00 ... ..$...
......
D264:0020 00 05 00 00 00 00 20 20-20 20 20 20 20 20 20 20 ...... 

D264:0030 20 00 00 00 00 01 00 87-08 00 00 00 00 00 00 C0 .........
......
D264:0040 0A 01 00 80 00 20 42 90-01 00 01 00 00 00 20 A0 ..... B...
.... .
D264:0050 D3 24 F0 7D 00 00 10 7C-00 00 00 00 06 00 00 00 .$.}...|..
......
D264:0060 00 20 20 20 20 20 20 20-20 20 20 20 00 00 00 00 . 
....
D264:0070 01 00 87 08 00 00 00 00-00 00 C0 0A 01 00 00 00 ..........
......
-d0630:0008
0630:0000 FF FF FF FF 0A 00 00 00 ..
......


我们从上面带阴影的代码可读出HPA的表格

00 00 64 D2 下一个HPA的地址为D264:0000

05 00 本环境拥有文件句柄参数表个数为5,这五个句柄是标准输入设备的HPT、标
准输出设备的HPT、标准错误设备的HPT、标准辅助设备的HPT、标准打印设备的
HPT
08 00 30 06 下一个HPA的地址为0630:0008
23 00 本环境拥有文件句柄参数表个数为23H,即45个
FF FF FF FF 表明本HPA为最后一个HPA
0A 00 本环境拥有文件句柄参数表个数=A-5=5

现在具体分析地址为D264:0000的HPA的第一个HPT,得如下表格:

01 00 标志位,表示句柄打开
80 00 打开方式,以FCB方式打开
20 文件属性字
42 90 设备属性字
01 00 01 00 DPT地址
00 00 起始簇号
20 A0 时间
D3 24 日期
EB EA 01 00 文件长度
13 1F 00 00 读写指针
00 00 磁盘文件所占簇数太大,不表示
05 00 当前簇号
00 00 逻辑扇区号
00 目录项号
20 20 20 20
20 20 20 20 
20 20 20 文件名+扩展名,而在这里全为空格,表明这里把本HPT对应的文件的文
件名和扩展名都隐藏起来,在这里不能读出,当在读下面几个HPT都会发现类似情
况,具体见上面的代码的阴影部分

一个有趣的现象:
在WIN98系统默认设置下,句柄参数表个数30个,而不是40个,即在系统文件
CONFIG.SYS中,加入FILES=30和没有加入这一命令语句读出的HPA是一样。
当在CONFIG.SYS中,加入FILES=N
当N=30,即是缺省设置。
当N<30,会读出4个HPA,第一个HPA的HPT的个数为5,第二HPA的HPT的个数为N-5,
第三个HPA 的HPT的个数为30-N,第四HPA的HPT的个数为A
当N>30,会读出3个HPA,第一个HPA的HPT的个数为5,第二HPA的HPT的个数为N-5,
,第三个HPA 的HPT的个数A
举例:
当N=9,即在CONFIG.SYS中加入FILES=40。
9=5+4 
当N=40,即在CONFIG.SYS中加入FILES=40。
40=23H+5=35+5 
当N=50,即在CONFIG.SYS中加入FILES=50,上面的代码就是加入该语句读出的。
50=2DH+5=45+5 
这说明了当N<30,四个HPA中,头一个HPA记录了五个标准设备的HPT,第二个HPA记
录了N-5个HPT,而显然至少需要打开30个HPT才能满足WINDOWS系统的需要,所以第
三个HPA记录了30-N个HPT。而最后一个HPA中的A是一个无用数据(纯属个人观点)
当N>30,三个HPA中,头一个HPA记录了五个标准设备的HPT,中间一个HPA记录了
大部分文件的HPT,而最后一个HPA中的A是一个无用数据

以下是在CONFIG.SYS中加入FILES=9后读出的4个HPA代码:
-d00c9:00cc
00C9:00C0 00 00 64 D2 
..d.
00C9:00D0 05 00 1C 00 02 00 00 C0-00 28 00 70 00 00 00 2E .........
(.p....
00C9:00E0 4E 91 26 00 00 00 00 00-00 00 00 00 00 00 00 00 N.&.......
......
00C9:00F0 00 00 41 55 58 20 20 20-20 20 20 20 20 28 00 00 ..AUX 
(..
00C9:0100 00 00 00 92 84 00 00 00-00 00 00 00 00 54 00 02 ..........
...T..
-dd264:0000
D264:0000 0C 00 37 06 04 00 01 00-80 00 20 42 90 01 00 01 ..7.......
B....
D264:0010 00 00 00 20 A0 D3 24 EB-EA 01 00 13 1F 00 00 35 ... ..$...
.....5
D264:0020 00 05 00 0D 00 0E 20 20-20 20 20 20 20 20 20 20 ......
D264:0030 20 00 00 00 00 01 00 AC-08 00 00 C4 12 00 00 C0 .........
......
D264:0040 0A 01 00 80 00 20 42 90-01 00 01 00 00 00 20 A0 ..... B...
.... .
D264:0050 D3 24 F0 7D 00 00 10 7C-00 00 35 00 06 00 0D 00 .$.}...|..
5.....
D264:0060 0E 20 20 20 20 20 20 20-20 20 20 20 8F 12 00 00 . 
....
D264:0070 01 00 AC 08 00 00 C4 12-00 00 C0 0A 00 00 00 00 ..........
......
-d0637:000c
0637:0000 0C 00 85 06 
....
0637:0010 15 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..........
......
0637:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..........
......
0637:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..........
......
0637:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..........
......
0637:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..........
......
0637:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..........
......
0637:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ..........
......
0637:0080 00 00 00 00 00 00 00 00-00 00 00 00 ..........
..
-d0685:000c
0685:0000 FF FF FF FF 0A 00 00 00 ..
......

四、内存控制块MCB
从EMB表格中可读出内存控制块MCB的起始地址为0211:0000,由此读出以下代码:

// 0 1 2 3 4 5 6 7 8 9 A B C D E F 
-d0211:0000 
0211:0000 4D 08 00 C7 02 00 00 00-53 44 00 00 00 00 00 00 M.......
SD......
-d04d9:0000
04D9:0000 4D 08 00 04 00 4D 4D 00-53 43 3A 20 44 4D 41 20 M....MM.SC:
DMA
-d04de:0000
04DE:0000 4D 2C 05 01 00 33 C0 26-43 4F 4D 4D 41 4E 44 00 M,...3.
&COMMAND.
-d04e0:0000
04E0:0000 4D 02 06 0D 00 4D 50 3D-43 3A 5C 50 57 49 4E 39 M....MP=C:
\PWIN9
-d4ee:0000
04EE:0000 4D EF 04 2D 00 43 41 46-45 53 31 39 33 38 00 41 M..-.
CAFES1938.A
-d051c:0000
051C:0000 4D 2C 05 0E 00 03 01 46-BA B9 02 83 C2 15 C1 EA M,.....F..
......
-d052b:0000
052B:0000 4D 2C 05 D5 00 75 06 2E-57 49 4E 00 01 8B 44 01 M,...u..
WIN...D.
-d0601:0000
0601:0000 4D 02 06 FE 00 00 00 00-76 6D 6D 33 32 00 00 00 M.......
vmm32...
-d0700:0000
0700:0000 4D 11 07 0F 00 B3 F7 0E-9B CE EB 82 CB B3 45 00 M.........
....E.
-d0710:0000
0710:0000 4D 11 07 65 01 CE EB 82-43 4F 4D 4D 41 4E 44 00 M..e....
COMMAND.
-d0876:0000
0876:0000 4D 11 07 59 00 0D 34 BD-8B 1E 31 09 3C 02 74 1F M..Y..4...
1.<.t.
-d8d0:0000
08D0:0000 4D E2 08 10 00 A0 1A 00-8A E0 89 07 1F 07 58 5B M.........
....X[
-d8e1:0000
08E1:0000 5A E2 08 1D 97 8A 33 D2-44 45 42 55 47 00 D1 E9 Z.....3.
DEBUG...

由上面代码的阴影部分得出以下表格:

4D 标记,表示本内存控制块非最后一块
08 00 本内存分配块已分配,该数值表示本内存分配块分配给了系统使用
C7 02 本内存分配块的大小为02C7节(可求得下一个内存分配块地址
=0211+02C7+1=04D9)
4D 标记,表示本内存控制块非最后一块
08 00 本内存分配块已分配,该数值表示本内存分配块分配给了系统使用
04 00 本内存分配块的大小为0004节
(可求得下一个内存分配块地址=04D9+0004+1=04DE)
4D 标记,表示本内存控制块非最后一块
2C 05 本内存分配块已分配
01 00 本内存分配块的大小为0001节
4D 标记,表示本内存控制块非最后一块
2C 06 本内存分配块已分配
0D 00 本内存分配块的大小为000D节
……… ………………
……… ………………
4D 标记,表示本内存控制块非最后一块
2C 05 本内存分配块已分配
2D 00 本内存分配块的大小为000E节
4D 标记,表示本内存控制块非最后一块
2C 05 本内存分配块已分配
D5 00 本内存分配块的大小为00D5节
4D 标记,表示本内存控制块非最后一块
02 06 本内存分配块已分配
FE 00 本内存分配块的大小为00FE节
4D 标记,表示本内存控制块非最后一块
E2 08 本内存分配块已分配
10 00 本内存分配块的大小为0059节
5A 标记,表示本内存控制块为最后一块
E2 08 本内存分配块已分配
1D 97 本内存分配块的大小为971D节


分析:
1、 已知MCB首址,求下一个MCB的地址有两种方法:
一种是:N=现在MCB的地址+1+分配块节数,然后N作为段址,段内偏移为0,可求得
下一个MCB的地址。
另一种是:N=现在MCB的地址*16+1+分配块节数,然后N作为段内偏移,段址相同,
同样可得下一个MCB的地址。(即把现有的地址偏移一位,再与其他数据相加)。

这两种方法求得的地址虽然不同,可读出的内容却一样,这是因为不同的逻辑地址
对应同一物理地址。

由此的如下内存分配图:

第一个MCB

第二个MCB

第三个MCB

第四个MCB

第五个MCB

第六个MCB

第七个MCB

第八个MCB

第九个MCB

第十个MCB

第十一个MCB

第十二个MCB

第十三个MCB

五、BUFFERS运行环境
由EMB表格可读出BUFFERS链的首地址为00C9:006D,由此可读出以下代码:
// 0 1 2 3 4 5 6 7 8 9 A B C D E F 
-d00c9:006d
00C9:0060 04 00 96
00C9:0070 04 00 00 00 00 00 00 00-00 01 00 00 B9 04 F4 12
-d0496:0004
0496:0000 04 00 96 04-FF 00 FF FF FF FF B8 00 ......
......
0496:0010 6C CD 21 0F 82 07 00 8B-D8 B4 3E CD 21 F8 58 59 l.!.......
>.!.XY

从上面代码可看出,在 WIN98下只有两个缓冲区,这显然是不对,所以WIN98的
BUFFERS链不能这样读出,我们只能从MSDOS6.22或WIN98的MS-DOS方式下读出
BUFFERS链,如下代码:

-d00c9:006d
00C9:0060 58 34 D7 
(0.
00C9:0070 26 02 00 00 00 00 00 00-00 00 00 00 00 00 F4 12 &.........
......
-d26d7:3458
26D7:3450 88 38 f0 14 02 04 F2 9B ..

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -