Opis MBR, partycji


MBR zaczyna sie od LBA 0 (sam początek) a kończy sygnatura "55 AA"

Przykładowy sektor 0 MBR.



Zasadniczo możemy mieć jedynie 4 podstawowe partycje każda z tych partycji jest opisana 16 bajtami od
Pierwsza partycja 000001B0 E do 000001C0 D
Druga partycja 000001C0 E do 000001D0 D
Trzecia partycja 000001D0 E do 000001E0 D
Czwarta partycja 000001E0 E do 000001F0 D
Gdzie określenie czy partycja jest bootowalna (ta z której startuje system) określa pierwszy bajt opisu partycji
"00" - określa ,że nie jest bootowalna
"80" - określa ,że jest bootowalna.

Przy pierwszej partycji :
1 bajt to bajt czy partycja jest botowalna tu nie jest i wpis mamy 00 (dziesiętnie 0)
2 bajt to głowica początku partycji tu 01 (dziesiętnie 1)
3-4 bajt sektor/cylinder początku partycji tu 01 00 (1 sektor 0 cylinder)
5 bajt to ID partycji tu 07 - 07 oznacza NTFS. Wrzuciłem plik opisu ID partycji. (dziesiętnie 7)
6 bajt to głowica końca partycji tu FE (dziesiętnie 254)
7-8 bajt to sektor/cilinder końca partycji tu BF 03 (63 sektor 14 cylinder)
9-12 bajt to offset początku partycji tu 3F 00 00 00 (dziesiętnie 63 (63 LBA))
13-16 bajt to liczba sektorów partycji tu C5 7C 7E 00 (dziesiętnie 8289477)

Przy partycji drugiej mamy extended :
1 bajt to bajt czy partycja jest botowalna tu nie jest i wpis mamy 00 (dziesiętnie 0)
2 bajt to głowica początku partycji tu 00 (dziesiętnie 0)
3-4 bajt sektor/cylinder początku partycji tu 81 04 (1 sektor 18 cylinder)
5 bajt to ID partycji tu 0F - 0F oznacza partycje Extended. (dziesiętnie 15)
6 bajt to głowica końca partycji tu FE (dziesiętnie 254)
7-8 bajt to sektor/cilinder końca partycji tu FF FF ( 63 sektor 1023 cylinder)
9-12 bajt to offset początku partycji tu 04 7D 7E 00 (dziesiętnie 8289540)
13-16 bajt to liczba sektorów partycji tu BC 97 AB 00 (dziesiętnie 11245500) (z tego wynika (11245500+8289477+63)=19535040 ostatni sektor)

na trzeciej i czwartej partycji same 00 Czyli ich brak.

Zamieniałem na dziesiętne liczby w ten sposób ,że uruchamiam kalkulator daje Menu widok wybieram Naukowy zaznaczam HEX Wpisuje liczbę Hexydecymalną od prawej do lewej czyli liczba 04 7D 7E 00 wpisuje jako 007E7D04 (zera na początku się pomija ale można je wpisać i tak ich nie będzie widać wyświetli sie 7E7D04) po czym zaznaczam Dec (Dziesiętnie) wynik 8289540

