程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Win98內核分析(Kernel32)

Win98內核分析(Kernel32)

編輯:關於C++

IBMBIO各模塊的介紹。

一、環境管理塊emb

要讀入EMB,可使用INT 21 的52H號功能。調用該中斷後,EMB的地址會放在ES:BX中。具體用法如下:

C:\>debug

-a

0F6C:0100 mov ah,52

0F6C:0102 int 21

0F6C:0104 int 3

0F6C:0105

-g=0100 0104 //運行100至104的命令

AX=5200 BX=0026 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0F6C ES=00C9 SS=0F6C CS=0F6C IP=0104 NV UP EI PL NZ NA PO NC

0F6C:0104 CC INT 3

-d00c9:0024 //顯示EMB的內容

00C9:0020 11 02 46 13-C9 00 CC 00 C9 00 4C 00 ..F...

....L.

00C9:0030 70 00 16 00 70 00 00 02-6D 00 C9 00 00 00 97 D5 p...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:0040 00 00 E7 D2 00 00 05 1A-00 00 81 D1 04 80 CD 0D ..........

......

(從0024讀起是為了讀入MCB的地址)二、磁盤參數表DPT和磁盤路徑表DPAT

1.磁盤參數表DPT

由EMB的表格知道DPT鏈頭地址為00C9:1346,根據該地址可讀出DPT的內容如下代碼:

// 0 1 2 3 4 5 6 7 8 9 A B C D E F

-d00c9:1346

00C9:1340 00 00-00 02 FE 00 01 00 02 40 .........@

00C9:1350 00 09 00 60 01 02 00 05-00 5E 00 70 00 00 80 83 ...`.....^.p....

00C9:1360 13 C9 00 00 00 FF FF FF-FF 89 1E EC 18 2E 8C 09 ................

-d00c9:1383

00C9:1380 01 01 00 02 FE-00 01 00 02 40 00 09 00 .........@...

00C9:1390 60 01 02 00 05 00 5E 00-70 00 00 80 C0 13 C9 00 `.....^.p.......

00C9:13A0 00 00 FF FF FF FF 35 80-3F 0E 74 0A 09 00 00 00 ......5.?.t.....

-d00c9:13c0

00C9:13C0 02 02 00 02 1F 05 01 00-02 00 02 01 02 2E EF F0 ................

00C9:13D0 00 E1 01 5E 00 70 00 F8-00 FD 13 C9 00 02 00 FF ...^.p..........

00C9:13E0 FF FF FF 00 1A 72 0D 06-2E 01 02 00 00 2E EF 00 .....r..........

-d00c9:13fd

00C9:13F0 03 03 00 ...

00C9:1400 02 3F 06 01 00 02 00 02-01 02 37 EF F0 00 E1 01 .?........7.....

00C9:1410 5E 00 70 00 F8 00 3A 14-C9 00 00 00 FF FF FF FF ^.p...:.........

-d00c9:143a

00C9:1430 04 04 00 02 1F 05 ......

00C9:1440 01 00 02 00 02 01 02 2E-EF F0 00 E1 01 5E 00 70 .............^.p

00C9:1450 00 F8 00 00 00 6E 06 00-00 FF FF FF FF CD 17 C3 .....n..........

-d066e:0000

066E:0000 06 06 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

066E:0010 00 00 00 00 00 6A 06 00-00 FF FF FF FF 00 00 00 .....j..........

066E:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

066E:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

066E:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

現在把上面有陰影的代碼按從左到右,從上到下的順序讀出其中的具體內容:

00 相同設備的BPB序號為0

00 本DPT對應的邏輯驅動器號為0

00 02 每扇區字節數為0200,即512個字節

FE 每簇扇區數,當前A盤不用,該數據項無效

00 每簇扇區數對2的對數,當前A盤不用,該數據項無效

01 00 保留扇區數為1

02 FAT個數為2

40 00 根目錄項數為40H個

09 00 文件區起始扇區號為0009

60 01 文件區占用簇數為0160H

