- 相關推薦
用擴展INT13H研析并恢復大容量硬盤分區信息鏈表
用擴展INT13H研析并恢復大容量硬盤分區信息鏈表
江西宜春學院計算機系 劉 健
內容摘要:本文利用擴展INT13H的磁盤地址數據包及相關調用,分析了整個分區鏈表并給出了鏈表中任一結點分區信息丟失或被破壞之后的一種恢復方法。
關鍵字:擴展INT13H、數據包、分區信息、鏈表、恢復
一、 擴展INT13H相關讀寫接口規范概述
擴展INT13H接口設計的目的是為了擴展BIOS的功能,使之能處理柱面數大于1024的硬盤,并支持移動存貯介質的鎖定、解鎖和彈出等各類新增功能。
1、 數據類型定義:
BYTE 一字節; WORD 二字節; DWORD 四字節; QWORD 八字節;
磁盤讀寫地址數據包DRWAP(Disk Read Write Address Packet),利用該數據包中斷INT13H可以直接讀寫處理目前主流硬盤上的任一扇區,匆需理會傳統磁盤概念中的通過柱面號、磁頭號及扇區號(CHS)的物理扇區定位方式。
DRWAP結構如下:
Struct DRWAP
{ BYTE PacketSize;//數據包所占字節數,有10H和18H兩種,本文用前者
BYTE Reserved;//保留字節,設為00H
WORD Blockcount;//傳輸的數據塊個數(最大值為7FH),以扇區為單位
DORD TransferBuffer;//傳輸緩沖區地址(SEG:OFFSET)
QORD AbsoluteBlockNumber;//磁盤起始絕對扇區號(主引導扇區為0號)
}
AbsoluteBlockNumber與傳統CHS的關系如下:
AbsoluteBlockNumber=(Cylinder*NumHeads+Head)*SectorPerTrack+Sector-1
DRWAP數據包的獲取及實際操作
2、 定義磁盤讀寫地址數據包獲取指定扇區之內容
入口參數:AH=42H; DL=80H; DS:SI=DRWAP首地址
出口參數:CF=NC OK;CF=CY ERROR
二、分區信息鏈表解析
讀取主引導扇區操作過程:(為操作的連續性,本文不采用傳統INT13H的功能號02)磁盤讀寫地址數據包按如下方式定義:
進入DEBUG狀態之后,DS和SI采用當前默認值,假設為DS=1216,SI=0000 則E命令或F命令從1216:0000處輸入以下16個字節內容
1216:0000 10 00 01 00 00 02 16 12-00 00 00 00 00 00 00
00
數據包長度=10H=16個字節 保留字節=00H 要傳輸的扇區個數=0001H=1個
緩沖區地址DS:SI=1216:0200 磁盤起始絕對扇區號=0000000000000000H=0號
-A100
1216:0100 MOV AH,42
MOV DL,80
INT 13
INT 3
-G=100
-D3BE
80 01
1216:03B0 01 00 0B FE BF D9
3F 00-00 00 1B F2 B2 00 00 00
:03C0 81 DA 0F FE FF FF 5A F2-B2 00 3E DE E0 02 00 00
從上述內容可知:
C區的起始點為0柱1頭1扇,即磁盤起始絕對扇區0號;
C區的結束點為729柱254頭63扇,并隱含了63個扇區;
C區共占用了00B2F21BH個扇區約為5.58GB。
整個擴展分區的起點為730柱0頭1扇,其結束點由于柱面號已大大的大于1024,而10位二進制數已不能表達,所以其結束點一律記為254頭1023柱63扇,即 FE FF FF.
整個擴展分區本身占用02E0DE3EH扇區,5A F2 B2 00 為擴展分區前所用扇區數,即C區所用和隱含部分00B2F21BH+0000003FH=00B2F25AH
讀取邏輯D盤分區信息表:
從前面可知D盤之前已用00B2F25AH,由于起始絕對扇區號為零,因此D盤的入口地址為:00B2F25AH,所以磁盤讀寫地址數據包修改如下:
DS:0000 10 00 01 00 00 02 16 12 -5A F2 B2 00 00 00 00 00
-G=100
-D3BE
ds:3B0 00 01
:3C0 81 DA 0B FE FF FF 3F 00-00 00 1B F2 B2 00 00 00
:3D0 C1 FF 05 FE FF FF 5A F2-B2 00 54 DA D0 00
邏輯D盤的起點為730柱1頭1扇,0頭所含63扇隱含;
邏輯D盤的結束點由于柱面數超過1024,一律記為FE FF FF此后的邏輯盤結束點也一樣。
邏輯D盤自用00B2F21BH扇
后一分區表項記錄的是邏輯E盤的相關數據:
邏輯E盤的起點由于柱面數超過1024,一律記為00 C1 FF,結束點為FE FF FF.
邏輯E盤之前已用的擴展分區扇數00B2F21BH+0000003FH=00B2F25AH即D盤所用和D盤前隱含的部份 5A F2 B2 00
邏輯E盤所占扇區數(包含自身及隱含的0頭上的63扇)
對于后繼的各分區結點信息分析,可參照執行完全類似。唯一需要注意的是,后繼結點分區信息表的入口地址,是其前繼結點的入口地址加上前繼結點的長度(包括隱含的3FH)。
三、 分區信息鏈表中任一結點分區信息的恢復
實際上對大容量硬盤分區信息的恢復有以下幾條規則:
1、 任何一分區所占用的扇區數,在其所對應的邏輯零扇區的偏移地址20H都有備份;
2、 活動分區的起始點為0柱1頭1扇區即01 01 00,結束點可由上述備份反推求出柱面號,磁頭號為FEH,扇區號為3FH,然后將柱面號和扇區號合并成兩個字節,若備份容量大于傳統容量限制則為FE FF FF;
3、 每一結點分區信息中前一分區表項中的隱含扇區數為003FH,后一分區表項中的隱含扇區數分為兩種情況:在擴展分區中該部分內容為活動分區大小加上隱含的63個扇區;在邏輯分區中該部分內容為前一結點信息中后一表項的兩個數據項之和;
4、 每一結點邏輯分區信息后一分區表項的最后四個字節內容為下一結點前一分區表項的隱含扇區數與該分區所占扇區數之和;
5、 倒數第二個結點分區信息中的后一表項的兩個數據項之和等于擴展分區所占用的總扇區數;
6、 主分區信息表中分區類型標志分別為0BH和 0FH,在后續邏輯分區信息表中分別為0BH和05H;(本文針對FAT32位分區方式,其它分區方式可相應改動)
7、 任一結點邏輯分區信息所對應的邏輯零扇區的入口地址等于該邏輯分區入口地址加上該分區所隱含的扇區數,即3FH。
掌握以上幾條原則,即便整個分區信息鏈表全部破壞或丟失,都能從相關的邏輯零扇完全修復。
主分區信息的恢復過程操作概要:
第一步:活動標志和起始點是固定的 80 01 01 00 分區類型0BH,隱含扇區數是固定的3F 00 00 00,自用扇區總數從邏輯零扇區偏移20H處提取四個字節1B F2 B2 00。
利用公式 扇區總數=(柱面號*磁頭數+磁頭號)*每磁道扇區數
扇區總數=00B2F21BH、磁頭數=FFH、磁頭號=FEH、每磁道扇區數=3FH,可推算柱面號,就可得到活動分區的結束點內容。
第二步:擴展分區的活動標志為00,起始點為下一個柱面號的0頭1扇即00 81 DA,分區類型為0FH,隱含部分=前一表項所占用扇區數與其前的隱含扇區之和,結束點由于已超過8.4G一律填為FE FF FF,擴展分區所占用的總的扇區數,可通過上述原則中的第5條計算出來。
地址:江西省宜春市宜春學院工學院計算機科學系
 
; 郵編:336000 電話:0795-3561890
emile:liubangling@sohu.com
【用擴展INT13H研析并恢復大容量硬盤分區信息鏈表】相關文章:
研析經濟憲法學08-18
256×32大容量中文矩陣系統的設計08-06
擴展語句08-16
用“語句擴展訓練”培養學生寫作能力08-15
基于IDE硬盤的大容量語音記錄儀08-06
擴展培訓心得10-01
語文 -擴展語句08-16
教學方式的擴展08-17