Jak obliczam sektor/cylinder : 3-4 bajt sektor/cylinder początku partycji tu 01 00 (1 sektor 0 cylinder) (Jak to obliczam : Wpisuje w kalkulator HEX liczbę od prawej 0001 zamieniam na dziesiętne (Dec) daje 1 to zamieniam na binarne BIN co daje 1 (tak naprawdę wygląda to tak 0000000000 000001 (10 znaków na cylinder i 6 znaków na sektor) Gdzie 6 znaków liczby BIN od prawej (Starszych bitów) określa liczbę sektorów Więc pisze w kalkulatorze liczbę binarną 000001 i zamieniam ją na dziesiętną (DEC) daje nam 1 (1 sektor) potem wpisuje resztę cyfr binarnych które pozostały 0 i zamieniam na dziesiętne co daje 0 (0 Cylinder) (Cylindry liczymy od 0, 1, 2, itd.)

3-4 bajt sektor/cylinder początku partycji tu 81 04 (1 sektor 18 cylinder) (jak to obliczam : Wpisuje w kalkulator HEX liczbę od prawej 0481 zamieniam na dziesiętne (Dec) daje 1153 to zamieniam na binarne BIN co daje 10010000001 (tak naprawdę wygląda to 0000010010 000001 ) Gdzie 6 znaków liczby BIN od prawej (Starszych bitów) określa liczbę sektorów Więc pisze w kalkulatorze liczbę binarną 000001 i zamieniam ją na dziesiętną (DEC) daje nam 1 (1 sektor) potem wpisuje resztę cyfr binarnych które pozostały 0000010010 i zamieniam na dziesiętne co daje 18 (18 Cylinder))

7-8 bajt to sektor/cilinder końca partycji tu FF FF (63 sektor 1023 cylinder) (jak to obliczam : Wpisuje w kalkulator HEX liczbę od prawej FFFF zamieniam na dziesiętne (Dec) daje 65535 to zamieniam na binarne BIN co daje 1111111111111111 (tak naprawdę wygląda to 1111111111 111111 ) Gdzie 6 znaków liczby BIN od prawej (Starszych bitów) określa liczbę sektorów Więc pisze w kalkulatorze liczbę binarna 111111 i zamieniam ją na dziesiętną (DEC) daje nam 63 (63 sektor) potem wpisuje resztę cyfr binarnych które pozostały 1111111111 i zamieniam na dziesiętne co daje 1023 (1023 Cylinder) (jak doliczymy 0 to wyjdzie ,ze mamy maksymalnie 1024 cylindry))

To sektor 8289540 w którym zaczyna się partycja extended i pierwsza partycja (dysk) logiczny.



MBR wskazuje na partycje extended na sektor 8289540 gdzie w offsecie 0FCFA09B0E zaczyna się opis :

Pierwsza partycja 0FCFA09B0 E do 0FCFA09C0 D
Druga partycja 0FCFA09C0 E do 0FCFA09D0 D
Trzecia partycja 0FCFA09D0 E do 0FCFA09E0 D
Czwarta partycja 0FCFA09E0 E do 0FCFA09F0 D

Przy pierwszej partycji :
1 bajt to bajt czy partycja jest botowalna tu nie jest i wpis mamy 00 (dziesiętnie 0)
2 bajt to głowica początku partycji tu 01 (dziesiętnie 1)
3-4 bajt sektor/cylinder początku partycji tu 81 04 (1 sektor 18 cylinder)
5 bajt to ID partycji tu 07 - 07 oznacza NTFS. Wrzuciłem plik opisu ID partycji. (dziesiętnie 7)
6 bajt to głowica końca partycji tu FE (dziesietnie 254)
7-8 bajt to sektor/cilinder końca partycji tu FF 88 (63 sektor 547 cylinder)
9-12 bajt to offset początku partycji tu 3F 00 00 00 (dziesiętnie 63 (63 LBA))
13-16 bajt to liczba sektorów partycji tu 06 5B 5F 00 (dziesiętnie 6249222)

Przy drugiej partycji mamy :
1 bajt to bajt czy partycja jest botowalna tu nie jest i wpis mamy 00 (dziesiętnie 0)
2 bajt to głowica początku partycji tu 00 (dziesiętnie 0)
3-4 bajt sektor/cylinder początku partycji tu C1 89 (1 sektor 551 cylinder)
5 bajt to ID partycji tu 05 - 05 oznacza partycje Extended (Dysk logiczny). (dziesiętnie 5)
6 bajt to głowica końca partycji tu FE (dziesiętnie 254)
7-8 bajt to sektor/cilinder końca partycji tu FF FF (63 sektor 1023 cylinder)
9-12 bajt to offset początku partycji tu 45 5B 5F 00 (dziesiętnie 6249285)
8289540+(63+6249222=6249285))=14538825 -Tam jest początek drugiej partycji logicznej (dysku)
13-16 bajt to liczba sektorów partycji tu 77 3C 4C 00 (dziesiętnie 4996215)

trzeciej i czwartej nie ma same 00

Sektor 14538825 gdzie zaczyna sie druga partycja (dysk) logiczna



MBR wskazuje na druga partycje (dysk) logiczna na sektor 14538825 gdzie w offsecie 1BBB093B0E zaczyna się opis :
Pierwsza partycja 1BBB093B0 E do 1BBB093C0 D
Druga partycja 1BBB093C0 E do 1BBB093D0 D
Trzecia partycja 1BBB093D0 E do 1BBB093E0 D
Czwarta partycja 1BBB093E0 E do 1BBB093F0 D

Przy pierwszej partycji :
1 bajt to bajt czy partycja jest botowalna tu nie jest i wpis mamy 00 (dziesiętnie 0)
2 bajt to głowica początku partycji tu 01 (dziesiętnie 1)
3-4 bajt sektor/cylinder początku partycji tu C1 89 (1 sektor 551 cylinder)
5 bajt to ID partycji tu 07 - 07 oznacza NTFS. Wrzuciłem plik opisu ID partycji. (dziesiętnie 7)
6 bajt to głowica końca partycji tu FE (dziesiętnie 254)
7-8 bajt to sektor/cilinder końca partycji tu FF FF (63 sektor 1023 cylinder)
9-12 bajt to offset początku partycji tu 3F 00 00 00 (dziesiętnie 63 (63 LBA))
13-16 bajt to liczba sektorów partycji tu 38 3C 4C 00 (dziesiętnie 4996152)
(z tego wynika (6249285+8289540=1453825)+4996152=19535040 ostatni sektor)

partycji drugiej trzeciej czwartej nie ma wpisy same zera.

Z tego co sie orientuje partycja bootowalna może być każda z tych czterech ale tylko jedna z nich .

Jeden sektor ma 512 Offsetow. Jeden Offset to jeden bajt. Jeden Bajt to 8 bitów. W tym jednym bajcie mamy zapisana jedna cyfrę Hexydecymalną od 00 do FF.

Co się stanie gdy poszczególne wpisy znikną ?

Tutaj przykładowy MBR i jego opis oraz schemat partycji na tym przykładzie.








MBR mieści się w jednym sektorze.

Podaje plik z sektorem 0 i 8289540 i 14538825 (Partycja Podstawowa , 1 Exstended na której są dwie partycje (Dyski) Logiczne formatowane w NTFS)
Podaje plik z ID partycji.

Sektor 0 długość 1 to MBR
Struktura NTFS to :
0) Sektor 63 długość 1 sektor to Boot (Boot jest zawsze w 63 sektorze pierwszej partycji)
1) Dane
2) MFT długość 8 sektorów zajmuje pierwsze 4 sektory (MFT jest umieszczane w miejscu które wybiera program formatujący i zwykle jest ono inne przy formatowaniu przez Windows czy przez Partition Magic czy inny program. To gdzie znajduje sie MFT można przeczytać w Boot sektorze.)
3) Dane
4) MFT Mirror długość 8 sektorów (kopia MFT - w Boot znajduje się zapis gdzie się ona znajduje)
5) Dane
6) Boot copy długość 1 sektor (kopia Boot-a)