02 每個FAT占用扇區數為2

00 05 目錄區起始扇區號為0500

00 5E 00 70 相應設備驅動程序設備標題指針為7000:5E00

80 介質描述字節,當前A盤不用,該數據項無效

00 該DPT使用標志,當前A盤不用,該數據項無效

83 13 C9 00 下一個DPT指針為00C9:1383

00 00 當前目錄的首簇號為0000,

FF FF FF FF 空簇數

01 相同設備的BPB序號為1

01 本DPT對應的邏輯驅動器號為1

00 02 每扇區字節數為0200,即512個字節

FE 每簇扇區數,當前B盤不用,該數據項無效

00 每簇扇區數對2的對數,當前B盤不用,該數據項無效

01 00 保留扇區數為1

02 FAT個數為2

40 00 根目錄項數為40H個

09 00 文件區起始扇區號為0009

60 01 文件區占用簇數為0160H

02 每個FAT占用扇區數為2

00 05 目錄區起始扇區號為0500

00 5E 00 70 相應設備驅動程序設備標題指針為7000:5E00

80 介質描述字節,當前B盤不用,該數據項無效

00 該DPT使用標志,當前B盤不用,該數據項無效

C0 13 C9 00 下一個DPT指針為00C9:13C0

00 00 當前目錄的首簇號為0000,

FF FF FF FF 空簇數

02 相同設備的BPB序號為2

02 本DPT對應的邏輯驅動器號為2

00 02 每扇區字節數為0200,即512個字節

1F 每簇扇區數為20H (每簇有32個扇區)

05 每簇扇區數對2的對數為5 (32為2的5次方)

01 00 保留扇區數為1

02 FAT個數為2

00 02 根目錄項數為200H個

01 02 文件區起始扇區號為0201

2E EF 文件區占用簇數為EF2EH

F0 每個FAT占用扇區數為F0H

00 E1: 目錄區起始扇區號為E100H

01 5E 00 70 相應設備驅動程序設備標題指針為7000:5E01

F8 介質描述字節為F8,表示硬盤

00 該DPT 使用標志為00,正在使用

C0 13 C9 00 下一個DPT指針為00C9:13FD

02 00 當前目錄的首簇號為0200H

FF FF FF FF 空簇數

03 相同設備的BPB序號為3

03 本DPT對應的邏輯驅動器號為3

00 02 每扇區字節數為0200,即512個字節

3F 每簇扇區數為40H (每簇有64個扇區)

06 每簇扇區數對2的對數為6 (64為2的6次方)

01 00 保留扇區數為1

02 FAT個數為2

00 02 根目錄項數為200H個

01 02 文件區起始扇區號為0201

37 EF 文件區占用簇數為EF37H

F0 每個FAT占用扇區數為F0H

00 E1: 目錄區起始扇區號為E100H

01 5E 00 70 相應設備驅動程序設備標題指針為7000:5E01

F8 介質描述字節為F8,表示硬盤

00 該DPT 使用標志為00,正在使用

3A 14 C9 00 下一個DPT指針為00C9:143A

00 00 當前目錄的首簇號為0000,即根目錄

FF FF FF FF 空簇數

04 相同設備的BPB序號為4

04 本DPT對應的邏輯驅動器號為4

00 02 每扇區字節數為0200,即512個字節

1F 每簇扇區數為20H (每簇有32個扇區)

05 每簇扇區數對2的對數為5 (32為2的5次方)

01 00 保留扇區數為1

02 FAT個數為2

00 02 根目錄項數為200H個

01 02 文件區起始扇區號為0201

2E EF 文件區占用簇數為EF2EH

F0 每個FAT占用扇區數為F0H

00 E1: 目錄區起始扇區號為E100H

01 5E 00 70 相應設備驅動程序設備標題指針為7000:5E01

F8 介質描述字節為F8,表示硬盤

00 該DPT 使用標志為00,正在使用

00 00 6E 06 下一個DPT指針為066E:0000

00 00 當前目錄的首簇號為0000,即根目錄

