内核模块:Win98内核-IBMBIO各模块的介绍



Win98内核分析(Kernel32)

IBMBIO各模块介绍

、环境管理块emb
要读入EMB可使用INT2152H号功能该中断后EMB地址会放在ES:BX
具体使用方法如下:
C:\\>debug
-a
0F6C:0100movah,52
0F6C:010221
0F6C:01043
0F6C:0105
-g=01000104//运行100至104命令
AX=5200BX=0026CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0F6CES=00C9SS=0F6CCS=0F6CIP=0104NVUPEIPLNZNAPONC
0F6C:0104CCINT3
-d00c9:0024//显示EMB内容
00C9:002011024613-C900CC00C9004C00..F...
....L.
00C9:00307000160070000002-6D00C900000097D5p...p...m.
个MCB地址0211:0000
FILES运行环境链链头地址00C9:00CC
当前标准输入设备标题首址0070:0016
BUFFERS运行环境链链头地址00C9:006D
FCBS运行环境链头地址D2E7:0000
逻辑驱动器号05
设备驱动链头地址D181:0000
DPT链头地址00C9:1346
当前时钟设备标题首址0070:004C
每个缓冲区字节数0200
磁盘路径表(DPAT)首址D597:0000
DOS不能自动关闭FCB数目0000
最末驱动器号1A

......
00C9:00400000E7D20000051A-000081D10480CD0D..........
......
(从0024读起是为了读入MCB地址) 2、磁盘参数表DPT和磁盘路径表DPAT
1.磁盘参数表DPT
由EMB表格知道DPT链头地址为00C9:1346根据该地址可读出DPT内容如下代
码:

//0123456789ABCDEF
-d00c9:1346
00C9:13400000-0002FE0001000240....
.....@
00C9:13500009006001020005-005E007000008083...`.....
^.p....
00C9:136013C9000000FFFFFF-FF891EEC182E8C09..........
......
-d00c9:1383
00C9:138001010002FE-0001000240000900.......
..@...
00C9:13906001020005005E00-70000080C013C900`.....^.p.
......
00C9:13A00000FFFFFFFF3580-3F0E740A09000000......5.?. [Page]
t.....
-d00c9:13c0
00C9:13C0020200021F050100-02000201022EEFF0..........
......
00C9:13D000E1015E007000F8-00FD13C9000200FF...^.p....
......
00C9:13E0FFFFFF001A720D06-2E010200002EEF00.....r....
......-d00c9:13fd
00C9:13F0030300
...
00C9:1400023F060100020002-010237EFF000E101.?........
7.....
00C9:14105E007000F8003A14-C9000000FFFFFFFF^.p...:...
......
-d00c9:143a
00C9:1430040400021F05
......
00C9:1440010002000201022E-EFF000E1015E0070..........
...^.p
00C9:145000F80000006E0600-00FFFFFFFFCD17C3.....n....
......
-d066e:0000
066E:00000606000000000000-0000000000000000..........
......
066E:001000000000006A0600-00FFFFFFFF000000.....j....
......
066E:00200000000000000000-0000000000000000..........
......
066E:00300000000000000000-0000000000000000..........
......
066E:00400000000000000000-0000000000000000..........
......


现在把上面有阴影代码按从左到右从上到下顺序读出其中具体内容:


00相同设备BPB序号为0


00本DPT对应逻辑驱动器号为0
0002每扇区字节数为0200即512个字节
FE每簇扇区数当前A盘不用该数据项无效
00每簇扇区数对2对数当前A盘不用该数据项无效
0100保留扇区数为1
02FAT个数为2
4000根目录项数为40H个
0900文件区起始扇区号为0009
6001文件区占用簇数为0160H
02每个FAT占用扇区数为2 [Page]
0005目录区起始扇区号为0500
005E0070相应设备驱动设备标题指针为7000:5E00
80介质描述字节当前A盘不用该数据项无效
00该DPT使用标志当前A盘不用该数据项无效
8313C900下个DPT指针为00C9:1383
0000当前目录首簇号为0000
FFFFFFFF空簇数