Do odczytu podglądu HEXydecymalnego użyłem WinHEX którego można probować bez ograniczeń tylko do odczytu :
http://www.x-ways.net/winhex/
Można też użyć DMDE lub inny program
ID Partycji Kody :
Tradycyjne:

00 - Free Space
01 - FAT12
04 - FAT16 (<32MB)
05 - Extended
06 - FAT16B (>=32MB)
07 - Instalable File System (NTFS, HPFS)
0A - IMB Boot Manager
0B - FAT32
0C - FAT32X
0E - FAT16X
0F - ExtendedX
42 - Dysk dynamiczny systemu Windows
EE - GPT partycja
EF - EFI System partition wpisany w MBR dysku

Partycje ukryte czyli Hidden

11 - Hidden FAT12
12 - EISA partition or OEM partition
14 - Hidden FAT16 (<32MB)
16 - Hidden FAT16B (>=32MB)
17 - Hidden IFS (NTFS, HPFS)
1B - Hidden FAT32
1C - Hidden FAT32X
1E - Hidden FAT16X

Inne w tym i ukryte:

A0 - Laptop hibernation partition
27 - Toshiba Recovery ,ukryta partycja naprawcza w laptopach Thoschiba
DE - Dell 8.0 DellUtility ,ukryta partycja naprawcza w laptopach Dell
FE - IBM OEM partycja
3C - PowerQuest Recoverable Partition
64 - Novell Netware 286
65 - Novell Netware (3.1 oraz 4.1)
66 - Novell Netware 386
81 - Linux/Minix v. 1.46X
82 - Linux Swap Partition
83 - Linux Native File System (EXT2FS)
84 - OS/2 Hiding Type 04H Partition
86 - NT FAT Volume Set
87 - NT IFS Volume Set
93 - Hidden Linux Native File System (EXT2FS)
C6 - Disabled NT FAT Volume Set
C7 - Disabled NT IFS Volume Set