FF FF FF FF 空簇數

後面的代碼內容都差不多,就不在贅述了

分析:

1) 與DOS舊版本來說,WIN98的DPT內數據項的偏移有所不同,從介質描述字節項開始,後面數據項的偏移都下移一位,即介質描述字節偏移為17H,DPT使用標志偏移為18H等等。

2) 由於沒有使用A、B盤,所以A、B盤對應的DPT裡面的一些數據項的內容會表現的不合理。

3) 對於C、D、E盤來說,由於保留扇區數為1,而根目錄項占用了200H個扇區,所以文件區起始扇區為0201H,即文件區起始扇區號值包含了引導記錄、FAT表和根目錄所占用的扇區總數。

4) 由於C、D、E盤都為硬盤,所以相應設備驅動程序設備標題指針都相同,都是硬盤驅動程序設備標題指針。

二.磁盤路徑參數表DPAT

由EMB的表格知道DPT鏈頭地址為00C9:1346,根據該地址可讀出DPT的內容如下代碼:

// 0 1 2 3 4 5 6 7 8 9 A B C D E F

-dd597:0000

D597:0000 41 3A 5C 00 00 00 00 00-00 00 00 00 00 00 00 00 A:\.............

D597:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0040 00 00 00 00 40 46 13 C9-00 FF FF FF FF B2 6E 02 [email protected].

D597:0050 00 00 C0 0A 81 D1 00 00-42 3A 5C 00 00 00 00 00 ........B:\.....

D597:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0090 00 00 00 00 00 00 00 00-00 00 00 00 40 83 13 C9 ............@...

D597:00A0 00 FF FF FF FF FF FF 02-00 00 00 00 00 00 00 00 ................

D597:00B0 43 3A 5C 00 57 49 4E 39-38 00 20 46 49 4C 45 53 C:\.WIN98.FILES

D597:00C0 5C 4D 53 49 5C 53 4F 46-54 43 4F 4F 4C 45 52 00 \MSI\SOFTCOOLER.

D597:00D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:00E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:00F0 00 00 00 00 40 C0 13 C9-00 FF FF FF FF B2 6E 02 [email protected].

D597:0100 00 00 C0 0A 81 D1 00 00-44 3A 5C 00 00 00 00 00 ........D:\.....

D597:0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0140 00 00 00 00 00 00 00 00-00 00 00 00 40 FD 13 C9 ............@...

D597:0150 00 FF FF FF FF B2 6E 02-00 00 C0 0A 81 D1 00 00 ......n.........

D597:0160 45 3A 5C 00 00 00 00 00-00 00 00 00 00 00 00 00 E:\.............

D597:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:01A0 00 00 00 00 40 3A 14 C9-00 FF FF FF FF B2 6E 02 ....@:........n.

D597:01B0 00 00 C0 0A 81 D1 00 00-46 3A 5C 00 00 00 00 00 ........F:\.....

D597:01C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:01D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D597:01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D835:0200 00 FF FF FF FF FF FF 02-00 00 00 00 00 00 00 00 ................

D835:0210 47 3A 5C 00 00 00 00 00-00 00 00 00 00 00 00 00 G:\.............

D835:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D835:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D835:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

D835:0250 00 00 00 00 40 00 00 6E-06 FF FF FF FF B2 6E 02 [email protected].

D835:0260 00 00 C0 0A 81 D1 00 00-48 3A 5C 00 00 00 00 00 ........H:\.....

由上述代碼讀出帶陰影部分,得到如下表格:

41 3A 5C 表示目錄路徑區為A:\

46 13 C9 00 相應DPT地址為00C9:1346

42 3A 5C 表示目錄路徑區為B:\

83 13 C9 00 相應DPT地址為00C9:1383

43 3A 5C 00 57 49 4E 39-38 00 20 46 49 4C 45 53 5C 4D 53 49 5C 53 4F