01相同设备BPB序号为1
01本DPT对应逻辑驱动器号为1
0002每扇区字节数为0200即512个字节
FE每簇扇区数当前B盘不用该数据项无效
00每簇扇区数对2对数当前B盘不用该数据项无效
0100保留扇区数为1
02FAT个数为2
4000根目录项数为40H个
0900文件区起始扇区号为0009
6001文件区占用簇数为0160H
02每个FAT占用扇区数为2
0005目录区起始扇区号为0500
005E0070相应设备驱动设备标题指针为7000:5E00
80介质描述字节当前B盘不用该数据项无效
00该DPT使用标志当前B盘不用该数据项无效
C013C900下个DPT指针为00C9:13C0
0000当前目录首簇号为0000
FFFFFFFF空簇数

02相同设备BPB序号为2
02本DPT对应逻辑驱动器号为2
0002每扇区字节数为0200即512个字节
1F每簇扇区数为20H(每簇有32个扇区)
05每簇扇区数对2对数为5(32为25次方)
0100保留扇区数为1
02FAT个数为2
0002根目录项数为200H个
0102文件区起始扇区号为0201
2EEF文件区占用簇数为EF2EH
F0每个FAT占用扇区数为F0H
00E1:目录区起始扇区号为E100H
015E0070相应设备驱动设备标题指针为7000:5E01
F8介质描述字节为F8表示硬盘
00该DPT使用标志为00正在使用
C013C900下个DPT指针为00C9:13FD
0200当前目录首簇号为0200H
FFFFFFFF空簇数

03相同设备BPB序号为3
03本DPT对应逻辑驱动器号为3
0002每扇区字节数为0200即512个字节
3F每簇扇区数为40H(每簇有64个扇区)
06每簇扇区数对2对数为6(64为26次方)
0100保留扇区数为1
02FAT个数为2
0002根目录项数为200H个
0102文件区起始扇区号为0201
37EF文件区占用簇数为EF37H
F0每个FAT占用扇区数为F0H
00E1:目录区起始扇区号为E100H
015E0070相应设备驱动设备标题指针为7000:5E01
F8介质描述字节为F8表示硬盘
00该DPT使用标志为00正在使用
3A14C900下个DPT指针为00C9:143A
0000当前目录首簇号为0000即根目录 [Page]
FFFFFFFF空簇数

04相同设备BPB序号为4
04本DPT对应逻辑驱动器号为4
0002每扇区字节数为0200即512个字节
1F每簇扇区数为20H(每簇有32个扇区)
05每簇扇区数对2对数为5(32为25次方)
0100保留扇区数为1
02FAT个数为2
0002根目录项数为200H个
0102文件区起始扇区号为0201
2EEF文件区占用簇数为EF2EH
F0每个FAT占用扇区数为F0H
00E1:目录区起始扇区号为E100H
015E0070相应设备驱动设备标题指针为7000:5E01
F8介质描述字节为F8表示硬盘
00该DPT使用标志为00正在使用
00006E06下个DPT指针为066E:0000
0000当前目录首簇号为0000即根目录
FFFFFFFF空簇数

后面代码内容都差不多就不在赘述了
分析:
1)和DOS旧版本来说WIN98DPT内数据项偏移有所区别从介质描述字节项开
后面数据项偏移都下移即介质描述字节偏移为17HDPT使用标志偏移
为18H等等
2)由于没有使用A、B盘所以A、B盘对应DPT里面些数据项内容会表现
不合理
3)对于C、D、E盘来说由于保留扇区数为1而根目录项占用了200H个扇区
以文件区起始扇区为0201H即文件区起始扇区号值包含了引导记录、FAT表和根目
录所占用扇区总数
4)由于C、D、E盘都为硬盘所以相应设备驱动设备标题指针都相同都是硬
盘驱动设备标题指针

