컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴-
Prostota a primitivnost sama /
DoSfS /
컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
Zdrav�m v퉑chny 'v�h賑ky' i n�hodn� �ten壽e. Tak copak se dneska
dozv�me? Asi si pov�me n�co o souborov�m syst�mu DOSu - jak vlastn�
p�esn� funguje to ukl�d�n� soubor�, a kde a jak je ulo푘n� FAT
tabulka, jak jsou ulo푘n� adres壽e, atakd�le atakd�le neboli
zkr�cen� atd. A jestli budu m�t n�ladu tak zkus�m sbastlit i n�jakou
utilitku kter� to p�edvede v praxi. Tak se na to vrhnem!
휼st prvn� - jak jsem rozp�lil harddisk
Ne, nezkou퉑l jsem ho nijak �ezat ani jinak mechanicky p�lit.
Jednodu퉑 jsem editoval partition table podle m�ho gusta, i kdy�
jsem mohl tak� b�t lenoch a ud�lat to pomoc� n�jak� utilitky - pr�
se jmenuje fdisk nebo tak n�jak a d�l� p�esn� tohle - a existuje
snad na ka푗�m opera�n�m syst�mu co jsem vid�l.
No jo, ale co to vlastn� je? U� jsem �ekl, 푘 je to jak�si tabulka -
ve Win�e퉡in� se tomu 曝k� tabulka odd�l� (co� je kupodivu celkem
pou푝teln� v�raz, narozd�l od mnoha jin�ch :-). A v t� tabulce jsou
popsan� diskov� odd�ly, kter� se chovaj� v�t퉕nou jako samostatn�
logick� disky (ov퉑m pokud to zrovna windows 퉝atn� nepochop� - pak
m�sto kop�rov�n� souboru na jednu partition ho zkop�ruje na za矮tek
jin�, co� je celkem fat�ln� :) - moje vlastn� zku퉑nost ):. Ta
tabulka mus� b�t na ka푗�m HDD a mus� v n� b�t alespo� jedna
partition (diskov� odd�l, logick� disk). Cel� tabulka je v �pln�
prvn�m sektoru harddisku a m� max. 4 polo푟y (ono jich m夏e b�t i
v�ce, viz d�le). Ti kdo u� o harddisku n�co v�d�, ur�it� si
uv�domili, 푘 je ve stejn�m sektoru jako zavad麟 - holt se tam
musej� n�jak vej�t... :) No, u� toho nech�m a rad퉕 v�m rovnou uk瀟u
jej� form�t:
旼컴컴컴컴컴컴컴컴컴컫컴컴쩡컴쩡컴쩡컴컴쩡컴컴컴컴컴컴�
� Za矮tek partition � AI � H � S � CYL � offset 1BEh �
� Konec partition � SI � H � S � CYL � offset 1C2h �
� Partition � Relativni zacatek� offset 1C6h �
� Velikost partition � Pocet sektoru � offset 1CAh �
읕컴컴컴컴컴컴컴컴컴컨컴컴컴컴컴컴컴컴컴좔컴컴컴컴컴컴�
�Zacatky popisovacu partition:�
� 1 � offset 1BEh � velikost �
� 2 � offset 1CEh � jedne �
� 3 � offset 1DEh � partition �
� 4 � offset 1EEh � je 10h �
읕컴좔컴컴컴컴컴컴좔컴컴컴컴컴�
Nakres I - partition table
Hmm... z toho asi moc moud曝 nebudete - tak푘 to bude cht�t
vysv�tlen�.
AI = indik�tor aktivnosti oblasti - to znamen� ze kter� oblasti se zav�d�
syst�m.
00h : oblast je neaktivn�
80h : oblast je aktivn� - tento flag m夏e m�t nastavena max.
jedna oblast.
SI = indik�tor syst�mu - ur�uje OS, kter� danou oblast vlastn�.
00h : nikoho to nenapadlo ur�it aneb nespecifikovan�
01h : DOS 12-bit FAT
04h : DOS 16-bit FAT
05h : DOSEXT - tak toto je velice d�le푝t� typ. Slou얩 k vytv壽en�
tzv. roz蔣en�ch oblast� (extended partitions). Ty maj� ten
v�znam, 푘 v nich m夏ou b�t zapouzd�en� dal뱁 partition - tzn.
v prvn�m sektoru takov� partition je dal뱁 partition table,
obsahuj�c� z�znam o jedn� oblasti v t�to roz뱁�en� oblasti
(st�le s n�mi? ;) a p曝padn� odkaz na dal뱁 roz뱁�enou oblast,
atakd�le a� do nekone�na... - pozor! nezapome�te 푘 zapouzd�en�
partitions m夏ou b�t jenom v mez�ch jejich mate�sk� oblasti!
N�zev je m�rn� matouc�, pon�vad� takov�to roz뱁�en� partition
lze pou얩t i t�eba na Linux, a snad na ka푗� OS...
06h : BIGDOS - netu뱁m rozd�l mezi 06h a 04h - pora�te mi n�kdo...
(v�ce ne� 512Mb?)
82h : Linux SWAP
83h : Linux Native
DBh : CP/M :o)
samoz�ejm� 푘 t�ch typ� je daleko v�ce - tohle byl jenom �zk� v�b�r.
CYL= Doln�ch 8 bit� 妖sla cylindru. Horn� dva byty jsou ukraden� z vr퉗u S
S = Doln�ch 퉑st byt� obsahuje 妖slo sektoru
H = 妖slo hlavy
Tak푘 H+S+CYL ur�uje jednozna�n� konec oblasti (ale je tu mal�
probl�m s 妖sly cylindr� nad 1023 - ten probl�m jsem je퉡�
nerozlu퉡il - jakmile to n�kdo rozk�duje, dejte mi pros�m
v�d�t... Jedin� z�chrana aby to pochopily i Windoze 95, ne jenom
Linux, je nechat to na jejich fdisku nebo rucne snizit pocet
cylindru na 512... ;) i jej� za矮tek. Pole AI, H, S a CYL jsou
je퉡� k tomu organizovan� tak, 푘 sta妖 pouze dv� instrukce MOV
aby se vhodn� nastavily AX a CX p�ed zavol�n�m INT 13h, kter�m se
na�te aktu�ln� zav�d�c� z�znam (pozn.: modern� zavad麟e jako
LILO, BOOT MANAGER apod. pracuj� tro퉗u jinak, v podstat� v
sou�asnosti ji� nem� AI tak nebety�n� v�znam). Jo, a ka푗� oblast
za妖n� hlavou 0 a sektorem 1. Ov퉑m푘 vyj�mka potvrzuje pravidlo -
oblast na za矮tku disku, kter� za妖n� sektorem 2, pon�vad� sektor
jedna zab�r� hlavn� zavad麟 a partition table. Nejsem si te�
jist� proto푘 to u� jsem n�jakou dobu nezkoumal, ale takt榕 by
to m�lo b�t s DOSEXT...
Relativn� za矮tek je vpodstat� po�et sektor�, kter� p�edch�zej�
danou oblast. Je velik� 4 byty, tzn. DWORD (unsigned long pro
C�ka�e, pascalisti maj� sm�lu, proto푘 tpascal m� jenom longint
kter� je znam�nkov�). Tak푘 u disku se 4mi hlavami, 17ti sektory na
stop� a na퉑 oblast za妖n� na cylindru 3, sektoru 1 a hlavi�ce 0,
tak jej� rel. za矮tek m� hodnotu 204 (3*4*17) na t�ech
p�edch�zej�c�ch cylindrech. A po�et sektor� kter� dan� oblast
vlastn� je v poli po�et sektor�. To je op�t 4-bytov� hodnota
(DWORD). Prost� jej� velikost.
Ale je퉡� nesm�me zapomenout na kontroln� signaturu 55AAh, kter� je
na ofsetu 1FEh - ta potvrzuje platnost tabulky. Pozor! Tenhle znak
mus� m�t ka푗� zavad麟 OS!
Tak - to bysme snad m�li partition tabulku. Te� p�ich�z� na �adu ona
MSDOS� 뱁lenost kter� se 曝k� Boot Record. Je to vlastn� pole
spousty podivn�ch �daj�, jejich� chybnost zp�sobuje pom�rn� velk�
probl�my a tehdy nen� radno zapisovati na HDD :( Ale nu�, vrhn�me
se na to! To�, zase by to cht�lo n�jakou tabulku, 푘? Tedy z�ete a
radujte se!
Offset � Velikost � Popis
컴컴컴컴탠컴컴컴컴컴컵컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
+03h � 8xDB � OEM ID
+0Bh � DW (L M) � Pocet bytu na sektor (vetsinou 512)
+0Dh � DB � Pocet sektoru na cluster (treba 16)
+0Eh � DB � Rezervovane sektory na zacatku disku
+0Fh � DB � ???
+10h � DB � Pocet kopii FAT tabulky (vetsinou 2)
+11h � DW � Pocet polozek v korenovem adresari
+13h � DW � Pocet sektoru na disku (pokud je
� � vyplnen velky pocet sektoru tak
� � je toto nepouzito a musi to byt 0!)
+15h � DB � Media descriptor byte - typ media
+16h � DW (L M) � Pocet sektoru na FAT tabulku (190)
+18h � DW (L M) � Pocet sektoru na stopu
+1Ah � DW (L M) � "Stran" disku (hlav)
+1Ch � DD � Specialnich "skrytych" sektoru (??)
+20h � DD � Velky pocet sektoru na disku
+24h � DB � Fyzicke cislo disku
+25h � DB � ???
+26h � DB � Extended Boot Record Signature
+27h � DD � Seriove cislo svazku
+2Bh � 11xDB � Volume Label (vsak vy vite o co de)
+36h � 8xDB � Filesystem ID (FAT16/FAT32)
BootRecord
Tabulka hodnot pro ty m�n� znal�... (bude se v�m hodit i jinde)
� Asm � Pascal � C
쳐컴컴탠컴컴컴컴탠컴컴컴컴컴컴컴컴컴�
� DD � longint � unsigned long
� DW � word � unsigned int
� DB � byte � char (unsigned :)
Pozn.: pascalsk� longint je znam�nkov�, tak bacha na to!!!
LSB (L) = Less Significancy (kdo v� jak se to p紫e :) Byte
= M�n� v�znamn� byt (ni씁� bity)
MSB (M) = More Significancy Byte
= V�ce v�znamn� byt (vy뭐� bity)
Hrmpf... To je sice hezk�, asi si 曝k�te, ale cht�lo by to n�jak�
popis. Budi�, m�te ho m�t.
Na za矮tku je tzv. OEM ID. To obsahuje n�co jako jm�no 'v�robce'
partition - nap� na m�m DRDOSu je to "IBM 3.1", u win95 je to
"MSWIN4.1" apod. Nevid�l jsem, 푘 by na tom n�kdy n�co z�le푘lo...
Potom tu m�me po�et byt� na sektor. To je douf�m jasn� - prost� jak
je velik� jeden sektor. Po�et sektor� na cluster u� je
zaj�mav�j뱁. Ur�uje, kolik sektor� bude v jednom clusteru, p�itom
cluster je minim�ln� jednotka, ve kter� se fyzicky ud�v� velikost
soubor. Tedy pokud m�me soubor velk� t�eba jenom jeden znak, p�esto
zab�r� (bytu na sektor)*(sektoru na cluster)! Viz tak� popis FAT
tabulky. Rezervovan� sektory na za矮tku disku? V�t퉕nou b�v�
jedni�ka, z�ejm� (asi, mo푣�...) po�et sektor�, kter� se vynechaj�
p�i 妖slov�n� a jedni�ka je a� za矮tek partition + rezervovan�
sektory, nebo je to po�et sektor� po kter�ch za�ne FAT. S�m jsem to
nikdy nepot�eboval...
Na 0Fh je nula a asi by tomu pat�ila popiska "rezervovan�" :) Po�et
kopi