46-54 43 4F 4F 4C 45 52: 表示目錄路徑區為C:\.WIN98. FILES\MSI\SOFTCOOLER.

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的地址。(即把現有的地址偏移一位,再與其他數據相加)。

這兩種方法求得的地址雖然不同,可讀出的內容卻一樣,這是因為不同的邏輯地址對應同一物理地址。

五、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.!.......

<font class=col36>>.!.XY

</font>

從上面代碼可看出,在 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 ...8....

26D7:3460 08 00 01 00 00 00 00 C0-13 C9 00 00 00 00 00 00 ................

-d26d7:3888

26D7:3880 18 20 58 34 02 04 F1 9B X4.!....

26D7:3890 08 00 01 00 00 00 00 C0-13 C9 00 00 07 00 4E 61 ..............Na

-d26d7:2018

26D7:2010 30 04 88 38 72 00 00 00 w%..r...

26D7:2020 41 72 00 77 00 75 00 6E-00 69 00 0F 00 26 6E 00 Ar.w.u.n.i...&n.

-d26d7:0430

26D7:0430 70 36 18 20 02 04 18 24-09 00 01 00 00 00 00 C0 p6.C...$........

26D7:0440 13 C9 00 FF 0A 00 0A 00-45 47 41 20 20 20 20 20 ........EGA

-d26d7:3670

26D7:3670 48 06 30 04 02 04 19 24-09 00 01 00 00 00 00 C0 0G0....$........

26D7:3680 13 C9 00 11 C8 11 2A 12-58 43 4F 50 59 33 32 20 ......*.XCOPY32

-d26d7:0648

26D7:0640 A8 51 70 36 02 08 1A 55 ...Q...U

26D7:0650 05 00 01 00 00 00 00 C0-13 C9 00 79 73 63 6C 61 ...........yscla

-d26d7:51a8

26D7:51A0 48 06 38 1B 02 02 2B 00 H.8...+.

26D7:51B0 00 00 02 FA 00 00 00 C0-13 C9 00 C7 03 00 00 00 ................

-d26d7:1b38

26D7:1B30 98 23 A8 51 02 08 3D 55 .Q`K..=U

26D7:1B40 05 00 01 00 00 00 00 C0-13 C9 00 CC BF D8 D6 C6 ................

-d26d7:2398

26D7:2390 08 17 38 1B 02 42 01 00 ....B..

26D7:23A0 00 00 02 FA 00 00 00 C0-13 C9 00 4E 6F 72 74 6F ...........Norto

-d26d7:1708

26D7:1700 20 19 98 23 02 48 A2 1F (0 ..H..

26D7:1710 00 00 01 00 00 00 00 C0-13 C9 00 E0 00 4E 00 19 .............N..

-d26d7:1920

26D7:1920 28 30 08 17 02 08 F5 1E-00 00 01 00 00 00 00 C0 ...#............

26D7:1930 13 C9 00 FF FF FF FF 00-64 20 30 30 63 39 3A 30 ........d 00c9:0

-d26d7:3028

26D7:3020 90 4F 20 19 02 04 DE 9B .O......

26D7:3030 08 00 01 00 00 00 00 C0-13 C9 00 00 00 00 00 00 ................

-d26d7:4f90

26D7:4F90 E0 29 28 30 02 04 DF 9B-08 00 01 00 00 00 00 C0 .)(0............

26D7:4FA0 13 C9 00 00 00 D8 C4 21-57 45 4C 43 4F 4D 45 20 .......!WELCOME

-d26d7:29e0

26D7:29E0 60 08 90 4F 02 04 E0 9B-08 00 01 00 00 00 00 C0 `..O............

26D7:29F0 13 C9 00 00 00 00 00 00-4F 44 42 43 49 4E 53 54 ........ODBCINST

-d26d7:0860

26D7:0860 90 0C E0 29 02 04 E1 9B-08 00 01 00 00 00 00 C0 ...)............

26D7:0870 13 C9 00 FF FF FF 00 00-51 54 57 20 20 20 20 20 ........QTW

-d26d7:0c90