GPT można sformatować w Windows 7 a tylko z Windows 7 64 Bit można startować z tak sformatowanego dysku pod warunkiem , że zamiast BIOS-a w płycie głównej mamy nowy system o nazwie EFI
GPT - Atrybuty partycji

Atrybutami partycji poprzednio w MBR były 80 - startowa 00 - nie startowa
00 - partycja systemowa
60 - Tylko do odczytu
62 - Ukyta
63 - Nie montowana automatycznie (nie przypisywana litera pod czas startu)

Typy partycji GPT - Identyfikator GUID

Nie systemowe :
00000000-0000-0000-0000-000000000000 - Unused entry
024DEE41-33E7-11D3-9D69-0008C781F39F - MBR partition scheme
C12A7328-F81F-11D2-BA4B-00A0C93EC93B - EFI System Partition
21686148-6449-6E6F-744E-656564454649 - BIOS Boot Partition
Systemu Windows
E3C9E316-0B5C-4DB8-817D-F92DF00215AE - Microsoft Reserved Partition
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 - Basic Data Partition
5808C8AA-7E8F-42E0-85D2-E1E90434CFB3 - Logical Disk Manager metadata partition
AF9B60A0-1431-4F62-BC68-3311714A69AD - Logical Disk Manager data partition
DE94BBA4-06D1-4D40-A16A-BFD50179D6AC - Windows Recovery Environment
37AFFC90-EF7D-4e96-91C3-2D7AE055B174 - IBM General Parallel File System (GPFS) partition


Opis położenia tablic MFT w zależności od użytego programu formatującego w systemie plikowym NTFS.

Acronis - MFT - 48 klaster , MFTmirror - 2 cluster : 8 sektorów/klaster
ParagonDM - MFT 2 klaster, MFTmirror po środku partycji : 128 sektorów/klaster
ParagonDM - MFT 4 klaster, MFTmirror po środku partycji
PartitionMagic - MFT 786432 klaster, MFTmirror po środku partycji : 8 sektorów/klaster
Microsoft - MFT 786432 klaster, MFTmirror po środku partycji : 8 sektorów/klaster


Przykład

Dysk posiada 976 773 167 LBA
Partycje jedna podstawowa od 63 LBA do 976 768 064 LBA
Czyli ma 976 768 000 LBA
Formatowana z pod Windowsa XP
MFT jest w 786432 klastrze czyli 6291519 LBA
MFTmirror znajduje się po środku partycji 61048000 klaster czyli 488384000 vol.sec. Czyli 488384063 LBA

Inny przykład
Dysk 0 - 1953497087 LBA
Partycja 63 - 81915434 LBA
boot 63 LBA bootcopy 81915434 LBA
MFT 6291519 LBA
MFTmirror 5119710 klaster 40957680 LBA vol.sec. Czyli 40957743 LBA


Opis NTFS BOOT sektora Windows na przykładzie Windows XP


BOOT sektor po sformatowaniu powinien się mieścić w 63 LBA pierwszej partycji. Jego kopia mieści się w ostatnim sektorze tej samej partycji. Jest on częścią Metadanych partycji NTFS. W BOOT sektorze mieści się instrukcja skoku do IPL a dokładnie do części początkowej IPL-a entry point. Następnie ładowane są parametry BPB Bios parametr blok w których opisana jest geometria partycji. Następnie IPL ładuje do pamięci mały program IPL ,który lokalizuje , i wykonuje kod startujący partycji.
Oto przykładowy BOOT sektor.

0-511 = (512)

0-84 (85) BOOT sektor zaczyna się od instrukcji JMP skok do miejsca BPB gdzie znajduje się IPL (IPL`s entry point) (IPL Initial Program lauder ,ładujący program inicjalizujący) 0000: - 0-2 (3) Komenda JMP ( EB 52 – ; jump to IPL entry point ,90 - ;nop) BPB– (Bios Parametr block)

0000: - 3-10 (8) Nazwa firmy producenta i systemu operacyjnego ( tutaj MS i NTFS)
0000: - 11-12 (2) Rozmiar sektora w bajtach (512)
0000: - 13 (1) Liczba sektorów w klastrze (Zmienny podczas odbudowywania)
0000: - 14 – 20 (7) (0010: 0-4) Zarezerwowane (nie zdefiniowane zawsze 0)
0010: - 21 (1) Typ nośnika (Dysk twardy o dowolnej pojemności oznaczony jest jako F8)
0010: - 22-23 (2) Zarezerwowane (nie zdefiniowane zawsze 0)
0010: - 24-25 (2) Ilość sektorów na ścieżkę (sectors per track) (Zmienny podczas odbudowywania)
0010: - 26-27 (2) Ilość głowic (Zmienny podczas odbudowywania)

0010: - 28-29 (2) Sektory ukryte (Haiden sectors (28 młodsze słowo 29 starsze słowo 00 3f – 63) (Zmienny podczas odbudowywania)
0010: - 30-35 (6) Nie używane (0020 : (0-3 (4)))
0020: - 36-39 (4) Nie używane (80008000h ,0x00800080 ,80 00 80 00)
0020: - 40-47 (8) Ilość sektorów partycji (Total sectors NTFS) (40-43(4) młodsze słowo , 44-47 (4) starsze słowo (Zmienny podczas odbudowywania)
starsze słowo 00 00 00 00 , 00000000000000000000000000000000 , młodsze słowo 04 E1 ED EB , 00000100111000011110110111101011 – 81915371 )
0030: - 48-55 (8) Startowy klaster MFT (48-51 (4) młodsze słowo ,52-55 (4) starsze słowo (Zmienny podczas odbudowywania)
starsze słowo 00 00 00 00 , 00000000000000000000000000000000 , młodsze słowo 00 0C 00 00 , 00000000000011000000000000000000 – 786432 )
0030: - 56-63 (8) Startowy klaster MFTmirror (56-59 (4) młodsze słowo , 60-63 (4) starsze słowo
(Zmienny podczas odbudowywania)
starsze słowo 00 00 00 00 , 00000000000000000000000000000000 , młodsze słowo 00 4E 1E DE , 00000000010011100001111011011110 – 5119710 )
0040: - 64-67 Rozmiar zapisu MFT w klastrach , Clusters per FILE 00 00 00 F6 – 246 (Zmienny podczas odbudowywania)
0040: - 68-71 Rozmiar bufora indeksów w klastrach Clusters per INDX 00 00 00 01 – 1 (Zmienny podczas odbudowywania)
0040: - 72-79 (8) Numer seryjny dysku (73-76 (4) młodsze słowo , 77-80(4) starsze słowo (S/N : D03960B4-B8D0399B) (Zmienny podczas odbudowywania)
0050: - 80-83 (4) CRC



Jump/Nop OEM String
BIOS Parametr Block
IPL Initial Program Lauder
Strings
Sygnatura

84-511(428)


84-115(32)
IPL Initial Program louder , ładujący program inicjujący


84(1) cli (FA) disable interrupts
85-86 (2) xor ax, ax (33 C0) ax = 0
87-88 (2) mov ss, ax (8E D0) stack segment = 0
89-91 (3) mov sp, 7C00h (BC 00 7C) stack @ 0:7C00
92 (1) sti (FB) enable interrupts
93-95 (3) mov ax, 7C0h (B8 C0 07)
96-97 (2) mov ds, ax (8E D8) data segment = 07C0
98-100(3) call 007B (E8 16 00) calculate drive's total sectors
101-103(3) mov ax, 0D00h (B8 00 0D)
104-105(2) mov es, ax (8E C0) es = 0D00h
106-107(2) xor bx, bx (33 DB) zero bx
108-112(5) mov b(ds:0Eh), 10h (C6 06 0E 00 10) store read count index
113-115(3) call 00C7 (E8 53 00) go read the disk


116-122(7)
Jump Into IPL Extension

116-118(3) push 0D00h (63 00 0D) segment for retf
119-121(3) push 26Ah (68 6A 02) offset for retf
122 (1) retf (CB) jump into extended IPL


123-169(47)

Obliczenie całej ilości sektorów na dysku (CALCULATE TOTAL SECTORS ON DRIVE)

123-126(4) mov dl, ds:24h (8A 16 24 00) load BIOS drive number(80h) to dl
127-128(2) mov ah, 8 (B4 08) Function "Get Hard Drive Parameters"
129-130(2) int 13h (CD 13) call BIOS disk service
131-132(2) jnb 07C0:008A (73 05) jump if no error
133-135(3) mov cx, 0FFFFh (B9 FF FF) use dummy values for the calculation
136-137(2) mov dh, cl (8A F1) below if an error occurs
138-141(4) movzx eax, dh (66 0F B6 C6) max head number to eax...
142 (1) inc ax (40) and increment
143-146(4) movzx edx, cl (66 0F B6 D1) max sector number and high 2 bits
max cylinder number
147-149(3) and dl, 3Fh (80 E2 3F) mask off high 2 - dx now has
max sector number
150-151(2) mul dx (F7 E2) multiply (max sectors) * (max heads)
152-153(2) xchg cl, ch (86 CD) get maximum...
154-156(3) shr ch, 6 (C0 06) cylinder number...
157 (1) inc cx (41) in...
158-161(4) movzx ecx, cx (66 0F B7 C9) ecx
162-164(3) mul ecx (66 F7 E1) result will be drive's total sectors
165-168(4) mov ds:20h, eax (66 A3 20 00) store the value in the BPB area
169 (1) retn (C3) return

170-198(29)

(TEST FOR INTERRUPT 13 LBA EXTENSIONS SUPPORT IN BIOS)

170-171(2) mov ah, 41h (B4 41) int13 Extensions Installation check
172-174(3) mov bx, 55AAh (BB AA 55) test pattern in
175-178(4) mov dl, ds:24h (8A 16 24 00) BIOS number of hard drive
179-180(2) int 13h (CD 13) do interrupt
181-182(2) jb 07C0:00C6 (72 0F) jump if error
183-186(4) cmp bx, 0AA55h (81 FB 55 AA) test pattern out
187-188(2) jnz 07C0:00C6 (75 09) jump if pattern miscompare
189-191(3) test cl, 1 (F6 C1 01) are extended read/write supported
192-193(2) jz 07C0:00C6 (74 04) jump if not
194-197(4) inc bp(ds:14h) (FE 06 14 00) set marker
198 (1) retn (C3) return

199-220(22)

Ładowanie do pamięci (READ $BOOT (16 SECTORS) TO MEMORY)

199-200(2) pushad (66 60) save
201 (1) push ds (1E) registers on
202 (1) push es (06) stack
203-206(4) mov eax, ds:10h (66 A1 10 00) sector counter - starts at zero
207-211(5) add eax, ds:1Ch (66 03 06 1C 00)hidden sectors
212-216(5) cmp eax, ds:20h (66 3B 06 20 00)ds:20 has drive's total sectors
217-220(4) jb 0117 (0F 82 3A 00) jump if active partition start is not beyond 8GB point


221-278(58)
Odczyt w trybie LBA (READ IN LBA MODE)


221 (1) push ds (1E) save ds on stack
222-224(3) push large 0 (66 6A 00) address of
225-226(2) push eax (66 50) sectors to read
227 (1) push es (06) read buffer is at
228 (1) push bx (53) 0D00:0000
229-234(6) push large 10010h (66 68 10 00 01 00) read 1 sector, etc
235-239(5) cmp bp(ds:14h), 0 (80 3E 14 00 00) byte is set if BIOS is LBA capable
240-243(4) jnz 0100 (0F 85 0C 00) jump if LBA capable,
244-246(3) call 00AA (E8 B3 FF) else do install check for LBA extns
247-251(5) cmp bp(ds:14h), 0 (80 3E 14 00 00) recheck - LBA capable
252-255(4) jz 0161 (0F 84 61 00) go print error msg if not
256-257(2) mov ah, 42h (B4 42) set up for int 13 LBA read
258-261(4) mov dl, bp[ds:24h] (8A 16 24 00) BIOS drive number into dl
262 (1) push ss (16) ss on stack (ss = 0h)
263 (1) pop ds (1F) ds:si = address of packet
264-265(2) mov si, sp (8B F4) buffer (0:7C00)
266-167(2) int 13h (CD 13) perform read
268-269(2) pop eax (66 58) clean up
270 (1) pop bx (5B) .
271 (1) pop es (07) .
272-273(2) pop eax (66 58) .
274-275(2) pop eax (66 58) .
276 (1) pop ds (1F) the stack
277-278(2) jmp 0144h (EB 2D) set up to read next sector


279-352(73)

Odczyt w trybie CHS (READ IN CHS MODE)

Na wejściu eax = ilość ukrytych sektorów
279-281(3) xor edx, edx (66 33 D2) zero edx
282-287(6) movzx ecx, wp(ds:18h) (66 0F B7 0E 18 00) ecx = sectors per track
288-290(3) div ecx (66 F7 F1) (hidden sectors) / (sectors per track)
291-192(2) inc dl (FE C2) increment remainder in dl
293-294(2) mov cl, dl (8A CA) move to cl Jest to numer sektora do odczytu
295-297(3) mov edx, eax (66 8B D0) hidden sectors now in edx
298-301(4) shr edx, 10h (66 C1 EA 10)
302-305(4) div wp(ds:1Ah) (F7 36 1A 00) (hidden sectors)/(number of heads)
306-307(2) xchg dl, dh (86 D6) remainder to dh this is head number for ead
308-311(4) mov dl, ds:24h (8A 16 24 00) BIOS drive number (80h) in dl
312-313(2) mov ch, al (8A E8) high 8 bits of cylinder number
314-316(3) shl ah, 6 (C0 E4 06) shift hi 2 bits of cyl number
317-318(2) or cl, ah (A0 CC) or them to cl - now ready to read
319-321(3) mov ax, 201h (B8 01 02) read 1 sector
322-323(2) int 13h (CD 13) do it
324-327(4) jb 0161 (0F 82 19 00) jump if error
328-329(2) mov ax, es (8C C0) move read buffer up
330-332(3) add ax, 20h (05 20 00) by 512 bytes
333-334(2) mov es, ax (8E C0) to receive next sector
335-339(5) inc dp(ds:10h) (66 FF 06 10 00) increment sector counter
340-343(4) dec wp(ds:0Eh) (FF 0E 0E 00) decrement loop counter
344-347(4) jnz 00CB (0F 85 6F FF) go read next sector
348 (1) pop es (07 16) sectors have been read...
349 (1) pop ds (1F) clean up
350-351(2) popad (66 61) and
352 (1) retn (C3) return

353-386(34)

Wyświetlanie błędów (ERROR MESSAGES PRINT ROUTINE)

353-355(3) mov al, ds:1F8h (A0 F8 01) value is 83h
356-358(3) call 0170h (E8 09 00) print err msg
359-361(3) mov al, ds:1FBh (A0 FB 01) value is C9h
362-364(3) call sub_0_170 (E8 03 00) print err msg
365 (1) sti (FB) enable interrupts
366-367(2) jmp 016Eh (EB FE) hang (wait for CTL+ALT+DEL)
368-369(2) mov ah, 1 (B4 01) 370-371(2) mov si, ax (8B F0) offset to start of msg
372 (1) lodsb (AC) get next char to print
373-374(2) cmp al, 0 (3C 00) test for end of msg
375-376(2) jz 0182h (74 09) jump if done
377-378(2) mov ah, 0Eh (B4 0E) BIOS TTY output function
379-381(3) mov bx, 7 (BB 07 00) color wht on blk
382-383(2) int 10h (CD 10) print the character
384-385(2) jmp 0174h (EB F2) get next character
386 (1) retn (C3) return when done

387-509(123)

Komunikaty błędów (ERROR MESSAGES) Tutaj wprawne oko zauważy różnicę polskiego BOOT-a i Angielskiego
387-388(2)
389-407(19) db "Błąd odczytu dysku."
408-409(2) db 0Dh 0Ah CR LF
410-426(17) db "Brak pliku NTLDR."
427-428(2) db 0Dh 0Ah CR LF
429-453(25) db "NTLDR jest skompresowany."
454-455(2) db 0Dh 0Ah CR LF
456-494(39) db "Naciśnij Ctrl+Alt+Del, aby zrestartować"
495-496(2) db 0Dh 0Ah CR LF
497-503(7) db 0 DUP (0Eh)
504 (1) db 83h these values are
505 (1) db 98h offsets to the 4
506 (1) db ABh text message strings
507 (1) db C6h which the IPL can print
508 (1) db 0
509 (1) db 0

510-511(2)

Sygnatura (SYSTEM SECTOR SIGNATURE)
510 (1) db 55h U
511 (1) db AAh ª



Źródła opracowania
BootMaster Partition Recovery
Forum elektroda
Opis jak wykonać Kopie
posektorową programem HDDClone


Opis programu DMDE

Opis partycji

Opis S.M.A.R.T.


RAID 0 - naprawa odzysk danych



Oficjalny dystrybutor DMDE na Polskę




Opis MBR






Partner Seagate











Fora i strony
dotyczące
tematyki odzyskiwania
danych z dysków

Elektroda
Polecane Forum

IDG
Polecane Forum























































































































































































































































































































































































































































































































































































































































































































































jeśli chcesz pomóc zwalczać spam podlinkuj tą stronę w jakikolwiek sposób