2.磁盘路径参数表DPAT
由EMB表格知道DPT链头地址为00C9:1346根据该地址可读出DPT内容如下代
码:
//0123456789ABCDEF
-dd597:0000
D597:0000413A5C0000000000-0000000000000000A:\\.......
......
D597:00100000000000000000-0000000000000000..........


......
D597:00200000000000000000-0000000000000000..........
......
D597:00300000000000000000-0000000000000000..........
......
D597:004000000000404613C9-00FFFFFFFFB26E02....@F....
....n.
D597:00500000C00A81D10000-423A5C0000000000........B: [Page]
\\.....
D597:00600000000000000000-0000000000000000..........
......
D597:00700000000000000000-0000000000000000..........
......
D597:00800000000000000000-0000000000000000..........
......
D597:00900000000000000000-00000000408313C9..........
..@...
D597:00A000FFFFFFFFFFFF02-0000000000000000..........
......
D597:00B0433A5C0057494E39-38002046494C4553C:\\.WIN98.
FILES
D597:00C05C4D53495C534F46-54434F4F4C455200
\\MSI\\SOFTCOOLER.
D597:00D00000000000000000-0000000000000000..........
......
D597:00E00000000000000000-0000000000000000..........
......
D597:00F00000000040C013C9-00FFFFFFFFB26E02....@.....
....n.
D597:01000000C00A81D10000-443A5C0000000000........D:
\\.....
D597:01100000000000000000-0000000000000000..........
......
D597:01200000000000000000-0000000000000000..........
......
D597:01300000000000000000-0000000000000000..........
......
D597:01400000000000000000-0000000040FD13C9..........
..@...
D597:015000FFFFFFFFB26E02-0000C00A81D10000......n...
...... [Page]
D597:0160453A5C0000000000-0000000000000000E:\\.......
......
D597:01700000000000000000-0000000000000000..........
......
D597:01800000000000000000-0000000000000000..........
......
D597:01900000000000000000-0000000000000000..........
......
D597:01A000000000403A14C9-00FFFFFFFFB26E02....@:....
....n.
D597:01B00000C00A81D10000-463A5C0000000000........F:
\\.....
D597:01C00000000000000000-0000000000000000..........
......
D597:01D00000000000000000-0000000000000000..........
......
D597:01E00000000000000000-0000000000000000..........
......
D597:01F00000000000000000-0000000000000000..........
......
D835:020000FFFFFFFFFFFF02-0000000000000000..........
......
D835:0210473A5C0000000000-0000000000000000G:\\.......


......
D835:02200000000000000000-0000000000000000..........
......
D835:02300000000000000000-0000000000000000..........
......
D835:02400000000000000000-0000000000000000..........
......
D835:[email protected]..
....n.
D835:02600000C00A81D10000-483A5C0000000000........H: [Page]
\\.....

由上述代码读出带阴影部分得到如下表格:

413A5C表示目录路径区为A:\\
4613C900相应DPT地址为00C9:1346
423A5C表示目录路径区为B:\\
8313C900相应DPT地址为00C9:1383
433A5C0057494E39-38002046494C45535C4D53495C534F
46-54434F4F4C4552:表示目录路径区为C:\\.WIN98.FILES
\\MSI\\SOFTCOOLER.
C013C900相应DPT地址为00C9:13C0
443A5C表示目录路径区为D:\\
FD13C900相应DPT地址为00C9:13FD
453A5C表示目录路径区为E:\\
3A14C900相应DPT地址为00C9:143A
463A5C表示目录路径区为F:\\
473A5C表示目录路径区为G:\\
分析
1)从上面读出内容可了解到:硬盘有A、B、C、D、E 5个区其中A、B是默认
设置而C、D、E是硬盘上逻辑分区
2)这 5个区DPT地址都和DPT表中地址相符合而F、G这些不是逻辑分区
以在硬盘路径表DPAT中虽然都为这些盘符开设了相应空间但并没有给出具体内容
3、句柄参数区HPA和句柄参数表HPT
由EMB表格可读出句柄FILES运行环境链链头地址为00C9:00CC由此可读出下列
代码:
//0123456789ABCDEF
-d00c9:00cc
00C9:00C0000064D2
..d.
00C9:00D005001C00020000C0-002800700000002E.........
(.p....
00C9:00E04E91260000000000-0000000000000000N.&.......
......
00C9:00F00000415558202020-2020202020280000..AUX
(..
00C9:01000000009284000000-0000000000540002..........
...T..
-dd264:0000
D264:00000800300623000100-8000204290010001..0.#.....
B....
D264:001000000020A0D324EB-EA0100131F000000.....$...
......
D264:00200005000000002020-2020202020202020...... [Page]

D264:00302000000000010087-08000000000000C0.........
......
D264:00400A01008000204290-01000100000020A0.....B...
.....
D264:0050D324F07D0000107C-0000000006000000.$.}...|..
......
D264:00600020202020202020-2020202000000000.
....
D264:00700100870800000000-0000C00A01000000..........
......
-d0630:0008
0630:0000FFFFFFFF0A000000..
......


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

000064D2下个HPA地址为D264:0000

0500本环境拥有文件句柄参数表个数为5这 5个句柄是标准输入设备HPT、标
准输出设备HPT、标准设备HPT、标准辅助设备HPT、标准打印设备
HPT
08003006下个HPA地址为0630:0008
2300本环境拥有文件句柄参数表个数为23H即45个
FFFFFFFF表明本HPA为最后个HPA
0A00本环境拥有文件句柄参数表个数=A-5=5

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



0100标志位表示句柄打开
8000打开方式以FCB方式打开
20文件属性字
4290设备属性字
01000100DPT地址
0000起始簇号
20A0时间
D324日期
EBEA0100文件长度
131F0000读写指针
0000磁盘文件所占簇数太大不表示
0500当前簇号
0000逻辑扇区号
00目录项号
20202020
20202020
202020文件名+扩展名而在这里全为空格表明这里把本HPT对应文件
件名和扩展名都隐藏起来在这里不能读出当在读下面几个HPT都会发现类似情
具体见上面代码阴影部分

个有趣现象:
在WIN98系统默认设置下句柄参数表个数30个而不是40个即在系统文件
CONFIG.SYS中加入FILES=30和没有加入这命令语句读出HPA是
当在CONFIG.SYS中加入FILES=N
当N=30即是缺省设置
当N<30会读出4个HPA个HPAHPT个数为5第 2HPAHPT个数为N-5
第 3个HPAHPT个数为30-N第 4HPAHPT个数为A
当N>30会读出3个HPA个HPAHPT个数为5第 2HPAHPT个数为N-5 [Page]
第 3个HPAHPT个数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, 4个HPA中个HPA记录了 5个标准设备HPT第 2个HPA记
录了N-5个HPT而显然至少需要打开30个HPT才能满足WINDOWS系统需要所以第
3个HPA记录了30-N个HPT而最后个HPA中A是个无用数据(纯属个人观点)

当N>30 3个HPA中个HPA记录了 5个标准设备HPT中间个HPA记录了
大部分文件HPT而最后个HPA中A是个无用数据

以下是在CONFIG.SYS中加入FILES=9后读出4个HPA代码:
-d00c9:00cc
00C9:00C0000064D2
..d.
00C9:00D005001C00020000C0-002800700000002E.........
(.p....
00C9:00E04E91260000000000-0000000000000000N.&.......
......
00C9:00F00000415558202020-2020202020280000..AUX
(..
00C9:01000000009284000000-0000000000540002..........
...T..
-dd264:0000
D264:00000C00370604000100-8000204290010001..7.......
B....
D264:001000000020A0D324EB-EA0100131F000035.....$...
.....5
D264:00200005000D000E2020-2020202020202020......
D264:003020000000000100AC-080000C4120000C0.........
......
D264:00400A01008000204290-01000100000020A0.....B...
.....
D264:0050D324F07D0000107C-0000350006000D00.$.}...|..
5.....
D264:00600E20202020202020-202020208F120000.
....
D264:00700100AC080000C412-0000C00A00000000.......... [Page]
......
-d0637:000c
0637:00000C008506
....
0637:00101500000000000000-0000000000000000..........
......
0637:00200000000000000000-0000000000000000..........
......
0637:00300000000000000000-0000000000000000..........
......
0637:00400000000000000000-0000000000000000..........
......
0637:00500000000000000000-0000000000000000..........
......
0637:00600000000000000000-0000000000000000..........
......
0637:00700000000000000000-0000000000000000..........


......
0637:00800000000000000000-00000000..........
..
-d0685:000c
0685:0000FFFFFFFF0A000000..
......

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

//0123456789ABCDEF
-d0211:0000
0211:00004D0800C702000000-5344000000000000M.......
SD......
-d04d9:0000
04D9:00004D080004004D4D00-53433A20444D4120M....MM.SC:
DMA
-d04de:0000
04DE:00004D2C05010033C026-434F4D4D414E4400M,...3.
&COMMAND.
-d04e0:0000
04E0:00004D02060D004D503D-433A5C5057494E39M....MP=C:
\\PWIN9
-d4ee:0000
04EE:00004DEF042D00434146-4553313933380041M..-.
CAFES1938.A
-d051c:0000
051C:00004D2C050E00030146-BAB90283C215C1EAM,.....F.. [Page]
......
-d052b:0000
052B:00004D2C05D50075062E-57494E00018B4401M,...u..
WIN...D.
-d0601:0000
0601:00004D0206FE00000000-766D6D3332000000M.......
vmm32...
-d0700:0000
0700:00004D11070F00B3F70E-9BCEEB82CBB34500M.........
....E.
-d0710:0000
0710:00004D11076501CEEB82-434F4D4D414E4400M..e....
COMMAND.
-d0876:0000
0876:00004D110759000D34BD-8B1E31093C02741FM..Y..4...
1.<.t.
-d8d0:0000
08D0:00004DE2081000A01A00-8AE089071F07585BM.........
....X[
-d8e1:0000
08E1:00005AE2081D978A33D2-444542554700D1E9Z.....3.
DEBUG...

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

4D标记表示本内存控制块非最后
0800本内存分配块已分配该数值表示本内存分配块分配给了系统使用
C702本内存分配块大小为02C7节(可求得下个内存分配块地址
=0211+02C7+1=04D9)
4D标记表示本内存控制块非最后
0800本内存分配块已分配该数值表示本内存分配块分配给了系统使用
0400本内存分配块大小为0004节
(可求得下个内存分配块地址=04D9+0004+1=04DE)
4D标记表示本内存控制块非最后
2C05本内存分配块已分配
0100本内存分配块大小为0001节
4D标记表示本内存控制块非最后
2C06本内存分配块已分配
0D00本内存分配块大小为000D节
………………………
………………………
4D标记表示本内存控制块非最后
2C05本内存分配块已分配
2D00本内存分配块大小为000E节
4D标记表示本内存控制块非最后
2C05本内存分配块已分配
D500本内存分配块大小为00D5节
4D标记表示本内存控制块非最后
0206本内存分配块已分配
FE00本内存分配块大小为00FE节
4D标记表示本内存控制块非最后
E208本内存分配块已分配
1000本内存分配块大小为0059节
5A标记表示本内存控制块为最后
E208本内存分配块已分配
1D97本内存分配块大小为971D节 [Page]


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

这两种思路方法求得地址虽然区别可读出内容却这是区别逻辑地址
对应同物理地址

由此如下内存分配图:

个MCB

第 2个MCB

第 3个MCB

第 4个MCB

第 5个MCB

第 6个MCB

第 7个MCB

第 8个MCB

第 9个MCB

第十个MCB

第十个MCB

第十 2个MCB

第十 3个MCB

5、BUFFERS运行环境
由EMB表格可读出BUFFERS链首地址为00C9:006D由此可读出以下代码:
//0123456789ABCDEF


-d00c9:006d
00C9:0060040096
00C9:00700400000000000000-00010000B904F412
-d0496:0004
0496:000004009604-FF00FFFFFFFFB800......
......
0496:00106CCD210F8207008B-D8B43ECD21F85859l.!.......
>.!.XY

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

-d00c9:006d
00C9:00605834D7
(0.
00C9:00702602000000000000-000000000000F412&.........
......
-d26d7:3458
26D7:34508838f0140204F29B..
.8....
26D7:346008000100000000C0-13C9000000000000..........
......
-d26d7:3888
26D7:3880182058340204F19B
X4.!....
26D7:389008000100000000C0-13C9000007004E61..........
....Na
-d26d7:2018
26D7:20103004883872000000
w%..r...
26D7:2020417200770075006E-0069000F00266E00Ar.w.u.n.
i...&n.
-d26d7:0430
26D7:04307036182002041824-09000100000000C0p6.C...$.. [Page]
......
26D7:044013C900FF0A000A00-4547412020202020........EGA

-d26d7:3670
26D7:36704806300402041924-09000100000000C00G0....$..
......
26D7:368013C90011C8112A12-58434F5059333220......*.
XCOPY32
-d26d7:0648
26D7:0640A851703602081A55..
.Q...U
26D7:065005000100000000C0-13C9007973636C61..........
.yscla
-d26d7:51a8
26D7:51A04806381B02022B00H.
8...+.
26D7:51B0000002FA000000C0-13C900C703000000..........
......
-d26d7:1b38
26D7:1B309823A85102083D55.
Q`K..=U
26D7:1B4005000100000000C0-13C900CCBFD8D6C6..........
......
-d26d7:2398
26D7:23900817381B02420100.
...B..
26D7:23A0000002FA000000C0-13C9004E6F72746F..........
.Norto
-d26d7:1708
26D7:1700201998230248A21F
(0..H..
26D7:171000000100000000C0-13C900E0004E0019..........
...N..
-d26d7:1920
26D7:1920283008170208F51E-00000100000000C0...#......
......
26D7:193013C900FFFFFFFF00-6420303063393A30........d
00c9:0
-d26d7:3028
26D7:3020904F20190204DE9B.
O......
26D7:303008000100000000C0-13C9000000000000..........
......

-d26d7:4f90
26D7:4F90E02928300204DF9B-08000100000000C0.)(0...... [Page]
......
26D7:4FA013C9000000D8C421-57454C434F4D4520.......
!WELCOME
-d26d7:29e0
26D7:29E06008904F0204E09B-08000100000000C0`..O......
......
26D7:29F013C9000000000000-4F444243494E5354........


ODBCINST
-d26d7:0860
26D7:0860900CE0290204E19B-08000100000000C0...)......
......
26D7:087013C900FFFFFF0000-5154572020202020........QTW

-d26d7:0c90
26D7:0C90780A60080204E29B-08000100000000C0x.`.......
......
26D7:0CA013C9005365637469-50524F474D414E20...
SectiPROGMAN
-d26d7:0a78
26D7:0A70A80E900C0204E39B..
......
26D7:0A8008000100000000C0-13C900FFFFFFFF0E..........
......
-d26d7:0ea8
26D7:0EA0D812780A0204E49B..
x.....
26D7:0EB008000100000000C0-13C9004953502E49..........
.ISP.I
-d26d7:12d8
26D7:12D0501DA80E0204E59BP.
......
26D7:12E008000100000000C0-13C9003139393701..........
.1997.
-d26d7:1d50
26D7:1D50681FD8120204E69B-08000100000000C0h.........
......
26D7:1D6013C90000000A00D3-494E5445524E7E31........
INTERN~1
-d26d7:1f68
26D7:1F60A03A501D0204E79B.:
P.....
26D7:1F7008000100000000C0-13C90073EA000000..........
.s....
-d26d7:3aa0 [Page]
26D7:3AA00000681F0204E89B-08000100000000C0..h.......
......
26D7:3AB013C900FF04002900-4163006400330032......).
Ac.d.3.2
-d26d7:0000
26D7:0000C010A03A0204E99B-08000100000000C0...:......
......
26D7:001013C900004E009800-416F00750074006C....N...
Ao.u.t.l
-d26d7:10c0
26D7:10C0B83C00000204EA9B-08000100000000C0.<........
......
26D7:10D013C9004741010000-4E45545343415045...GA...
NETSCAPE
-d26d7:3cb8
26D7:3CB0D03EC0100204EB9B.
>......
26D7:3CC008000100000000C0-13C90000FFFFFFFF..........
......
-d26d7:3ed0
26D7:3ED01845B83C0204EC9B-08000100000000C0.E.<......
......
26D7:3EE013C9002C45303030-4254544E43555220...,
E000BTTNCUR


-d26d7:4518
26D7:45104849D03E0204ED9B
HI.>....
26D7:452008000100000000C0-13C9003539336370..........
.593cp
-d26d7:4948
26D7:4940E84018450204EE9B..
.E....
26D7:495008000100000000C0-13C9000800060030..........
.....0
-d26d7:40e8
26D7:40E00043484902041624.
C.%...$
26D7:40F009000100000000C0-13C9005845000400..........
.XE...
-d26d7:4300
26D7:4300F82BE84002041724-09000100000000C00..@...$..
......
26D7:431013C9005000170000-4353455455502020...P.... [Page]
CSETUP
-d26d7:2bf8
26D7:2BF0784D00430204F49B


xM......
26D7:2C0008000100000000C0-13C9000000000000..........
......
-d26d7:4d78
26D7:4D703047F82B0204F59B.
%.+....
26D7:4D8008000100000000C0-13C900F7BF10E407..........
......
-d26d7:4730
26D7:[email protected]...
......
26D7:474013C90001000000FF-0144024403440444.........
D.D.D.D
-d26d7:3240
26D7:3240C82730470204F501-00000100000000C0.’0G......
......
26D7:325013C9000000000000-4D53444F53202020........
MSDOS
-d26d7:27c8
26D7:27C0604B403202024A00
`[email protected].
26D7:27D0000002FA000000C0-13C9000000000000..........
......
-d26d7:4b60
26D7:4B608021C8270204D59B-08000100000000C08..’......
......
26D7:4B7013C9003231D3A1B6-2E20202020202020...21....

-d26d7:2180
26D7:2180102E604B0204F09B-08000100000000C0.8........
......
26D7:219013C900480000000E-4153007400750064...H....
AS.t.u.d
-d26d7:2e10
26D7:2E10B02580210204EF9B-08000100000000C0.!HI......
......
26D7:2E2013C9000000000000-554E454E43393720........
UNENC97
-d26d7:25b0
26D7:25B0F014102E0204F69B-08000100000000C0.@xM...... [Page]
......
26D7:25C013C90065CF070300-E550533533333320...e.....
PS5333
-d26d7:14f0
26D7:14F05834B02502041524-09000100000000C0.#H....$..
......
26D7:150013C9006461726420-2E20202020202020...dard.



分析:从上面代码我们可了解到
1、首先由EMB表格中得到BUFFER区首地址指针为00c9:006d
2、其次从读出代码看出所有BUFFER都在同段内即段地址相同所以后
BUFFER只需给出下个BUFFERS偏移地址就可找到下个BUFFER
3、从BUFFER头具体内容可看到在BUFFER头 4个字节中前两个字节指出了
个BUFFER偏移地址而后两个字节指出了前个BUFFER偏移地址从而构
成了个双向链表同时个BUFFER后两个字节指向了最后个BUFFER
最后个BUFFER前两个字节也指向了第个BUFFER从而形成了个循环链表
可见BUFFERS是个循环双向链表

6、硬盘分区表
我们知道硬盘分区表是放在硬盘隐含扇区中所以需用INT13H来读出当读出
分区BOOT只要偏移1BE就可读出硬盘分区表如下代码:
-d0f6c:31be
0F6C:31B08001
..
0F6C:31C0010006FE3F793F00-0000BBE71D000000....?y?...
......
0F6C:31D0017A05FEBF6DFAE7-1D00F4907A000000.z...m....
..z...
0F6C:31E00000000000000000-0000000000000000..........
......
0F6C:31F00000000000000000-00000000000055AA..........
....U.
0F6C:32008C0826C6068E08FF-26A2C108FCB91000..&.....&.
......
0F6C:3210BF8F08F3AAB91000-BF9F08F3AB075F59..........
...._Y

从上面有阴影代码可得到如下表格:

80自举分区标志
010100分区1开始于1头0柱1扇区
06系统标志表示FAT为16位大容量DOS


FE3F79分区1结束于FE头79柱3F扇区
3F000000分区1相对扇区号为3F
BBE71D00分区1扇区数为001DE7BB个(可求得分区1容量=1DE7BB* [Page]
200≈1GB)
00非自举分区标志
00017A分区2开始于0头7A柱1扇区
05系统标志表示扩展D0S
FEBF6D分区2结束于FE头6D柱BF扇区
FAE7-1D00分区2相对扇区号为001DE7FA(注意:1DE7FA=1DE7BB+3F)
F4907A00分区2扇区数为007A90F4个(可求得分区2容量=7A90F4*
200≈4GB)
55AA主引导记录有效标志为AA55表示有效

分析:
1、从上面读出硬盘分区内容可了解到在WINDOWS系统中通常分为两个分区
个为自举分区它为系统区即C盘个为扩展分区扩展分区包括所有
逻辑分区而逻辑分区具体内容并不在上面硬盘分区表中显示我们可从前面
磁盘参数表DPT和磁盘路径表中读出逻辑分区具体内容
2、分区1相对扇区号正是隐含扇区占用扇区数而分区2相对扇区号恰是分
区1分区大小加上隐含扇区大小这在上面表格中可看出

7、驱动参数块DPB
使用第章介绍命令我们可读出以下代码:-l0f6e:1000201

//0123456789ABCDEF
-d00c9:0024
-d0f6e:1000
0F6E:1000EB3C904D5357494E-342E310002200100.<.MSWIN4.
1....
0F6E:10100200020000F8F000-3F00FF003F000000........?.
..?...
0F6E:1020BBE71D008000295D-A359252020202020......)].
Y%

由带阴影部分代码我们可得到以下表格:

4D5357494E342E31当前操作系统版本号MSWIN4.1
0002每扇区字节数为200H即512字节
20每簇扇区数为20H即32个扇区
0100保留扇区数为1
02FAT个数为2
0002根目录项数为200H即512项
0000总扇区数这里因数目过大在后面表示
F8介质描述字节
F000每个FAT占用扇区数为0FH
3F00每道扇区数为3F
FF00磁头数为FFH共255个磁头
3F000000隐含扇区数为3FH
BBE71D00总扇区数为1DBBE7

分析:
1、上面表格项并不属于DPB但从中可读出当前操作系统版本号若操
作系统为MSDOS就会显示DOS版本号若为WINDOWS则显示WINDOWS版本号
WIN98对应版本号为MSWIN4.1当你运行WIN98附件中系统工具系统信息可同
样读出系统信息:MicrosoftWindows984.10.1998
2、在高版本操作系统中由于硬盘容量太大两个字节不能表示通常在隐含 [Page]
扇区数后4个字节记录总扇区数从表格最后项可读出该总扇区数也就是C盘
扇区数(参考前面硬盘分区表中分区1数据)这是当前读出DPB是C盘
对应DPB也可以另外读出D、E盘DPB
Tags:  内核模块makefile 加载内核模块 linux内核模块 内核模块

延伸阅读

最新评论

发表评论