26D7:0C90 78 0A 60 08 02 04 E2 9B-08 00 01 00 00 00 00 C0 x.`.............

26D7:0CA0 13 C9 00 53 65 63 74 69-50 52 4F 47 4D 41 4E 20 ...SectiPROGMAN

-d26d7:0a78

26D7:0A70 A8 0E 90 0C 02 04 E3 9B ........

26D7:0A80 08 00 01 00 00 00 00 C0-13 C9 00 FF FF FF FF 0E ................

-d26d7:0ea8

26D7:0EA0 D8 12 78 0A 02 04 E4 9B ..x.....

26D7:0EB0 08 00 01 00 00 00 00 C0-13 C9 00 49 53 50 2E 49 ...........ISP.I

-d26d7:12d8

26D7:12D0 50 1D A8 0E 02 04 E5 9B P.......

26D7:12E0 08 00 01 00 00 00 00 C0-13 C9 00 31 39 39 37 01 ...........1997.

-d26d7:1d50

26D7:1D50 68 1F D8 12 02 04 E6 9B-08 00 01 00 00 00 00 C0 h...............

26D7:1D60 13 C9 00 00 00 0A 00 D3-49 4E 54 45 52 4E 7E 31 ........INTERN~1

-d26d7:1f68

26D7:1F60 A0 3A 50 1D 02 04 E7 9B .:P.....

26D7:1F70 08 00 01 00 00 00 00 C0-13 C9 00 73 EA 00 00 00 ...........s....

-d26d7:3aa0

26D7:3AA0 00 00 68 1F 02 04 E8 9B-08 00 01 00 00 00 00 C0 ..h.............

26D7:3AB0 13 C9 00 FF 04 00 29 00-41 63 00 64 00 33 00 32 ......).Ac.d.3.2

-d26d7:0000

26D7:0000 C0 10 A0 3A 02 04 E9 9B-08 00 01 00 00 00 00 C0 ...:............

26D7:0010 13 C9 00 00 4E 00 98 00-41 6F 00 75 00 74 00 6C ....N...Ao.u.t.l

-d26d7:10c0

26D7:10C0 B8 3C 00 00 02 04 EA 9B-08 00 01 00 00 00 00 C0 .<..............

26D7:10D0 13 C9 00 47 41 01 00 00-4E 45 54 53 43 41 50 45 ...GA...NETSCAPE

-d26d7:3cb8

26D7:3CB0 D0 3E C0 10 02 04 EB 9B .<font class=col36>>......

</font>26D7:3CC0 08 00 01 00 00 00 00 C0-13 C9 00 00 FF FF FF FF ................

-d26d7:3ed0

26D7:3ED0 18 45 B8 3C 02 04 EC 9B-08 00 01 00 00 00 00 C0 .E.<............

26D7:3EE0 13 C9 00 2C 45 30 30 30-42 54 54 4E 43 55 52 20 ...,E000BTTNCUR

-d26d7:4518

26D7:4510 48 49 D0 3E 02 04 ED 9B

HI.>....

26D7:4520 08 00 01 00 00 00 00 C0-13 C9 00 35 39 33 63 70 ...........593cp

-d26d7:4948

26D7:4940 E8 40 18 45 02 04 EE 9B ...E....

26D7:4950 08 00 01 00 00 00 00 C0-13 C9 00 08 00 06 00 30 ...............0

-d26d7:40e8

26D7:40E0 00 43 48 49 02 04 16 24 .C.%...$

26D7:40F0 09 00 01 00 00 00 00 C0-13 C9 00 58 45 00 04 00 ...........XE...

-d26d7:4300

26D7:4300 F8 2B E8 40 02 04 17 24-09 00 01 00 00 00 00 C0 0..@...$........

26D7:4310 13 C9 00 50 00 17 00 00-43 53 45 54 55 50 20 20 ...P....CSETUP

-d26d7:2bf8

26D7:2BF0 78 4D 00 43 02 04 F4 9B xM......

26D7:2C00 08 00 01 00 00 00 00 C0-13 C9 00 00 00 00 00 00 ................

-d26d7:4d78

26D7:4D70 30 47 F8 2B 02 04 F5 9B .%.+....

26D7:4D80 08 00 01 00 00 00 00 C0-13 C9 00 F7 BF 10 E4 07 ................

-d26d7:4730

26D7:4730 40 32 78 4D 02 02 45 00-00 00 02 FA 00 00 00 C0 @2p6..E.........

26D7:4740 13 C9 00 01 00 00 00 FF-01 44 02 44 03 44 04 44 .........D.D.D.D

-d26d7:3240

26D7:3240 C8 27 30 47 02 04 F5 01-00 00 01 00 00 00 00 C0 .'0G............

26D7:3250 13 C9 00 00 00 00 00 00-4D 53 44 4F 53 20 20 20 ........MSDOS

-d26d7:27c8

26D7:27C0 60 4B 40 32 02 02 4A 00 `[email protected].

26D7:27D0 00 00 02 FA 00 00 00 C0-13 C9 00 00 00 00 00 00 ................

-d26d7:4b60

26D7:4B60 80 21 C8 27 02 04 D5 9B-08 00 01 00 00 00 00 C0 8..'............

26D7:4B70 13 C9 00 32 31 D3 A1 B6-2E 20 20 20 20 20 20 20 ...21....

-d26d7:2180

26D7:2180 10 2E 60 4B 02 04 F0 9B-08 00 01 00 00 00 00 C0 .8..............

26D7:2190 13 C9 00 48 00 00 00 0E-41 53 00 74 00 75 00 64 ...H....AS.t.u.d

-d26d7:2e10

26D7:2E10 B0 25 80 21 02 04 EF 9B-08 00 01 00 00 00 00 C0 .!HI............

26D7:2E20 13 C9 00 00 00 00 00 00-55 4E 45 4E 43 39 37 20 ........UNENC97

-d26d7:25b0

26D7:25B0 F0 14 10 2E 02 04 F6 9B-08 00 01 00 00 00 00 C0 .@xM............

26D7:25C0 13 C9 00 65 CF 07 03 00-E5 50 53 35 33 33 33 20 ...e.....PS5333

-d26d7:14f0

26D7:14F0 58 34 B0 25 02 04 15 24-09 00 01 00 00 00 00 C0 .#H....$........

26D7:1500 13 C9 00 64 61 72 64 20-2E 20 20 20 20 20 20 20 ...dard .

分析:從上面代碼我們可了解到

1、 首先,由EMB表格中得到BUFFER區的首地址指針為00c9:006d

2、 其次,從讀出代碼看出,所有的BUFFER都在同一段內,即段地址相同。所以後面的BUFFER只需給出下一個BUFFERS的偏移地址就可找到下一個BUFFER。

3、 從BUFFER頭的具體內容可看到,在BUFFER的頭四個字節中,前兩個字節指出了下一個BUFFER的偏移地址,而後兩個字節指出了前一個BUFFER的偏移地址,從而構成了一個雙向鏈表。同時,第一個BUFFER的後兩個字節指向了最後一個BUFFER,而最後一個BUFFER的前兩個字節也指向了第一個BUFFER,從而形成了一個循環鏈表。可見BUFFERS是一個循環雙向鏈表。

六、硬盤分區表

我們知道硬盤分區表是放在硬盤的隱含扇區中,所以需用INT 13H來讀出。當讀出分區BOOT程序後,只要偏移1BE,就可讀出硬盤分區表,如下代碼:

-d0f6c:31be

0F6C:31B0 80 01 ..

0F6C:31C0 01 00 06 FE 3F 79 3F 00-00 00 BB E7 1D 00 00 00 ....?y?.........

0F6C:31D0 01 7A 05 FE BF 6D FA E7-1D 00 F4 90 7A 00 00 00 .z...m......z...

0F6C:31E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................

0F6C:31F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.

0F6C:3200 8C 08 26 C6 06 8E 08 FF-26 A2 C1 08 FC B9 10 00 ..&.....&.

0F6C:3210 BF 8F 08 F3 AA B9 10 00-BF 9F 08 F3 AB 07 5F 59 .............._Y

從上面有陰影的代碼可得到如下表格:

80 自舉分區標志

01 01 00 分區1開始於1頭0柱1扇區

06 系統標志,表示FAT為16位大容量的DOS

FE 3F 79 分區1結束於FE頭79柱3F扇區

3F 00 00 00 分區1的相對扇區號為3F

BB E7 1D 00 分區1的扇區數為001D E7BB個 (可求得分區1的容量=1DE7BB * 200 ≈ 1GB)

00 非自舉分區標志

00 01 7A 分區2開始於0頭7A柱1扇區

05 系統標志,表示擴展D0S

FE BF 6D 分區2結束於FE頭6D柱BF扇區

FA E7-1D 00 分區2的相對扇區號為001D E7FA (注意:1DE7FA=1DE7BB+3F)

F4 90 7A 00 分區2的扇區數為007A 90F4個 (可求得分區2的容量=7A90F4 *

200 ≈ 4GB)

55 AA 主引導記錄有效標志為AA55,表示有效

分析:

1、從上面讀出的硬盤分區內容可了解到,在WINDOWS系統中,通常分為兩個分區,一個為自舉分區,它為系統區,即C盤。另一個為擴展分區,擴展分區包括所有的邏輯分區,而邏輯分區的具體內容並不在上面的硬盤分區表中顯示,我們可從前面的磁盤參數表DPT和磁盤路徑表中讀出邏輯分區的具體內容。

2、 分區1的相對扇區號正是隱含扇區占用的扇區數,而分區2的相對扇區號恰是分區1的分區大小加上隱含扇區的大小。這在上面表格中可看出。

七、驅動參數塊DPB

使用第一章介紹的命令,我們可讀出以下代碼:-l 0f6e:1000 2 0 1

// 0 1 2 3 4 5 6 7 8 9 A B C D E F

-d00c9:0024

-d0f6e:1000

0F6E:1000 EB 3C 90 4D 53 57 49 4E-34 2E 31 00 02 20 01 00 .<.MSWIN4.1.. ..

0F6E:1010 02 00 02 00 00 F8 F0 00-3F 00 FF 00 3F 00 00 00 ........?...?...

0F6E:1020 BB E7 1D 00 80 00 29 5D-A3 59 25 20 20 20 20 20 ......)].Y%

由帶陰影部分的代碼,我們可得到以下表格:

4D 53 57 49 4E 34 2E 31 當前操作系統的版本號MSWIN4.1

00 02 每扇區字節數為200H,即512字節

20 每簇扇區數為20H,即32個扇區

01 00 保留扇區數為1

02 FAT個數為2

00 02 根目錄項數為200H,即512項

00 00 總扇區數,這裡因數目過大在後面表示

F8 介質描述字節

F0 00 每個FAT占用的扇區數為0FH

3F 00 每道扇區數為3F

FF 00 磁頭數為FFH,共255個磁頭

3F 00 00 00 隱含扇區數為3FH

BB E7 1D 00 總扇區數為1DBBE7

分析:

1、 上面表格的第一項並不屬於DPB,但從中可讀出當前操作系統的版本號,若操作系統為MSDOS,就會顯示DOS的版本號,若為WINDOWS,則顯示WINDOWS的版本號。

WIN98對應的版本號為MSWIN4.1。當你運行WIN98附件中的系統工具的系統信息可同樣讀出系統信息:Microsoft Windows 98 4.10.1998。

2、 在高版本的操作系統中,由於硬盤容量太大,兩個字節不能表示,通常在隱含扇區數後4個字節記錄總扇區數。從表格的最後一項可讀出該總扇區數也就是C盤的扇區數(參考前面硬盤分區表中的分區1的數據)。這是因為當前讀出的DPB是C盤對應的DPB。也可以另外讀出D、E盤的DPB.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved