Virus huyền thoại hay thực tế - ngô anh vũ
- 79 trang
- file .pdf
www.updatesofts.com
1
lêi nãi ®Çu
MÆc dï virus tin häc ® xuÊt hiÖn l©u trªn thÕ giíi vµ ë c¶ trong n−íc. Vµ kh«ng ai cßn ng¹c
nhiªn n÷a nÕu biÕt m¸y tÝnh cña m×nh ® bÞ nhiÔm virus. ThÕ nh−ng, thùc ®¸ng ng¹c nhiªn v×
hÇu nh− ch−a cã mét cuèn s¸ch nµo ®Ò cËp ®Õn virus mét c¸ch ®Çy ®ñ vµ chi tiÕt. Sù thiÕu v¾ng
th«ng tin nµy kh«ng ph¶i lµ v« t×nh mµ do nh÷ng quan niÖm cho r»ng phæ biÕn nh÷ng th«ng tin
nh− vËy kh«ng nh÷ng kh«ng ®−îc lîi Ých g× mµ cßn lµm gia t¨ng sè l−îng virus lªn, vµ nh− thÕ
lµm t¨ng nguy c¬ mÊt m¸t d÷ liÖu. XÐt vÒ khÝa c¹nh nµy, c¸c nhµ s¶n xuÊt phÇn mÒm chèng
virus còng rÊt ®ång t×nh.
ChÝnh sù thiÕu hiÓu biÕt thùc sù ... gi¶ t¹o vÒ virus cïng víi sù thæi phång qu¸ ®¸ng cña b¸o chÝ
® biÕn virus tin häc bÐ nhá thµnh mét con ‘ngo¸o ép’ khæng lå lµm kinh hoµng cho nh÷ng
ng−êi sö dông téi nghiÖp khi m¸y cña hä bÞ mét hiÖn t−îng nµo ®ã mµ nghi ngê lµ virus. C¸i
gi¸ ph¶i tr¶ cho sù thiÕu hiÓu biÕt nµy ®«i khi l¹i qu¸ to lín, mét sù sai lÖch d÷ liÖu do lçi logic
cña ch−¬ng tr×nh cã thÓ gi¸n ®o¹n vµi ngµy ®Ó backup d÷ liÖu vµ format l¹i ®Üa, mét file tù
nhiªn t¨ng kÝch th−íc còng g©y hoang mang. §ã lµ ch−a kÓ ®Õn sù ®æ lçi cho virus tin häc sù
thiÕu hiÓu biÕt cña m×nh.
MÆt kh¸c, mét virus tin häc ®óng nghÜa lµ mét virus cã kÝch th−íc ch−¬ng tr×nh cùc nhá vµ
trong ®ã bao gåm chøc n¨ng khã kh¨n nªn ®ßi hái virus ®−îc thiÕt kÕ trùc tiÕp b»ng ng«n ng÷
Assembler vµ bao hµm nh÷ng gi¶i thuËt tèi −u vµ kÜ thuËt cao, nÕu xÐt trªn mét khÝa c¹nh nµo
®ã rÊt ®¸ng cho chóng ta häc tËp.
ChÝnh v× nh÷ng lÝ do ®ã, cuèn s¸ch nµy ra ®êi nh»m cung cÊp cho ®éc gi¶ nh÷ng th«ng tin cÇn
thiÕt vµ ®óng ®¾n vÒ virus, tõ ®ã cã thÓ rót ra nh÷ng bµi häc bæ Ých vµ cÇn thiÕt trong viÖc ph¸t
hiÖn vµ cøu ch÷a c¸c hËu qu¶ mµ virus g©y ra.
Dï ®−îc so¹n víi nh÷ng th«ng tin rÊt c¬ b¶n, cuèn s¸ch nµy vÉn ®ßi hái ®éc gi¶ ph¶i cã mét
kiÕn thøc c¨n b¶n vÒ Assembler (v× chÝnh virus còng ®−îc thiÕt kÕ b»ng ng«n ng÷ nµy) ®Ó cã
thÓ hiÓu vµ ph©n tÝch virus mét c¸ch tØ mØ nhÊt.
T¸c gi¶ kh«ng bao giê cã môc ®Ých h−íng dÉn ®éc gi¶ mét ph−¬ng ph¸p ®Ó thiÕt kÕ mét virus,
vµ tèt nhÊt b¹n ®äc còng ®õng bao giê cã ý ®Þnh nµy v× chÝnh c¸c b¹n sÏ lµ nh÷ng n¹n nh©n ®Çu
tiªn cña nã vµ sÏ g¸nh chÞu mäi hËu qu¶ do nã g©y ra.
C¸c virus ®−îc kh¶o s¸t trong cuèn s¸ch nµy tÊt c¶ lµ nh÷ng virus ® biÕt trong thµnh phè còng
nh− trªn thÕ giíi, trong ®ã, sè virus ®−îc biÕt trong n−íc còng ® chiÕm gÇn ph©n nöa.
Xin c¶m ¬n sù gióp ®ì quÝ b¸u cña c¸c ®ång nghiÖp trong viÖc hiÖu chÝnh vµ ®ãng gãp nhiÒu ý
kiÕn hay cho cuèn s¸ch. V× ®©y lµ lÇn xuÊt b¶n ®Çu tiªn, ch¾c ch¾n cuèn s¸ch sÏ cßn nhiÒu ®iÒu
thiÕu sãt, t¸c gi¶ mong nhËn ®−îc nhiÒu ý kiÕn ®ãng gãp cña ®éc gi¶.
§Þa chØ liªn l¹c t¸c gi¶:
Ng« Anh Vò
Trung t©m CESAIS
Ban tin häc
17 Ph¹m Ngäc Th¹ch Q.3 TP Hå ChÝ Minh
2
www.updatesofts.com
3
Giíi thiÖu tæng qu¸t vÒ virus tin häc
I - Virus Tin Häc vµ Trojan Horse.
LuËt ph¸p tõng n−íc vÉn cßn cã chç kh«ng ®ång nhÊt, cã n−íc ® chÊp nhËn b¶o vÖ b¶n
quyÒn c¸c phÇn mÒm, nh−ng cã nh÷ng n−íc l¹i kh«ng ®Ò cËp mét c¸ch râ rµng ®Õn vÊn ®Ò
nµy. Cïng víi sù ph¸t triÓn nh− vò bo cña phÇn cøng, kÜ thuËt sao chÐp còng ®¹t ®Õn tr×nh ®é
cao. Nh÷ng phÇn mÒm sao chÐp nh− COPYIIPC, COPYWRIT ... cho phÐp t¹o mét ®Üa míi cã
mäi thµnh phÇn gièng nh− ®Üa gèc ® lµm thiÖt h¹i ®¸ng kÓ cho c¸c hng s¶n xuÊt phÇn mÒm.
Lîi dông kÏ ë luËt ph¸p cña c¸c n−íc, mét sè n¬i ® xuÊt hiÖn nh÷ng tay ‘c−íp’ phÇn mÒm
chuyªn nghiÖp. Nh÷ng phÇn mÒm võa ®−îc ®−a ra thÞ tr−êng ngµy h«m tr−íc th× lËp tøc nã bÞ
ph¸ khãa (khãa ë ®©y ®−îc hiÓu nh− mét m ®−îc ®−a vµo khi thi hµnh ch−¬ng tr×nh, mét ®Üa
gèc...), copy l¹i, thËm chÝ cßn söa ®æi c¶ tªn t¸c gi¶, råi tung ra thÞ tr−êng víi gi¸ rÎ ch−a tõng
cã.
Nh÷ng hµnh ®éng v« ®¹o ®øc nµy lµ mét th¸ch thøc ®èi víi c¸c nhµ s¶n xuÊt phÇn mÒm, do
®ã, ý t−ëng ®−a mét ®o¹n m ph¸ ho¹i (destructive code) vµo trong phÇn mÒm víi môc ®Ých sÏ
ph¸ hñy d÷ liÖu nÕu phÇn mÒm nµy kh«ng n»m trªn ®Üa gèc kh«ng ph¶i lµ ý t−ëng g× míi l¹.
Nh−ng viÖc giÊu mét ®o¹n m nh− thÕ nµo vµ b¶n chÊt cña ®o¹n m ra sao th× l¹i tïy thuéc vµo
nhµ s¶n xuÊt vµ kh«ng mét ai thõa nhËn (tÊt nhiªn, kÓ c¶ nh÷ng nhµ s¶n xuÊt ra nã) còng nh−
chøng kiÕn ®iÒu nµy c¶.
MÆt kh¸c, tin häc ® vµ ®ang trë thµnh phæ cËp cho toµn thÕ giíi, nh÷ng cÊu tróc néi t¹i,
nh÷ng kÜ thuËt lËp tr×nh ®Òu ®−îc h−íng dÉn tØ mØ vµ nghiªm tóc ®ang tiÕp cËn tõng ng−êi vµ
cô thÓ lµ víi tÇng líp thanh niªn. Víi ®Çy ®ñ kiÕn thøc vµ tÝnh hiÕu th¾ng, ®ua tµi cña tuæi trÎ,
mét t− t−ëng næi lo¹n hay sù tù kh¼ng ®Þnh m×nh qua nh÷ng ch−¬ng tr×nh mang tÝnh chÊt ph¸
ho¹i ®Òu cã thÓ g©y nguy hiÓm vµ thùc tÕ còng kh«ng Ýt vÝ dô chøng minh cho ®iÒu nµy.
C¨n cø vµo tÝnh chÊt cña ®o¹n m ph¸ ho¹i, ta cã thÓ chia chóng thµnh hai lo¹i: virus vµ trojan
horse.
1/ Trojan horse:
ThuËt ng÷ nµy dùa vµo mét ®iÓn tÝch cæ, chØ nh÷ng ®o¹n m ®−îc ‘c¾m’ vµo bªn trong
mét phÇn mÒm, cho phÐp xuÊt hiÖn vµ ra tay ph¸ ho¹i mét c¸ch bÊt ngê nh− nh÷ng ‘anh hïng’
x«ng ra tõ bông con ngùa thµnh Troa. Trojan horse lµ mét ®o¹n m HOµN TOµN KH¤NG
Cã TÝNH CHÊT L¢Y LAN, chØ n»m trong nh÷ng phÇn mÒm nhÊt ®Þnh. §o¹n m nµy sÏ ph¸
ho¹i vµo mét thêi ®iÓm x¸c ®Þnh cã thÓ ®−îc t¸c gi¶ ®Þnh tr−íc vµ ®èi t−îng cña chóng lµ
th«ng tin trªn ®Üa nh− format l¹i ®Üa, xãa FAT, Root....
Th«ng th−êng c¸c phÇn mÒm cã chøa Trojan horse ®−îc ph©n phèi nh− lµ c¸c version bæ sung,
hay míi, vµ ®iÒu nµy sÏ trõng ph¹t nh÷ng ng−êi thÝch sao chÐp phÇn mÒm ë nh÷ng n¬i cã
nguån gèc kh«ng x¸c ®Þnh.
Tuy nhiªn ®èi víi hiÖn t−îng nµy, ë ViÖt nam nãi chung vµ thµnh phè ta ch−a xuÊt hiÖn. Vµ
còng dÔ thÊy tÇm ho¹t ®éng vµ møc ph¸ ho¹i khi ho¹t ®éng trªn c¸c m¸y ®¬n sÏ v« cïng h¹n
chÕ.
2/ Virus tin häc:
ThuËt ng÷ nµy nh»m chØ mét ch−¬ng tr×nh m¸y tÝch cã thÓ tù sao chÐp chÝnh nã lªn nh÷ng ®Üa,
file kh¸c mµ ng−êi sö dông kh«ng hay biÕt. Th«ng th−êng virus còng mang tÝnh ph¸ ho¹i, nã
sÏ g©y ra lçi thi hµnh, lÖch l¹c hay hñy d÷ liÖu....
4
www.updatesofts.com
So víi Trojan horse, virus mang tÇm vãc ‘vÜ ®¹i’ h¬n, sù lan truyÒn xa h¬n vµ do ®ã t¸c h¹i cña
nã v« cïng khñng khiÕp h¬n. ë thµnh phè, virus ® xuÊt hiÖn kh¸ sím vµ còng ® g©y nhiÒu
t¸c h¹i víi −u thÕ cña virus so víi Trojan horse. ë ®©y , mét bµi b¸o nhan ®Ò “LÝ thuyÕt vµ c¬
cÊu cña c¸c phÇn tö tù hµnh phøc t¹p “(Theory and Organization of Complicated Automata).
Trong bµi b¸o cña m×nh, «ng ® nªu ra lÝ thuyÕt vÒ sù tù nh©n lªn nhiÒu lÇn cña c¸c ch−¬ng
tr×nh m¸y tÝnh. Nh÷ng ®ång nghiÖp cña «ng ® dÌ bØu nhiÒu vÒ ý t−ëng nµy nh−ng ®iÒu nµy
còng dÔ hiÓu v× nh÷ng chiÕc m¸y tÝnh ®iÖn tö ®Çu tiªn (electronic computer) ®−îc ph¸t triÓn
nhiÒu n¨m sau ®ã.
M−êi n¨m sau ®ã, trong mét chi nh¸nh cña hng AT&T’s Bell, ba th¶o ch−¬ng viªn trÎ tuæi ®
ph¸t triÓn mét trß ch¬i tªn lµ ‘Core War’, ba ng−êi nµy tªn lµ Mc Ilroy, Victor Vysottsky vµ
Robert Morris, ®Òu lµ nh÷ng ng−êi n¾m v÷ng nh÷ng cÊu tróc néi t¹i cña m¸y.
‘Core War’ lµ mét cuéc ®Êu trÝ gi÷a hai ®o¹n m cña hai th¶o ch−¬ng viªn. Mçi ®Êu thñ ®−a
mét ch−¬ng tr×nh cã kh¶ n¨ng tù t¸i t¹o (reproducing program) gäi lµ Organism vµo trong bé
nhí cña m¸y tÝnh. Khi b¾t ®Çu cuéc ch¬i Organism, mçi ®Êu thñ sÏ cè g¾ng ph¸ hñy organism
cña ®èi ph−¬ng vµ t¸i t¹o organism cña m×nh. §Êu thñ th¾ng cuéc lµ ®Êu thñ ph¸t triÓn nhiÒu
lÇn c¬ cÊu cña m×nh.
Trß ch¬i ‘Core War’ nµy ®−îc gi÷ kÝn cho ®Õn n¨m 1983, Ken Thompson, mét tay ch¬i lçi l¹c
® viÕt version ®Çu cho hÖ ®iÒu hµnh UNIX, ®Ó lé ra khi nhËn mét trong nh÷ng phÇn th−ëng
danh dù cña giíi kü nghÖ ®iÖn tö - Gi¶i th−ëng A.M Turing. Trong bµi diÔn v¨n cña m×nh, «ng
® ®−a ra mét ý t−ëng vÒ ph−¬ng ph¸p lµm virus. Thompson còng ®Ò cËp ®Õn Core War vµ sau
®ã tiÕp tôc khuyÕn khÝch thÝnh gi¶ cña m×nh hy lµm thö!
Th¸ng 5/1984 tê b¸o Scientific America cã ®¨ng mét bµi b¸o m« t¶ vÒ Core War vµ cung cÊp
cho ®äc gi¶ c¬ héi mua nh÷ng lêi h−íng dÉn vÒ trß ch¬i nµy - nã ®−îc gëi ®Õn tËn nhµ víi gi¸
2 USD c−íc phÝ b−u ®iÖn!
§Çu tiªn, virus tin häc ® b¾t ®Çu trªn c¸c m¸y lín nh− CREEPER (1970, RABBIT (1974),
ANIMAL (1980).... Sau ®ã míi b¾t ®Çu xuÊt hiÖn trªn m¸y PC. § cã mét sè tµi liÖu cho r»ng
virus tin häc trªn PC b¾t ®Çu tõ n¨m 1987, tuy nhiªn ®iÒu nµy còng kh«ng ®−îc ch¾c ch¾n khi
virus Brain ‘th«ng b¸o’ nã ®−îc ra ®êi tõ n¨m 1986!
Virus ®Çu tiªn trªn m¸y IBM PC ®−îc ph¸t hiÖn vµ nhanh chãng trë nªn næi tiÕng lµ Lehigh
virus (v× nã xuÊt hiÖn ®Çu tiªn ë tr−êng §¹i häc nµy) vµo tr−íc lÔ T¹ ¬n n¨m 1987. Cïng thêi
víi virus nµy, mét virus kh¸c ©m thÇm ®æ bé tõ Pakistan vµo MÜ lµ Brain víi môc tiªu ®Çu tiªn
lµ tr−êng §¹i häc Delaware. Mét n¬i kh¸c trªn thÕ giíi còng ® t−êng thuËt sù xuÊt hiÖn cña
virus: §¹i häc Hebrew - Israel. TÊt c¶ ®Òu cã chung mét ®iÓm: tõ c¸c tr−êng §¹i häc, n¬i cã
c¸c sinh viªn giái, hiÕu ®éng vµ thÝch ®ïa.
MÆc dï xuÊt hiÖn ë nhiÒu n¬i trªn thÕ giíi, virus vÉn cã chung mét ph−¬ng ph¸p l©y lan, v×
kh«ng n¾m râ c¸ch thøc nµy, mét sè ng−êi ® c¶m thÊy hèt ho¶ng khi ® diÖt b»ng mäi c¸ch,
m¸y tÝnh vÉn cø bÞ nhiÔm ®i nhiÔm l¹i mét virus.
Dï vËy, vÉn ph¶i cã mét ph©n lo¹i nµo ®ã chi tiÕt h¬n vÒ virus, lµm cho nã dÔ kiÓm so¸t vµ ®−a
ra ph−¬ng ph¸p ch÷a trÞ thÝch hîp. Do ®ã, ng−êi ta ® chia virus thµnh hai lo¹i chÝnh c¨n cø
theo c¸ch l©y vµ ®èi t−îng l©y. Ta sÏ kh¶o s¸t lÇn l−ît tõng ®èi t−îng mét.
III - C¸ch Thøc L©y - Ph©n Lo¹i.
Dùa vµo ®èi t−îng l©y lan lµ file hay ®Üa, ta chia virus thµnh hai nhãm chÝnh:
+ B - virus (boot virus): virus chØ tÊn c«ng lªn c¸c Boot sector hay Master boot.
+ F - virus (file virus): virus chØ tÊn c«ng lªn c¸c file thi hµnh ®−îc (d¹ng cã thÓ thi hµnh
b»ng chøc n¨ng 4Bh cña DOS h¬n lµ nh÷ng file d¹ng .COM hay .EXE).
5
Dï vËy, c¸ch ph©n chia nµy còng kh«ng ph¶i lµ duy nhÊt, mµ còng kh«ng h¼n chÝnh x¸c. V×
sau nµy, c¸c F - virus vÉn ph¸ ho¹i hay chÌn m ph¸ ho¹i vµo Boot sector, còng nh− B - virus
chÌn ®o¹n m vµo file. Tuy nhiªn, nh÷ng hiÖn t−îng nµy chØ nh»m ph¸ ho¹i chø kh«ng coi ®ã
lµ ®èi t−îng ®Ó l©y lan. D¹ng tæng qu¸t cña mét virus cã thÓ biÓu diÔn b»ng s¬ ®å sau:
T×m file/®Üa
NhiÔm
? Exit
L©y
Nh− ® giíi thiÖu vÒ ®Þnh nghÜa virus, ®o¹n m nµy mét lóc nµo ®ã ph¶i ®−îc trao quyÒn ®iÒu
khiÓn. Nh− vËy, râ rµng virus ph¶i khai th¸c mét chç hë nµo ®ã mµ m¸y ‘tù nguyÖn’ trao
quyÒn ®iÒu khiÓn l¹i cho nã. Thùc tÕ cã hai kÏ hë nh− thÕ, mµ ta sÏ lÇn l−ît xÐt sau ®©y:
1/ B - virus:
Khi m¸y tÝnh b¾t ®Çu khëi ®éng (Power on), mäi thanh ghi cña CPU sÏ ®−îc xãa, c¸c thanh
ghi ph©n ®o¹n (segment) ®−îc g¸n gi¸ trÞ 0FFFFh, cßn tÊt c¶ c¸c thanh ghi cßn l¹i ®Òu ®−îc
xãa vÒ 0. Lóc nµy CS:IP dÜ nhiªn sÏ trá ®Õn 0FFFFh:0. T¹i ®Þa chØ nµy lµ mét lÖnh JMP FAR
chuyÓn quyÒn ®iÒu khiÓn ®Õn mét ®o¹n ch−¬ng tr×nh ®Þnh s½n trong ROM, ®o¹n ch−¬ng tr×nh
nµy sÏ thùc hiÖn qu¸ tr×nh POST (Power On Seft Test: tù kiÓm tra khi khëi ®éng).
Qu¸ tr×nh POST sÏ lÇn l−ît kiÓm tra c¸c thanh ghi, kiÓm tra bé nhí, khëi t¹o c¸c chÝp ®iÒu
khiÓn DMA, bé ®iÒu khiÓn ng¾t, ®Üa.....NÕu qu¸ tr×nh nµy hoµn thµnh tèt ®Ñp, c«ng viÖc tiÕp
theo sÏ dß t×m c¸c card thiÕt bÞ g¾n thªm vµo (th−êng c¸c thiÕt bÞ nµy lµ card ®iÒu khiÓn ®Üa
cøng hay mµn h×nh) vµ trao quyÒn ®iÒu khiÓn ®Ó cho chóng tù khëi t¹o råi sau ®ã lÊy l¹i khi
card hoµn thµnh xong phÇn khëi t¹o. Tuy vËy còng ph¶i chó ý: toµn bé ®o¹n ch−¬ng tr×nh nµy
n»m ngay trong ROM, cã tÝnh chÊt ChØ §äc nªn kh«ng thÓ söa ®æi còng nh− chÌn bÊt k× mét
®o¹n m ch−¬ng tr×nh kh¸c vµo ®−îc.
Sau khi mäi viÖc khëi t¹o ®Òu hoµn thµnh tèt ®Ñp, lóc nµy ®o¹n ch−¬ng tr×nh trong ROM míi
tiÕn hµnh ®äc Boot sector tõ ®Üa vËt lÝ ®Çu tiªn (lµ ®Üa A) vµo trong RAM t¹i ®Þa chØ 0:07C00h
(Boot sector lµ sector ®Çu tiªn trªn ®Üa n»m ë sector 1, head 0, track 0). NÕu viÖc ®äc kh«ng
thµnh c«ng, (kh«ng cã ®Üa trong æ ®Üa...) Boot Master cña ®Üa cøng sÏ ®−îc ®äc vµo (nÕu cã ®Üa
cøng). Gi¶ sö viÖc ®äc ® thµnh c«ng, quyÒn ®iÒu khiÓn sÏ ®−îc trao cho ®o¹n m n»m trong
Boot record b»ng mét lÖnh JMP FAR 0:07C00 mµ kh«ng cÇn biÕt ®o¹n m nµy lµm g×. Nh−
vËy, ®Õn lóc nµy bÊt kÓ trong Boot record chøa ®o¹n m nµo, quyÒn ®iÒu khiÓn vÉn ®−îc trao
vµ nÕu ®o¹n m ®ã l¹i tiÕn hµnh format l¹i ®Üa!. Râ rµng, ®©y lµ mét kÏ hë ®Çu tiªn mµ m¸y
m¾c ph¶i. Nh−ng ®iÒu nµy còng dÔ hiÓu v× PC kh«ng thÓ kiÓm tra ®−îc ®o¹n m trong Boot
record - øng víi mçi hÖ ®iÒu hµnh, hoÆc ngay c¶ c¸c version kh¸c nhau - ®o¹n m nµy còng
kh¸c nhau. NÕu tù kiÓm ®iÓm l¹i m×nh, b¹n sÏ kh«ng khái giËt m×nh v× sè lÇn ®Ó quªn ®Üa
mÒm trong æ ®Üa còng kh«ng ph¶i lµ Ýt.
Tuy vËy, còng cßn may m¾n lµ ....®o¹n m trong Boot record l¹i hoµn toµn trong s¹ch, nghÜa lµ
nã ®−îc format d−íi hÖ ®iÒu hµnh hiÖn hµnh vµ h¬n n÷a ch−a cã ai söa ®æi, thay thÕ ®o¹n m
nµy c¶.
Lóc nµy, ®o¹n m sÏ dß t×m, vµ nÕu cã sÏ t¶i 2 file hÖ thèng vµo vïng nhí (nÕu lµ hÖ ®iÒu hµnh
MS-DOS, 2 file nµy sÏ cã tªn IO.SYS vµ MSDOS.SYS) råi mét lÇn n÷a trao quyÒn ®iÒu khiÓn.
Lóc nµy, CONFIG.SYS (nÕu cã) sÏ ®−îc ®äc vµo vµ tiÕn hµnh khëi t¹o c¸c device driver, ®Þnh
buffer file cho c¸c file.... cuèi cïng COMMAND.COM sÏ ®−îc gäi (nÕu kh«ng cã lÖnh
SHELL trong CONFIG.SYS) ®Ó råi dÊu nh¾c A:\> quen thuéc xuÊt hiÖn trªn mµn h×nh.
Lîi dông kÏ hë ®Çu tiªn nµy, B - virus sÏ tÊn c«ng vµo Boot sector, nghÜa lµ nã sÏ thay mét
Boot sector chuÈn b»ng mét ®o¹n m virus, quyÒn ®iÒu khiÓn lóc nµy sÏ ®−îc trao cho virus
6
www.updatesofts.com
tr−íc khi Boot record nhËn quyÒn ®iÒu khiÓn råi sau ®ã mäi chuyÖn vÉn tiÕn hµnh mét c¸ch
b×nh th−êng cho ®Õn khi...
Do ®Æc ®iÓm lªn tr−íc c¶ hÖ ®iÒu hµnh, virus ph¶i tù lµm hÕt mäi chuyÖn. Vµ v× vËy ®iÒu nµy
còng kh«ng ph¶i lµ dÔ dµng víi mét kÝch th−íc ch−¬ng tr×nh nhá bÐ (nÕu kh«ng tin b¹n cã thÓ
thö ®Þnh vÞ vµ ph©n tÝch FAT mµ kh«ng dïng ®Õn bÊt k× mét th«ng tin nµo tõ DOS xem)
2/ F - virus:
Sau khi COMMAND.COM ®−îc gäi, lóc nµy nã sÏ t×m file AUTO.EXEC.BAT ®Ó thi hµnh
(nÕu cã) vµ sau cïng dÊu nh¾c sÏ xuÊt hiÖn ®Ó chê nhËn lÖnh. TÊt nhiªn kh«ng ai dïng nh÷ng
lÖnh néi tró cña DOS ®Ó thi hµnh (trõ nh÷ng ng−êi b¾t ®Çu häc hÖ ®iÒu hµnh DOS). Th«ng
th−êng, ng−êi ta sÏ thi hµnh mét file nµo ®ã. §¬n gi¶n nhÊt lµ anh ta muèn thi hµnh phÇn mÒm
Foxbase ch¼ng h¹n b»ng c¸ch ®¸nh tªn Mfoxplus ë dÊu nh¾c ®îi lÖnh cña DOS vµ bÊm phÝm
Enter. Lóc nµy DOS sÏ t×m mét file cã tªn Mfoxplus.EXE. May m¾n thay file nµy ® ®−îc t×m
thÊy, DOS b¾t ®Çu tæ chøc l¹i vïng nhí, t¶i nã lªn råi trao quyÒn ®iÒu khiÓn mµ kh«ng mét
chót b¨n kho¨n xem nã ®Þnh lµm c¸i g× vµ cã nguy hiÓm kh«ng?
May thay, kÏ hë thø hai nµy còng bÞ bá qua mµ kh«ng mét ai g©y phiÒn phøc g×. Sau khi thi
hµnh xong anh ta cã thÓ trë vÒ dÊu nh¾c cña hÖ ®iÒu hµnh mét c¸ch an toµn.
Thùc chÊt, kÏ hë thø hai nµy còng ®−îc virus tËn dông. §iÒu g× sÏ x¶y ra nÕu quyÒn ®iÒu khiÓn
thay v× ®−îc trao cho file l¹i rÏ nh¸nh sang cho mét kÎ l¹ mÆt sèng ‘kÝ sinh’ lªn file? §iÒu nµy
chØ cã... virus míi biÕt ®−îc vµ tÊt nhiªn sau ®ã, khi kÕt qu¶ ph¸ ho¹i còng ® râ rµng th×
ng−êi sö dông còng... biÕt.
éi t¹i cña hÖ ®iÒu hµnh mµ ta ch−a ®−îc biÕt.
Qui −íc:
+ C¸c sè trong cuèn s¸ch nµy ®−îc ngÇm hiÓu d−íi d¹ng thËp lôc h¬n lµ thËp ph©n nÕu
kh«ng ghi râ d¹ng.
+ C¸c ch−¬ng tr×nh virus ®−îc minh häa hÇu hÕt ®−îc Unassembler b»ng phÇn mÒm D68.
7
®Üa - s¬ l−îc vÒ ®Üa
Ch−¬ng nµy kh«ng nh»m môc ®Ých kh¶o s¸t t−êng tËn tõng cÊu tróc vËt lÝ còng nh− logic mµ
chØ ®¬n gi¶n nh»m cung cÊp cho ®éc gi¶ mét sè th«ng tin thËt cÇn thiÕt, tiÖn cho viÖc ph©n tÝch
B-virus trong ch−¬ng tiÕp theo. Dï vËy, vÉn cã mét sè th«ng tin bæ Ých cho viÖc tham kh¶o.
I - CÊu Tróc VËt LÝ.
CÊu tróc ®Üa - dï vËt lÝ hay logic, trong thùc tÕ Ýt ®−îc ai ®Ò cËp ®Õn v× møc ®é phøc t¹p, nhÊt
lµ ®Üa cøng. Tuy nhiªn, nh÷ng kh¸i niÖm c¬ b¶n nhÊt l¹i v« cïng ®¬n gi¶n.
C¸c lo¹i ®Üa (c¶ ®Üa cøng lÉn ®Üa mÒm) ®Òu dùa vµo hiÖn t−îng tõ hãa ®Ó chøa d÷ liÖu: ®Çu tõ
®äc ghi sÏ tõ hãa nh÷ng phÇn tö cùc nhá trªn bÒ mÆt, mçi phÇn tö di chuyÓn qua ®Çu tõ sÏ bÞ
tõ hãa. Do h×nh d¹ng ban ®Çu cña ®Üa lµ h×nh trßn nªn nhiÒu ng−êi lÇm t−ëng ®©y lµ h×nh d¹ng
b¾t buéc, thùc ra, b¹n cã thÓ t¹o ra mét ®Üa víi h×nh d¹ng bÊt k×, miÔn sao tån t¹i mét æ ®Üa cho
phÐp b¹n truy xuÊt nh÷ng th«ng tin trªn ®ã.
Kh¸c víi trªn b¨ng tõ, trªn ®Üa chóng ta sÏ ghi d÷ liÖu d−íi d¹ng rêi r¹c (hoÆc sÏ mang gi¸ trÞ
tèi ®a lµ 1 hoÆc mang gi¸ trÞ tèi thiÓu lµ 0) . C¸ch thÓ hiÖn nh− thÕ ®−îc gäi lµ digital.
Chóng ta sÏ b¾t ®Çu víi kh¸i niÖm Track.
1/ Track: NÕu b¹n ®Æt mét c©y bót cho lªn mét ®Üa h¸t ®ang xoay. §−êng bót ch× sÏ t¹o trªn
thµnh ®Üa mét h×nh trßn. Vµ b¹n cø viÖc coi r»ng ®Üa lµ mét ®Üa mÒm, cßn ®Çu bót ch× lµ ®Çu tõ
®äc ghi. §−êng do c©y bót ch× t¹o nªn b©y giê cã tªn lµ Track. Do mét Track chØ lµ mét h×nh
trßn chiÕm mét phÇn rÊt nhá, nªn trªn mét ®Üa, ta cã thÓ t¹o nªn nhiÒu h×nh trßn ®ång t©m ®Ó
cã ®−îc nhiÒu Track.
2/ Side: BÊt mét ®Üa mÒm nµo còng cã hai mÆt (Side), do ®ã, kh«ng ai b¾t buéc chóng ta ph¶i
sö dông mét mÆt ®Üa (mÆc dï DOS ® lµm ®iÒu nµy, nh−ng sau ®ã, nã còng söa sai). Ghi d÷
liÖu lªn c¶ hai mÆt ®Üa râ rµng mang l¹i tÝnh king tÕ h¬n v× kh¶ chøa d÷ liÖu cña ®Üa t¨ng lªn
gÊp ®«i mµ kh«ng cÇn tèn thªm mét æ ®Üa thø hai. §¬n gi¶n lµ ®Æt thªm mét ®Çu ®äc thø hai ë
phÝa bªn kia ®Ó t¹o thµnh mét ‘gäng k×m’. Hai mÆt ®−îc ®¸nh sè lÇn l−ît lµ mÆt 1 vµ mÆt 0.
3/ Cylinder: Râ rµng, mét thuËn lîi thø hai cña ®Üa hai mÆt: d÷ liÖu cã thÓ ghi hai lÇn nhanh
h¬n tr−íc khi ®Çu ®äc chuyÓn sang Track míi. D÷ liÖu ®Çu tiªn cã thÓ ghi lªn Track cña mÆt
bªn nay råi sau ®ã cïng mét Track nh− thÕ nh−ng ë mÆt bªn kia, cuèi cung míi chuyÓn sang
Track kh¸c. Mét cÆp Track n»m ®èi xøng nh− thÕ ®−îc tham chiÕu ®Õn nh− mét phÇn tö duy
nhÊt Cylinder.
§Ó thuËn lîi cho viÖc tham chiÕu, Track vµ Cylinder ®−îc ®¸nh sè. Track ë ngoµi cïng ®−îc
®¸nh sè lµ Track 0. Track ë mÆt trªn ngoµi cïng lµ Track 0, Side 0; Track ë mÆt d−íi lµ Track
0 Side 1. Nh÷ng Track 0 nh− thÕ ®−îc gäi chung lµ Cylinder 0. B¹n ch¾c ® tõng nghe nãi ®Üa
mÒm 360 Kb, nh÷ng ®Üa mÒm lo¹i nh− thÕ cã 80 Track ®−îc ®¸nh sè tõ 0 ®Õn 79. Th«ng
th−êng, viÖc ®¸nh sè trªn m¸y tÝnh b¾t ®Çu tõ 0 h¬n lµ tõ 1, song vÉn cã ngo¹i lÖ khi Sector b¾t
®Çu ®¸nh sè tõ 1 vµ Cluster ®−îc ®¸nh sè b¾t ®Çu tõ 2 mµ chóng ra sÏ xÐt sau.
§èi víi ®Üa cøng, mét m« h×nh ®¬n gi¶n lµ c¸c ®Üa mÒm ®−îc xÕp song song víi nhau
thµnh h×nh trô. §Üa trªn cïng lµ Side 0, ®¸y cña nã lµ Side 1 ®Üa thø hai cã hai mÆt lÇn l−ît lµ
Side 2 vµ 3.... TËp hîp nh÷ng track 0 ®−îc tham kh¶o d−íi tªn gäi Cylinder 0. TÊt nhiªn sè
®Çu ®äc còng sÏ t¨ng theo. Khèi l−îng d÷ liÖu trªn mét track trªn ®Üa cøng còng thay ®æi tïy
thuéc tõng m¸y, tuy nhiªn, th−êng tõ 8Kb ®Õn 12Kb trªn mét track.
www.updatesofts.com
4/ Sector: MÆc dï cã thÓ ®äc/ghi d÷ liÖu lªn ®Üa mét lóc 8 ®Õn 12 Kb, nh−ng trong thùc tÕ,
kh«ng ai d¸m dïng ®Õn mét khèi l−îng lín ®Õn nh− thÕ. Bé ®iÒu khiÓn ®Üa th−êng ®−îc thiÕt
kÕ ®Ó cã thÓ ®äc vµ ghi mét lÇn chØ tõng ph©n ®o¹n cña Track. Sè byte trong mét ph©n ®o¹n,
®−îc gäi lµ Sector, phô thuéc vµo phÇn cøng mµ cña bé ®iÒu khiÓn ®Üa vµ vµo hÖ ®iÒu hµnh:
c¸c nhµ thiÕt kÕ sÏ t¹o nh÷ng kÝch th−íc Sector kh¸c nhau vµ hÖ ®iÒu hµnh sÏ chän mét trong
nh÷ng kÝch th−íc nµy. Th«ng th−êng, c¸c kÝch th−íc nµy lµ 128, 256, vµ 1024 byte. §èi víi hÖ
®iÒu hµnh DOS, kÝch th−íc ®−îc chän lµ 512 byte cho mçi Sector víi tÊt c¶ c¸c lo¹i ®Üa.
Trªn ®Üa mÒm 360 Kb, mçi Track cã thÓ ®¹t tíi 10 Sector, tuy nhiªn, v× vÊn ®Ò an toµn d÷ liÖu,
DOS chØ chän 9 Sector cho mçi Track. ChÝnh v× ®iÒu nµy, sÏ thÊy mét ®Üa 40 Track sÏ cã:
40Track * 2Side * 9Sector 8 512byte = 360 Kb.
§èi víi ®Üa cøng, mËt ®é Track trªn mét inch cã thÓ ®¹t ®Õn 600 Track/inch, do ®ã kh¶ n¨ng
l−u tr÷ d÷ kiÖu cña ®Üa cøng lín h¬n ®Üa mÒm rÊt nhiÒu.
Lóc nµy, ®Ó tham chiÕu, kh«ng nh÷ng chóng ta ph¶i chØ ra mÆt (Side) vµ Track mµ cßn ph¶i
chØ ra sè Sector nµo trong Track ®ã.
5/ §¸nh ®Þa chØ Sector: Khi chóng ta ® ®¹t ®Õn Track cÇn ®äc/ghi, lµm thÕ nµo ®Ó cã thÓ
nhËn ra Sector cÇn t×m. Cã hai c¸ch ®Ó ®Þnh vÞ Sector, ®ã lµ :
+ §¸nh sè Sector b»ng ph−¬ng ph¸p cøng (Hard sectoring): Nh÷ng lç ®Òu nhau sÏ ®−îc
bÊm xung quanh ®Üa vµ mçi lç nh− thÕ cã ý nghÜa ®¸nh dÊu sù b¾t ®Çu mét Sector. Ph−¬ng
ph¸p nµy tá ra kh«ng cßn hiÖu nghiÖm khi tèc ®é truy xuÊt ®Üa ngµy cµng t¨ng.
+ §¸nh sè Sector mÒm (Soft sectoring): Ph−¬ng ph¸p nµy m hãa ®Þa chØ cña Sector thµnh d÷
liÖu cña Sector ®ã vµ ®−îc g¾n vµo tr−íc mçi Sector. V× Sector ®−îc ®¸nh sè tuÇn tù xung
quanh Track nªn ®Þa chØ cña nã ®¬n gi¶n lµ c¸c sè liªn tiÕp xung quanh Track (nh−ng ®èi víi
mét sè ®Üa ®−îc thiÕt kÕ chèng sao chÐp th× ®iÒu nµy kh¸c).
HiÖn nay, ph−¬ng ph¸p ®¸nh sè mÒm ®−îc dïng réng ri. Víi ph−¬ng ph¸p nµy, tr−íc khi ®Üa
®−îc dïng, ®Þa chØ cña Sector ph¶i ®−îc ghi vµo Sector (qu¸ tr×nh nµy ®−îc thùc hiÖn b»ng
viÖc Format ®Üa). §Þa chØ Sector nµy thùc ra chØ lµ mét phÇn th«ng tin trong d÷ liÖu ë phÇn ®Çu
Sector, ngoµi ra cßn mét sè th«ng tin kh¸c mµ thiÕt nghÜ r»ng nªu ra ë ®©y chØ lµm rèi cho ®éc
gi¶.
6/ Format vËt lÝ: Ghi toµn bé ®Þa chØ Sector, c¸c th«ng tin kh¸c vµo phÇn ®Çu cña Sector ®−îc
gäi lµ format vËt lÝ hay format ë møc thÊp, v× viÖc nµy ®−îc thùc hiÖn chØ b»ng phÇn cøng cña
bé ®iÒu khiÓn ®Üa. Trong qu¸ tr×nh format, phÇn mÒm sÏ b¾t bé ®iÒu khiÓn ®Üa tiÕn hµnh format
víi nh÷ng th«ng sè vÒ kÝch th−íc cña mét Sector ... cßn c«ng viÖc cßn l¹i tù bé ®iÒu khiÓn ®Üa
ph¶i lµm.
Format vËt lÝ ph¶i ®−îc thùc hiÖn tr−íc khi ®Üa ®−îc ®−a vµo sö dông. Mét qu¸ tr×nh ®éc lËp
thø hai - format logic - còng ph¶i ®−îc thùc hiÖn ngay sau ®ã tr−íc khi ®Üa chuÈn bÞ chøa d÷
liÖu. ë møc nµy, tïy theo c¸ch tæ chøc cña tõng hÖ ®iÒu hµnh, nã sÏ chia ®Üa thµnh tõng vïng
t−¬ng øng.
Trong thùc tÕ, hÇu nh− kh«ng ai chó ý ®Õn vÉn ®Ò nµy v× ® cã lÖnh Format cña DOS. Tuy
nhiªn ®Ó gi¶i thÝch c«ng viÖc cô thÓ cña lÖnh nµy th× hÇu nh− Ýt ai quan t©m ®Õn. Cã thÓ gi¶i
thÝch nh− sau :
+ Víi ®Üa mÒm: mét ®Üa cho dï ® ®−îc format lÇn nµo hay ch−a ®Òu ®−îc ®èi xö “b×nh
®¼ng “nh− nhau, nghÜa lµ ®Çu tiªn DOS sÏ tiÕn hµnh forrmat vËt lÝ, sau ®ã sÏ lµ format logic
nh»m khëi t¹o c¸c vïng hÖ thèng vµ d÷ liÖu.
DÔ thÊy, ®èi víi mét ®Üa ® qua mét lÇn format, qu¸ tr×nh format vËt lÝ sÏ kh«ng cßn cÇn thiÕt,
trõ tr−êng hîp muèn format vËt lÝ, do ®ã nÕu chØ cã qu¸ tr×nh format logic sÏ lµm gi¶m thêi
gian format mét ®Üa. ý t−ëng nµy, thùc tÕ ® ®−îc c¸c phÇn mÒm chuyªn dông khai th¸c rÊt
kÜ. PCformat cña Central point, SafeFormat cña Norrton .... ®Òu cã nh÷ng option cho phÐp chØ
®Þnh t¸c vô nµy.
9
+ §èi víi ®Üa cøng: mäi ®Üa cøng tr−íc khi ®−a ra thÞ tr−êng ®Òu ® ®−îc format vËt lÝ vµ
do ®ã kh«ng cã mét lÝ do nµo ®Ó format l¹i nÕu kh«ng thÊy cÇn thiÕt. §èi víi tr−êng hîp nµy,
DOS kh«ng cÇn ph¶i format vËt lý mµ ®¬n gi¶n chØ tiÕn hµnh format logic. Trong tr−êng hîp
nµy, tèc ®é format trªn ®Üa cøng sÏ rÊt nhanh chø kh«ng × ¹ch nh− trªn ®Üa mÒm. Sau khi ®
qua format, ®Üa cña chóng ta giê ®©y ® s½n sµng chøa d÷ liÖu.
II - CÊu Tróc Logic.
ë phÇn trªn, ta ® cã ®Ò cËp ®Õn format logic, nh−ng l¹i kh«ng ®−a ra mét chi tiÕt nµo, sau ®©y
ta sÏ lÇn l−ît xÐt chi tiÕt ®Õn chóng. Râ rµng, ®èi víi mét ®Üa cã dung l−îng lín, viÖc qu¶n lÝ
d÷ liÖu nh− thÕ nµo cho hiÖu qu¶ vµ nhanh chãng lµ mét vÊn ®Ò phøc t¹p. Do ®ã, mçi hÖ ®iÒu
hµnh cÇn thiÕt ph¶i tæ chøc cho m×nh mét vµi cÊu tróc nµo ®ã gióp cho viÖc kiÓm so¸t ®Üa ®−îc
nhanh vµ chÝnh x¸c, cho biÕt phÇn nµo ® dïng ®Ó chøa d÷ liÖu, phÇn nµo cßn trèng .... C¸ch
ghi nhí nh÷ng cÊu tróc nh− thÕ lªn ®Üa ®−îc gäi lµ format logic ®Üa. Dï lµ lo¹i ®Üa nµo, DOS
vÉn tæ chøc ®Üa thµnh c¸c phÇn sau: Boot Sector, b¶ng FAT (file allocation table), Root
directory vµ phÇn d÷ liÖu (ba phÇn ®Çu ®«i khi ®−îc gäi d−íi tªn Vïng hÖ thèng).
Trªn ®Üa cøng, víi dung l−îng qu¸ lín, cã thÓ chia thµnh tõng phÇn kh¸c nhau ®−îc gäi lµ
Partition, do ®ã cßn ph¶i thªm mét phÇn thø 5 Partition table. Sau ®©y, chóng ta sÏ lÇn l−ît
kh¶o s¸t tõng phÇn mét.
1/ Boot Sector: Lu«n chiÕm Sector ®Çu tiªn trªn Track 0, Side 1 cña ®Üa, tuy vËy, ®iÒu nµy
còng chØ tuyÖt ®èi ®óng trªn c¸c ®Üa mÒm, cßn ®èi víi ®Üa cøng, vÞ trÝ nµy ph¶i nh−êng l¹i cho
Partition table.
Boot sector nµy sÏ ®−îc ®äc vµo ®Þa chØ 0:07C00 sau khi m¸y thùc hiÖn xong qu¸ tr×nh POST.
QuyÒn ®iÒu khiÓn sÏ ®−îc trao l¹i cho ®o¹n m n»m trong Boot sector. §o¹n m nµy cã nhiÖm
vô t¶i c¸c file hÖ thèng vµo nÕu cã. Ngoµi ra, Boot sector cßn chøa mét b¶ng tham sè quan
träng ®Õn cÊu tróc ®Üa, b¶ng nµy ®−îc ghi vµo trong qu¸ tr×nh format logic ®Üa vµ ngay c¶ ®èi
víi nh÷ng ®Üa kh«ng ph¶i lµ ®Üa boot ®−îc .
a. CÊu tróc cña b¶ng tham sè ®Üa BPB (Bios Parameter Block): B¶ng tham sè nµy ë offset 0B
cña Boot sector vµ cã cÊu tróc sau :
offset Size Néi dung
+0 3 JMP xx:xx LÖnh nh¶y gÇn ®Õn ®Çu ®o¹n m boot
+3 8 Tªn c«ng ty hay version.
+0Bh 2 SectSiz Sè byte 1 sector <--------- Start of BPB.
+DH 1 ClustSiz Sè sector mçi cluster.
+Eh 2 ResSecs Sè sector dµnh riªng (sector tr−íc FAT).
+10h 1 FatCnt Sè b¶ng FAT.
+11h 2 RootSiz Sè ®Çu vµo tèi ®a cho Root (32 byte cho mçi ®Çu
vµo).
+13h 2 TotSecs Tæng sè sector trªn ®Üa (hay partition).
+15h 1 Media Media descriptor ®Üa (gièng nh− byte ®Çu b¶ng
FAT.
+16h 2 FatSize Sè l−îng sector cho mét b¶ng FAT
<----------- end of BPB .
+18h 2 TrkSecs Sè sector trªn mçi track.
+1Ah 2 HeadCnt Sè ®Çu ®äc ghi.
+1Ch 2 HindSec Sè sector dÊu mÆt (®−îc dïng trong cÊu tróc
10
www.updatesofts.com
partition).
+1Eh §Çu ®o¹n m trong Boot sector.
+1Ch 4 HindSec Sè sector dÊu mÆt (® ®−îc ®iÒu chØnh lªn sè 32 bit)
+20h 4 TotSecs Tæng sè sector trªn ®Üa nÕu gi¸ trÞ ë offset 13h b»ng
0.
+24h 1 PhsDsk Sè ®Üa vËt lÝ (0: ®Üa mÒm, 80h: ®Üa cøng)
+25h 1 Resever Dµnh riªng.
+26h 1 Dos4_ID KÝ hiÖu nhËn diÖn cña DOS 4.xx (cã gi¸ trÞ 29h).
+27h 4 Serial Mét sè nhÞ ph©n 32 bit cho biÕt Serial number.
+2Bh Bh Volume Volume label.
+36h 8 Reserve Dµnh riªng.
+3Eh §Çu ®o¹n m ch−¬ng tr×nh.
§èi víi DOS 4.xx, do sè l−îng sector qu¶n lÝ ®−îc kh«ng cßn n»m trong giíi h¹n sè 16 bit, do
®ã gi¸ trÞ trong offset 13h ® trë nªn ‘chËt hÑp’. B¾t ®Çu tõ DOS 4.xx, cÊu tróc cña b¶ng cã
mét sè söa ®æi vµ bæ xung nho nhá, tuy vËy, vÉn kh«ng lµm mÊt ®i cÊu tróc tr−íc ®ã. ë ®©y
chØ cã mét ®iÓm cÇn l−u ý lµ gi¸ trÞ tæng sè sector trªn ®Üa, nÕu sè sector vÉn cßn lµ mét sè 16
bit, vïng ë offset 13h vÉn cßn dïng ®Õn, trong tr−êng hîp ng−îc l¹i, vïng nµy ph¶i ®−îc g¸n
lµ 0 vµ gi¸ trÞ míi ®−îc l−u gi÷ t¹i offset 20h (dÔ thÊy c¸c ®Üa mÒm vÉn cã néi dung nh− tr−íc
®©y).
b. §o¹n m: do Boot sector chØ chiÕm ®óng mét sector, nghÜa lµ chØ cã ®óng 512 byte, trõ ®i
cho b¶ng tham sè BPB, phÇn cßn l¹i vÉn cßn qu¸ Ýt cho mét ch−¬ng tr×nh tù xoay xë lµm ®ñ
mäi viÖc. C¸c ®o¹n m sau d−íi DOS ®Òu lµm c¸c c«ng viÖc sau ®©y:
+ Thay l¹i b¶ng tham sè ®Üa mÒm (ng¾t 1Eh).
+ §Þnh vÞ vµ ®äc sector ®Çu tiªn cña Root vµ ®Þa chØ 0:0500h.
+ Dß t×m vµ ®äc hai file hÖ thèng vµo nÕu cã.
Cã thÓ biÓu diÔn b»ng l−u ®å sau
Thay ng¾t 1Eh
§äc sector root vµo
? SYS ------------ > Non system disk
N¹p file hÖ thèng vµo
JMP FAR 070:0
2/ FAT (file allocation table): §©y lµ mét trong hai cÊu tróc quan träng nhÊt (cÊu tróc thø hai
lµ Root) mµ DOS khëi t¹o trong qu¸ tr×nh format logic ®Üa. CÊu tróc nµy dïng ®Ó qu¶n lÝ file
trªn ®Üa còng nh− cho biÕt sector nµo ® háng. ë møc nµy DOS còng ®−a ra mét sè kh¸i niÖm
míi :
a. Cluster: Khi ®Üa ®−îc format fogic, ®¬n vÞ nhá nhÊt trªn ®Üa mµ DOS cã thÓ qu¶n lÝ ®−îc lµ
sector (theo DOS tù qui ®Þnh - kÝch th−íc cña mét sector còng ® cè ®Þnh lµ 512 byte). Nh−
thÕ, DOS cã thÓ qu¶n lÝ tõng sector mét xem nã cßn dïng ®−îc hay kh«ng. Tuy nhiªn, mét ®Üa
cã dung l−îng cao (th−êng lµ ®Üa cøng), sè sector qu¸ lín kh«ng thÓ qu¶n lÝ theo c¸ch nµy mµ
thay vµo ®ã, DOS ®−a ra mét kh¸i niÖm Cluster: lµ tËp hîp nhiÒu sector, do ®ã, thay v× qu¶n
qu¶n lÝ nhiÒu sector, DOS b©y giê chØ qu¶n lÝ trªn c¸c cluster. Râ rµng sè l−îng cluster sÏ
gi¶m ®i nhiÒu nÕu ta t¨ng sè l−îng sector cho mét cluster.
b. Kh¸i niÖm vÒ FAT: VÊn ®Ò phøc t¹p vµ then chèt cña viÖc qu¶n lÝ file trªn ®Üa lµ lµm sao
qu¶n lÝ ®−îc sù thay ®æi kÝch th−íc c¸c file. §©y lµ mét ®iÒu tÊt nhiªn v× khi lµm viÖc víi m¸y,
®ßi hái ta ph¶i truy xuÊt ®Õn file trªn ®Üa.
11
Gi¶ sö, cã mét file cã kÝch th−íc 2250 byte ®−îc chøa trªn ®Üa cã dung l−îng 1.2 Mb (®èi víi
lo¹i ®Üa nµy, mét cluster chØ lµ mét sector), ta ph¶i dïng tíi 5 cluster ®Ó chøa file nµy, 4 cluster
®Çu tiªn ® chøa 2048 byte, sector cßn l¹i chØ chøa 2250 - 2048 = 202 byte (v× râ rµng, ta
kh«ng thÓ ghi mét khèi nhá h¬n mét sector). TiÕp theo, file thø hai ®−îc ghi lªn 7 sector kÕ
®ã. B©y giê, vÊn ®Ò sÏ khã kh¨n nÕu ta muèn bæ xung thªm 460 byte vµo file ®Çu. Lµm thÕ nµo
cho tèi −u ? Râ rµng, ta chØ cã thÓ bæ xung vµo sector cuèi file mét thªm 512 - 202 = 310 byte,
nh− thÕ vÉn d− l¹i 460 - 310 = 150 byte mµ kh«ng biÕt ph¶i ®Ó vµo ®©u. Ghi vµo sector thø s¸u
ch¨ng ? Kh«ng thÓ ®−îc v× sector nµy ® ®−îc dµnh cho file thø hai råi. C¸ch gi¶i quyÕt t−ëng
chõng ®¬n gi¶n lµ dêi toµn bé file nµy xuèng mét sector . Tuy nhiªn, ®©y còng kh«ng ph¶i lµ
mét ph−¬ng ph¸p tèi −u v× nÕu file thø hai chiÕm ®Õn 1Mb. §Ó ghi thªm 150 byte mµ cÇn ph¶i
dêi (thùc chÊt lµ ph¶i ®äc/ghi l¹i) ®i 1Mb th× thËt lµ qu¸ tèn kÐm vµ kh«ng thiÕt thùc chót nµo.
Ph−¬ng ph¸p gi¶i quyÕt tèt nhÊt ® ®−îc DOS ®Ò nghÞ: dïng mét b¶ng l−u tr¹ng th¸i c¸c sector
(FAT) cho phÐp DOS biÕt ®−îc sector nµo cßn dïng ®−îc, sector nµo ® dïng ...... do ®ã, dÔ
t×m ®−îc mét sector nµo ®ã cßn trèng ®Ó ph©n bæ cho file míi.
Nh−ng ®Ó qu¶n lÝ nh÷ng sector nh− thÕ cÇn qu¸ nhiÒu byte cho FAT. Gi¶ sö mét ®Üa cøng cã
dung l−îng 32 Mb sÏ cã kho¶ng 64 Kb sector (32Mb/512byte). NÕu mét sector cÇn ph¶i tèn
®Õn 2 byte ®Ó qu¶n lÝ th× ph¶i mÊt 2*64=128Kb cho b¶ng FAT. ThÕ nh−ng, ®Ó tiÖn cho viÖc
truy xuÊt, phÇn lín FAT sÏ ®−îc t¶i vµo bé nhí trong, nh− thÕ kÝch th−íc qu¸ lín còng lµm
gi¶m ®i tèc ®é truy xuÊt. V× vËy, ®©y còng lµ lý do mµ DOS ® ®−a ra kh¸i niÖm cluster nh»m
gi¶m bít ®¸ng kÓ kÝch th−íc cña FAT.
Lµ mét s¶n phÈm cña DOS, hä cã toµn quyÒn ®Þnh ®o¹t ®Ó cã bao nhiªu sector cho mét
cluster, do vËy, sè nµy sÏ thay ®æi tuy thuéc vµo dung l−îng cña ®Üa sao cho tèi −u nhÊt. Víi
c¸c ®Üa mÒm, th−êng sè sector cho mét cluster tõ 1 ®Õn 2 sector, trªn ®Üa cøng, con sè nµy lµ 4
hay 8.
c. §¸nh sè sector - ®¸nh sè cluster: Nh− ta ® biÕt, bé ®iÒu khiÓn ®Üa tham chiÕu mét sector
trªn ®Üa th«ng qua 3 tham sè: Cylinder, Head, vµ Sector (v× vËy, ®«i khi nã cßn ®−îc biÕt
d−íi tªn gäi hÖ 3 trôc to¹ ®é). Tuy nhiªn, hÖ trôc nµy l¹i kh«ng thuËn lîi cho ng−êi sö dông v×
hä ch¼ng cÇn ph¶i biÕt cÊu tróc chi tiÕt cña ®Üa: gåm bao nhiªu Track, bao nhiªu head, còng
nh− bao nhiªu sector trªn mét Track ra sao. §Ó tr¸nh sù bÊt tiÖn nµy, DOS tiÕn hµnh ®Þnh vÞ d÷
liÖu trªn ®Üa chØ theo mét chiÒu: sector. DOS ®¬n gi¶n lµ ®¸nh sè sector lÇn l−ît b¾t ®Çu tõ
sector 1, Track 0, head 0 cho ®Õn hÕt sè sector trªn track nµy, råi chuyÓn sang sector 1 cña
Side 1. TÊt c¶ c¸c sector cña mét Cylinder sÏ ®−îc ®¸nh sè tuÇn tù tr−íc khi DOS chuyÓn sang
track kÕ. ViÖc ®¸nh sè nµy thùc chÊt còng nh»m tèi −u viÖc di chuyÓn ®Çu ®äc cña ®Üa, khi ®
hÕt sector trªn track nµy míi chuyÓn ®Çu ®äc sang track kÕ. (V× lÝ do nµy, mét sè phÇn mÒm ®
t×m c¸ch dån file l¹i trªn c¸c sector liªn tiÕp nh»m t¨ng tèc ®é truy xuÊt còng nh− kh¶ n¨ng
kh«i phôc file khi bÞ sù cè nh− SpeedDisk cña Norton Untility). C¸ch ®¸nh sè nh− vËy ®−îc
gäi lµ ®¸nh sè sector logic, kh¸c víi sector vËt lÝ, sector logic b¾t ®Çu ®Õm tõ 0.
Mét khi sector ® ®−îc ®¸nh sè, cluster còng ®−îc ®¸nh sè theo. Nh− ta ® biÕt: FAT chØ qu¶n
lÝ nh÷ng cluster ®Ó l−u chøa d÷ liÖu nªn cluster b¾t ®Çu ®−îc ®¸nh sè tõ nh÷ng sector ®Çu tiªn
cña phÇn d÷ liÖu. NÕu ®Üa ®−îc qui ®Þnh 2 sector cho mét cluster th× hai sector ®Çu tiªn cña
phÇn d÷ liÖu (phÇn b¾t ®Çu ngay sau Root) sÏ ®−îc ®¸nh sè lµ 2, hai sector kÕ tiÕp lµ cluster 3
vµ cø thÕ cho ®Õn hÕt.
V× vËy, nÕu mét ®Üa cã 15230 cluster cho phÇn d÷ liÖu th× sector cuèi cïng cña ®Üa sÏ ®−îc
®¸nh sè 15231.
d. Néi dung cña FAT: Mçi cluster trªn ®Üa ®−îc DOS qu¶n lÝ b»ng mét entry (®Çu vµo), hai
entry ®Çu tiªn ®−îc dïng ®Ó chøa th«ng tin ®Æc biÖt: byte nhËn d¹ng (®©y còng lµ lÝ do cluster
®−îc ®¸nh sè tõ 2), entry thø 3 chøa th«ng tin vÒ cluster 2, cø thÕ tiÕp tôc.... Khi format logic
®Üa, trong khi x©y dùng FAT, DOS sÏ lÇn l−ît tiÕn hµnh ®äc tõng sector lªn, nÕu gÆp lçi øng
víi cluster nµo, cluster ®ã sÏ ®−îc ®¸nh dÊu lµ háng.
Khi qu¶n lÝ file, lµm sao DOS cã thÓ biÕt nh÷ng cluster nµo lµ cña file nµo? RÊt ®¬n gi¶n: gi¸
trÞ entry cña cluster nµy chøa gi¸ trÞ lµ sè thø tù entry tiÕp theo nã, cø thÕ, c¸c cluster cña file
12
www.updatesofts.com
t¹o thµnh mét chuçi (chain) cho ®Õn khi gÆp dÊu hiÖu kÕt thóc. Tïy theo kÝch th−íc cña entry
lµ 12 hay 16 bit, gi¸ trÞ cña cluster cã thÓ biÕn thiªn theo b¶ng :
Gi¸ trÞ ý nghÜa
0 Cluster cßn trèng, cã thÓ ph©n bæ ®−îc.
(0)002-(F)FEF Cluster ®ang chøa d÷ liÖu cña mét file nµo ®ã
(0)002 gi¸ trÞ cña nã lµ sè cluster kÕ tiÕp trong chain
(F)FF0-(F)FF6 Dµnh riªng kh«ng dïng
(F)FF7 Cluster háng
(F)FF8-(F)FFF Cluster cuèi cïng cña chain
Mét vÝ dô nh»m minh häa chain trong FAT:
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
00 ID FF 03 04 05 FF 00 00 09 0A 0B 15 00 00 00 00
10 00 00 00 00 00 16 17 19 F7 1A 1B FF 00 00 00 00
Trong vÝ dô trªn, ‘entry’ 0 vµ 1 ®−îc dµnh riªng cho byte nh©n diÖn: FDh (®Üa 360Kb), gi¸ trÞ
cña cluster 2 trá ®Õn cluster 3, gi¸ trÞ cña cluster 3 trá ®Õn cluster 4 ... cho ®Õn khi cluster 5
chøa gi¸ trÞ lµ 0FFh cho biÕt ® lµ cuèi file, cluster 6 vµ 7 cã gi¸ trÞ 0 cho biÕt hai cluster nµy
ch−a dïng tíi, cã thÓ ph©n bæ nÕu cÇn. Cluster 18 cã gi¸ trÞ 0F7h cho biÕt ® ®¸nh dÊu bá. Tuy
nhiªn, ë ®©y l¹i xuÊt hiÖn mét c©u hái kh¸c: lµm sao x¸c ®Þnh cluster nµo b¾t ®Çu mét file?
(còng lµ ®Çu vµo mét chain) vµ kÝch th−íc thËt sù cña file (v× râ rµng sector cuèi cïng kh«ng
dïng hÕt). §iÒu nµy sÏ ®−îc DOS ®Ò cËp ®Õn trong cÊu tróc tiÕp theo - cÊu tróc Root.
e. Ph©n lo¹i FAT - §Þnh vÞ cluster: Gi¶ sö ta cã mét ®Üa 360 Kb, cã kho¶ng 720 sector, nÕu sö
dông 2 sector cho mét cluster, vµ nh− thÕ tèi ®a còng chØ 720/2=360 cluster. §Ó qu¶n lÝ sè
l−îng entry kh«ng lín l¾m nµy, ta ph¶i cÇn ®Õn mét entry bao nhiªu bÝt ?
Râ rµng, víi kÝch th−íc mét byte, ta kh«ng thÓ qu¶n lÝ ®−îc v× gi¸ trÞ tèi ®a mµ mét byte cã
thÓ biÓu diÔn ®−îc lªn tíi tèi ®a 255 < 360. Nh−ng nÕu dïng mét word ®Ó biÓu diÔn th× l¹i qu¸
thõa v× gi¸ trÞ tèi ®a cña nã lªn tíi 65535. TÊt nhiªn lµ qu¸ lín so víi 360 cluster mµ ta ®Þnh
biÓu diÔn. C¸ch tèt nhÊt lµ lÊy kÝch th−íc trung gian: 12bit (mét byte r−ìi). Râ rµng, kÝch
th−íc nµy rÊt xa l¹ víi mäi ng−êi, kÓ c¶ nh÷ng th¶o ch−¬ng viªn hÖ thèng v× chØ cã kh¸i niÖm
byte, bit, word hay thËm chÝ double word mµ th«i. Dï vËy, kh¸i niÖm FAT12 bit nµy vÉn ®−îc
dïng cho ®Õn nay do tÝnh hiÖu qu¶ cña nã trªn c¸c ®Üa cã dung l−îng nhá. Víi 12 bit cã thÓ
qu¶n lÝ tèi ®a 4095 cluster, sè nµy kh«ng ph¶i lµ nhá.
Tuy nhiªn, víi sù ra ®êi cña c¸c ®Üa cøng dung l−îng cao: 20Mb, 40 Mb .... ® lµm xuÊt hiÖn
nh−îc ®iÓm cña FAT12: chØ qu¶n lÝ tèi ®a 4095 cluster, do ®ã víi sè l−îng sector trªn ®Üa
cµng nhiÒu th× chØ cã mét c¸ch gi¶i quyÕt lµ t¨ng sè l−îng sector trong mét cluster. Nh−ng
c¸ch nµy còng kh«ng ph¶i lµ tèi −u v× sè byte cÊp ph¸t thõa cho 1 file sÏ t¨ng lªn nhanh khi sè
sector trong cluster t¨ng lªn. V× lÝ do nµy, FAT 16 bit ® ra ®êi vµ sè l−îng cluster qu¶n lÝ
®−îc ® t¨ng lªn 65535 cluster.
Víi sù xuÊt hiÖn cña hai lo¹i FAT, vÊn ®Ò l¹i trë nªn phøc t¹p: c¸ch ®Þnh vÞ hai lo¹i FAT nµy
hoµn toµn kh¸c nhau. Tuy vËy cã thÓ tÝnh to¸n nh− sau :
* §èi víi FAT 16 bit: mçi entry cña cluster chiÕm hai byte nªn vÞ trÝ cña cluster tiÕp theo sÏ
b»ng gi¸ trÞ cluster hiÖn thêi nh©n hai.
* §èi víi FAT 12 bit: v× mçi entry chiÕm 1.5 byte nªn vÞ trÝ cña cluster tiÕp theo trªn FAT
b»ng gi¸ trÞ cluster hiÖn thêi nh©n víi 1.5.
Nh−ng gi¸ trÞ tiÕp theo ph¶i ®−îc tÝnh l¹i v× nã chØ chiÕm 12 bit trong khi gi¸ trÞ lÊy ra lµ 1
word (trong c¸c lÖnh m¸y, rÊt tiÕc kh«ng cã lÖnh nµo cho phÐp lÊy mét gi¸ trÞ 12 bit c¶). C¸ch
gi¶i quyÕt nh− sau :
+ NÕu sè thø tù sè cluster lµ ch½n, gi¸ trÞ thùc tÕ lµ 12 bit thÊp.
13
+ NÕu sè thø tù sè cluster lµ lÎ, gi¸ trÞ thùc tÕ lµ 12 bit cao.
TÊt c¶ c¸c ®Üa mÒm vµ nh÷ng ®Üa cøng cã dung l−îng d−íi 12Mb vÉn cßn dïng FAT 12 bit.
§o¹n m sau minh häa c¸ch ®Þnh vÞ cluster:
LocateCluster proc near
;Chøc n¨ng: tiÕn hµnh ®Þnh gi¸ trÞ cña cluster kÕ trong FAT_Buffer ®−a vµo sè cluster vµ ;lo¹i
FAT trong biÕn FAT_type, bit 2 cña biÕn nµy = 1 cho biÕt lo¹i FAT lµ 16 bit.
;Vµo SI = sè cluster ®−a vµo.
;Ra DX = sè cluster tiÕp theo.
mov AX, 3
test FAT_type ;FAT thuéc lo¹i nµo
je FAT_12 ;NÕu 12bit sÏ nh©n víi 3
inc AX ;NÕu 16bit sÏ nh©n víi 4
FAT_12:
mul SI
shr AX, 1 ;Chia l¹i cho 2 ®Ó ra ®óng sè
mov BX, AX
mov DX, FAT_buffer[BX] ;DX=gi¸ trÞ cña cluster kÕ
test FAT_type, 4 ;FAT thuéc lo¹i nµo?
jne FAT_16 ;NÕu lµ FAT 12 sÏ tÝnh tiÕp
mov ch, 4
test SI, 1 ;Cluster ®−a vµo lµ ch½n hay lÎ
je chan
shr DX, CL ;ChuyÓn 4 bit cao thµnh thÊp
Chan:
and DH, 0Fh ;T¾t 4 bit cao
FAT_16:
ret
Locate_cluster endp
(TrÝch PingPong virus).
3/ Root directory: Lµ cÊu tróc bæ xung cho FAT vµ n»m ngay sau FAT. NÕu FAT nh»m môc
®Ých qu¶n lÝ ë møc thÊp: tõng sector, xem nã cßn dïng ®−îc hay kh«ng, ph©n phèi nÕu cÇn th×
Root directory kh«ng cÇn quan t©m mµ chØ nh»m qu¶n lÝ file, mét kh¸i niÖm cao h¬n, mµ
kh«ng cÇn biÕt nã gåm nh÷ng sector nµo. Root cã nhiÖm vô l−u gi÷ th«ng tin vÒ file trªn ®Üa.
Mçi file ®−îc ®Æc tr−ng bëi mét ®Çu vµo trong Root Dir. Kh«ng nh− FAT, mçi entry cña Root
Dir cã kÝch th−íc x¸c ®Þnh 32 byte l−u gi÷ nh÷ng th«ng tin sau :
Offset K/th−íc Néi dung
+0 8 Tªn file, ®−îc canh tr¸i
+8 3 PhÇn më réng, ®−îc canh tr¸i
+0Bh 1 Thuéc tÝnh file
+0Ch 0Ah Dµnh riªng
+16h 2 Thêi gian t¹o hay bæ xung sau cïng
18h 2 Ngµy t¹o hay bæ xung sau cïng
1AH 2 Sè cluster b¾t ®Çu cña file trong FAT
1Ch 4 KÝch th−íc file (byte)
14
www.updatesofts.com
Thuéc tÝnh file: m« t¶ thuéc tÝnh mµ file sÏ mang, nh÷ng thuéc tÝnh nµy lµ Read Only,
Hidden, System, Volume, SubDir vµ Attrive. C¸c bit biÓu diÔn nh÷ng thuéc tÝnh nµy nh− sau :
byte thuéc tÝnh:
+ bit 0 = 1: file chØ ®äc.
+ bit 1 = 1: file Èn.
+ bit 2 = 1: file hÖ thèng.
+ bit 3 = 1: Volume label
+ bit 4 = 1: SubDir.
+ bit 5 = 1: file ch−a ®−îc backup.
Entry ®Çu file trong FAT còng ®−îc l−u gi÷ t¹i ®©y cho phÐp t¨ng tèc ®é tÝnh to¸n vµ truy xuÊt
file còng nh− kÝch th−íc file cho biÕt kÝch th−íc cô thÓ cña tõng file h¬n lµ sè cluster qu¸ trõu
t−îng.
Néi dung cña th− môc gèc: cã thÓ lµ mét file hay mét th− môc con (SubDir). Ta sÏ ®i s©u vµo
sù kh¸c nhau gi÷a th− môc gèc vµ th− môc con. Th− môc gèc lu«n n»m trong vïng hÖ thèng,
ngay sau FAT, kÝch th−íc (sè sector) dµnh cho Root ®−îc t¹o ra trong khi format logic vµ
kh«ng thay ®æi trong suèt qu¸ tr×nh sö dông, do ®ã, sè entry trong Root bÞ giíi h¹n. Ng−îc l¹i,
SubDir l¹i n»m trong vïng d÷ liÖu nªn kÝch th−íc kh«ng bÞ h¹n chÕ, nã cã thÓ ®−îc t¹o ra,
thªm bít, hñy .... nh− mét file. Thùc chÊt, SubDir lµ cÊu tróc ‘lai’ gi÷a file vµ Root: nã cã thÓ
®−îc ph©n phèi cluster ®Ó chøa d÷ liÖu, t¨ng gi¶m kÝch th−íc nh− file, tuy nhiªn, d÷ liÖu cña
nã l¹i lµ c¸c entry nh− Root Dir. ChÝnh cÊu tróc cña SubDir lµm cho cÊu tróc toµn th− môc nãi
chung kh«ng bÞ h¹n chÕ (t©t nhiªn, còng bÞ h¹n chÕ do dung l−îng ®Üa) t¹o thµnh mét cÊu tróc
c©y cho phÐp thi hµnh gi¶i thuËt truy xuÊt trªn c©y gän vµ ®Çy hiÖu qu¶.
Còng nh− nh÷ng entry cña FAT, entry cña Root còng mang nh÷ng gi¸ trÞ nµo ®ã ®Ó chØ ra
entry nµy hoÆc ® dïng, cßn trèng hay ® bá ®i .... KÝ tù ®Çu tiªn cña tªn file ph¶n ¸nh ®iÒu
nµy. NÕu mét entry b¾t ®Çu b»ng byte cã gi¸ trÞ:
0: entry cßn trèng ch−a ®−îc dïng, do ®ã, cho phÐp DOS biÕt nã ® ®¹t tíi entry cuèi cïng.
‘.’ (dÊu chÊm): kÝ tù nµy ë byte ®Çu cho biÕt entry nµy dµnh riªng cho DOS, ®−îc dïng trong
cÊu tróc th− môc con.
0E5: kÝ tù sigma nµy th«ng b¸o cho DOS biÕt entry nµy cña mét file bÞ xãa. Khi xãa mét file,
thùc chÊt DOS chØ d¸nh dÊu byte ®Çu tiªn lµ 05E vµ xãa chain cña file trong FAT. Do ®ã, cã
thÓ kh«i phôc l¹i file nÕu ch−a bÞ file kh¸c ®Ì lªn.
Mét kÝ tù bÊt k×: lµ tªn mét file, entry nµy ®ang l−u gi÷ th«ng tin vÒ mét file nµo ®ã.
4/ CÊu tróc Partition table: Gi¸ mét ®Üa cøng t−¬ng ®èi m¾c, mÆt kh¸c, dung l−îng ®Üa qu¸
lín còng lµm DOS kh«ng qu¶n lÝ næi (chØ tõ DOS 3.4 trë ®i, míi cã kh¶ n¨ng qu¶n lÝ trªn
32Mb), vµ nhÊt lµ muèn t¹o mét ®Üa víi nhiÒu hÖ ®iÒu hµnh kh¸c nhau, do ®ã ®ßi hái ph¶i chia
®Üa cøng thµnh tõng phÇn gäi lµ Partition.
C¸c cÊu tróc ®Üa mµ ta tr×nh bµy trªn chØ hoµn toµn ®óng ®èi víi ®Üa mÒm, cßn ®Üa cøng, nÕu
® ®−îc chia thµnh c¸c Partition th× cÊu tróc trªn vÉn ®óng trong c¸c Partition mµ DOS qu¶n lÝ.
C¸c th«ng tin vÒ ®iÓm b¾t ®Çu vµ kÝch th−íc cña tõng partition ®−îc ph¶n ¸nh trong Partition
table. Partition table nµy lu«n t×m thÊy ë sector ®Çu tiªn trªn ®Üa (track 0, Side 0, sector 1) thay
v× Boot sector (cßn ®−îc gäi d−íi tªn Master boot).
Nh− ® biÕt, sector nµy sÏ ®−îc ®äc lªn ®Çu tiªn vµ trao quyÒn ®iÒu khiÓn, do ®ã, ngoµi
Partition table, Master boot cßn chøa ®o¹n m cho phÐp x¸c ®Þnh partition nµo ®ang ho¹t ®éng
vµ chØ duy nhÊt cã mét partition ho¹t ®éng mµ th«i.
Partition table n»m ë offset 01BE, mçi partition ®−îc ®Æc tr−ng b»ng mét entry 16 byte ph¶n
¸nh nh÷ng th«ng tin vÒ nã. Mçi entry cã cÊu tróc nh− sau:
Offset Size Néi dung
15
+0 1 Cê hiÖu boot: 0=kh«ng active; 80h=active
+1 1 Sè head b¾t ®Çu
+2 2 Sè sector vµ Cylinder cña boot sector
+4 1 M hÖ thèng: 0=unknow; 1=FAT 12 bit; 4= 16 bit
+5 1 Sè head kÕt thóc.
+6 2 Sè sector vµ Cylinder cña sector cuèi cïng.
+8 4 Sè sector b¾t ®Çu t−¬ng ®èi. (low high)
+0Ch 4 Tæng sè sector trªn partition.(low high)
+10h §Çu vµo cña mét partition míi hay tËn cïng cña b¶ng
nÕu cã gi¸ trÞ 0AA55.
III - C¸c T¸c Vô Truy XuÊt §Üa.
C¸c phÇn trªn ® ®Ò cËp kh¸ chi tiÕt ®Õn cÊu tróc vËt lÝ còng nh− cÊu tróc logic cña ®Üa. TÊt
nhiªn, c¸c b¹n sÏ hái: øng víi cÊu tróc nh− thÕ, viÖc truy xuÊt ph¶i nh− thÕ nµo? LiÖu r»ng víi
hai c¸ch tæ chøc ®Üa (vËt lÝ vµ logic theo DOS), viÖc truy xuÊt cã g× kh¸c nhau? PhÇn sau ®©y
sÏ gi¶i quyÕt c©u hái nµy.
1/ Møc BIOS (Basic Input/Output System): T−¬ng øng víi møc cÊu tróc vËt lÝ, bé ®iÒu khiÓn
®Üa còng ®−a ra c¸c kh¶ n¨ng cho phÐp truy xuÊt ë møc vËt lÝ. C¸c chøc n¨ng nµy ®−îc thùc
hiÖn th«ng qua ng¾t 13h, víi tõng chøc n¨ng con trong thanh ghi AH. C¸c chøc n¨ng c¨n b¶n
nhÊt sÏ ®−îc kh¶o s¸t sau ®©y:
a. Reset ®Üa:
Vµo: AH = 0
DL = sè hiÖu ®Üa vËt lÝ (0=®Üa A, 1=®Üa B ..... 080=®Üa cøng).
NÕu DL lµ 80h hay 81h, bé ®iÒu khiÓn ®Üa cøng sÏ reset
sau ®ã ®Õn bé ®iÒu khiÓn ®Üa mÒm.
Ra: Kh«ng
Chøc n¨ng con nµy ®−îc dïng ®Ó reset ®Üa sau mét t¸c vô gÆp lçi.
b. LÊy m lçi cña t¸c vô ®Üa gÇn nhÊt:
Vµo: AH = 1
DL = ®Üa vËt lÝ. NÕu DL=80h lÊy lçi cña ®Üa mÒm
DL=7Fh lÊy lçi cña ®Üa cøng.
Ra: AL chøa m lçi, thùc chÊt cña lçi nµy, BIOS lÊy ra tõ vïng d÷ liÖu cña nã t¹i ®Þa
chØ 0:0441.
Mét sè m lçi th−êng gÆp ®−îc liÖt kª sau ®©y:
M lçi M« t¶
00h Kh«ng gÆp lçi
01h Sai lÖnh hoÆc lÖnh kh«ng hîp lÖ.
03h Ghi vµo ®Üa cã d¸n nhn chèng ghi.
04h Sector ID sau hay kh«ng t×m thÊy.
05h Reset gÆp lçi.
10h Bad CRC: CRC kh«ng hîp lÖ khi d÷ liÖu trªn sector ®−îc kiÓm tra.
20h Controller gÆp lçi.
40h Seek gÆp lçi, track yªu cÇu kh«ng t×m thÊy.
80h §Üa kh«ng s½n sµng.
0BBh Lçi kh«ng x¸c ®Þnh.
c. §äc sector:
16
www.updatesofts.com
Vµo: AH=2
DL=sè hiÖu ®Üa (0=®Üa A, ..., 80h=®Üa cøng 0, 81h=
®Üa cøng 1);
DH=sè ®Çu ®äc ghi.
CH= sè track (Cylinder)
CL=sè sector.
AL=sè sector cÇn ®äc/ghi (kh«ng v−ît qu¸ sè sector
trªn mét track).
ES:BX=®Þa chØ cña buffer chøa th«ng tin.
0:078=b¶ng tham sè ®Üa mÒm (®èi víi c¸c t¸c vô trªn
®Üa mÒm).
0:0101=b¶ng tham sè ®Üa cøng (®èi víi c¸c t¸c vô trªn
®Üa cøng).
Ra: CF=1 nÕu cã lçi vµ m lçi chøa trong AH.
d. Ghi sector:
Vµo: AH=3
ES:BX trá ®Õn buffer chøa d÷ liÖu
cßn l¹i t−¬ng tù nh− chøc n¨ng ®äc sector.
Ra: CF=1 nÕu cã lçi vµ m lçi chøa trong AH.
ë ®©y cÇn l−u ý ®Õn quy −íc phøc t¹p trong viÖc x¸c ®Þnh track vµ sè thø tù sector trong thanh
ghi CX. Râ rµng, sè sector trªn mét track lµ qu¸ nhá (sè sector trªn mét track lín nhÊt th−êng
gÆp hiÖn nµy còng chØ kho¶ng 34 (chiÕm cao l¾m kho¶ng 6 bit), trong khi ®ã, sè l−îng track
trªn ®Üa cã thÓ lín, do ®o, khã mµ ®−a gi¸ trÞ ®ã vµo thanh ghi CH (chØ biÓu diÔn tèi ®a 256
track mµ th«i). Gi¶i ph¸p lµ dïng thªm 2 bit trong CL lµ 2 bit cao cho sè track, lµm cho nã cã
kh¶ n¨ng biÓu diÔn ®−îc sè track tèi ®a lªn ®Õn 1024 track. S¬ ®å nh− sau:
F E D C B A 9 8 7 6 5 4 3 2 1 0
c c c c c c c c C c S s s s s s
2 bit ®−îc dïng nh− bit cao cho tr−íc
Theo s¬ ®å nµy, 2 bit cuèi cña CL ®−îc g¸n lµ 2 bit cao nhÊt thªm vµo bªn gi¸ trÞ CH. Do ®ã,
gi¸ trÞ lín nhÊt cña sector (6 bit) lµ 3Fh=63 sector trªn mét track (còng vÉn ch−a khai th¸c hÕt
kh¶ n¨ng nµy) vµ b©y giê sè track tèi ®a cã thÓ qu¶n lÝ ®−îc lªn ®Õn 3FFh=1024 track. ChÝnh
v× c¸ch quy −íc nµy, viÖc thùc hiÖn ®iÒu chØnh c¶ hai gi¸ trÞ track v¶ vµo thanh ghi CX ®ßi hái
mét gi¶i thuËt khÐo lÐo. §o¹n ch−¬ng tr×nh sau sÏ minh häa c¸ch gi¶i quyÕt nay:
Ready_CX proc near
:Chøc n¨ng: cho gi¸ trÞ 2 biÕn track vµ sector vµo thanh CX chuÈn bÞ cho t¸c vô ®äc ghi ;s¾p
tíi.
Push DX ;CÊt thanh ghi DX
mov DX, track ;DX=gi¸ trÞ track trong c¸c bit
;tõ 0 tíi 9
xchg DH, DL ;DH chøa 8bit thÊp, DL chøa 2bit
;cao
mov CL, 5 ;tuy nhiªn l¹i n»m ë bit 0 vµ 1
shl DL, CL ;CÇn ®Èy chóng sang tr¸i 6 vÞ trÝ
or DL, sector ;§−a gi¸ trÞ sector vµo DL
17
mov CX, DX ;CX ® lµm xong
pop DX ;LÊy l¹i gi¸ trÞ DX
ret
Ready_CX endp
e. Verify sector: Chøc n¨ng nµy cho phÐp kiÓm tra CRC cña c¸c sector ®−îc chän.
Vµo: AH=4
C¸c thanh ghi nh− c vµ d
Ra: CF=1 nÕu cã lçi vµ m lçi chøa trong AH.
2/ Møc DOS: C¸c chøc n¨ng cña ng¾t 13h cho phÐp ®äc bÊt k× mét sector nµo trªn ®Üa. Tuy
nhiªn, do c¸c quy ®Þnh thanh ghi phøc t¹p, nhiÒu yÕu tè ¶nh h−ëng (track, head, sector), c¸c
chøc n¨ng nµy kh«ng ®−îc ng−êi sö dông −a chuéng l¾m. Thay vµo ®ã, DOS ® cung cÊp mét
c¸ch truy xuÊt ®Üa kh¸c rÊt thuËn lîi cho ng−êi sö dông v× tÝnh ®¬n gi¶n vµ hiÖu qña.
Chøc n¨ng ®äc vµ ghi ®Üa d−íi DOS ®−îc ph©n biÖt bëi hai ng¾t 25h vµ 26h, tham sè ®−a vµo
b©y giê chØ cßn lµ sector logic. Nh−ng nh−îc ®iÓm cña nã trªn c¸c ®Üa cøng cã chia partition:
nã chØ cho phÐp truy xuÊt c¸c sector b¾t ®Çu tõ Boot sector cña partition ®ã.
§Ó tiÖn viÖc gäi tªn ®Üa, DOS kh«ng xem c¸c ®Üa mÒm ®−îc ®¸nh sè tõ 0 ®Õn 7Fh vµ ®Üa cøng
b¾t ®Çu tõ 80h nh− BIOS mµ thay vµo ®ã, gäi c¸c ®Üa theo thø tù c¸c ch÷ c¸i tõ A ®Õn Z. C¸ch
®¸nh sè nµy lµm cho ng−êi sö dông dÔ h×nh dung ra æ ®Üa ®−îc truy xuÊt. C¸c tham sè cho
chøc n¨ng nµy nh− sau:
Vµo: AL=sè ®Üa (0=A, 1=B, ...)
CX=sè l−îng sector cÇn ®äc/ghi
DX=sè sector logic b¾t ®Çu.
DS:BX=®Þa chØ cña buffer chøa d÷ liÖu cho t¸c vô ®äc/ghi
Ra: Lçi nÕu CF=1, m lçi ch−a trong AX. Ng−îc l¹i, t¸c vô ®äc/ghi ®−îc thùc hiÖn thµnh
c«ng, c¸c gi¸ trÞ thanh ghi ®Òu bÞ ph¸ hñy, trõ c¸c thanh ghi ph©n ®o¹n vµ mét word cßn sãt l¹i
trªn stack.
C¸c ng¾t nµy vÉn bÞ hai nh−îc ®iÓm g©y khã chÞu cho ng−êi dïng. TÊt c¶ c¸c thanh ghi ®Òu bÞ
thay ®æi, do vËy, tr−íc khi gäi chøc n¨ng nµy, nªn cÊt nh÷ng thanh ghi nµo cÇn thiÕt. MÆt
kh¸c, khi thùc hiÖn xong, DOS l¹i ®Ó l¹i trªn stack mét word sÏ g©y lçi cho ch−¬ng tr×nh nÕu
kh«ng ®Ó ý ®Õn. §o¹n vÝ dô sau ®äc Boot sector cña ®Üa A b»ng ng¾t 25h.
ReadBoot proc near
;®äc Boot sector cña ®Üa A vµo MyBuffer
mov AL, 0 ;§Üa A
mov DX, 0 ;Sector 0
mov CX, 1 ;§äc mét sector
lea BX, MyBuffer ;DS:BX trá ®Õn MyBuffer
int 25h
pop DX ;LÊy l¹i mét word trªn stack
ret
ReadBoot endp
NÕu ®Ó ý, ta sÏ thÊy sè sector logic ®−îc ®Æt trong mét thanh ghi 16 bit, nghÜa lµ sè sector tèi
®a còng chØ ®¹t tíi 65535. NÕu sè byte trªn sector vÉn lµ 512 byte th× dung l−îng ®Üa mµ DOS
qu¶n lÝ ®−îc chØ cã 32Mb dï sè l−îng cluster lín nhÊt mµ DOS qu¶n lÝ cã thÓ gÊp 4 hoÆc 8
lÇn.
18
www.updatesofts.com
Nh−îc ®iÓm nµy cÇn ph¶i ®−îc kh¾c phôc tr−íc sù c¹nh tranh khèc liÖt gi÷a c¸c hÖ ®iÒu hµnh.
B¾t ®Çu tõ DOS 4.xx, DOS ® më réng sè sector logic tõ 16 bit lªn 32 bit vµ vÉn t−¬ng thÝch
hoµn toµn víi c¸c version tr−íc ®ã. Sù t−¬ng thÝch nµy nh− sau: nÕu CX=-1: sè sector lín nhÊt
cña DOS, d¹ng thøc cña DOS 4.xx sÏ ®−îc ¸p dông. Lóc nµy, DS:BX sÏ lµ gi¸ trÞ cña Control
Package, mét cÊu tróc gåm 10 byte - chøa c¸c th«ng tin vÒ sector ban ®Çu, sè sector cÇn ®äc
....... CÊu tróc cña Control Package nh− sau:
Offset KÝch th−íc Néi dung
0 4 Sè sector logic ban ®Çu
4 2 Sè sector cÇn ®äc/ghi
6 4 §Þa chØ cña buffer d÷ liÖu
Lçi cña chøc n¨ng më réng nµy t−¬ng tù nh− c¸c version tr−íc. Tuy vËy, nÕu b¹n kh«ng dïng
cÊu tróc 32 bit nh− trªn ®Ó truy xuÊt nh÷ng partition cã h¬n 65535 sector còng bÞ gÆp lçi. Lçi
tr¶ vÒ cã thÓ lµ 2 (Bad address mark) hay 7 (Unknow Media).
LÏ dÜ nhiªn DOS ® t¹o thuËn tiÖn cho ng−êi sö dông nh−ng Ýt ai chÞu tháa mn nh÷ng yªu
cÇu cña m×nh. Râ rµng, khi truy xuÊt ®Üa ta ph¶i biÕt lo¹i cña nã, mÆt kh¸c, lµm sao ta cã ®−îc
nh÷ng th«ng tin quan träng vÒ ®Üa, xem FAT cña nã gåm bao nhiªu sector, Root Dir b¾t ®Çu tõ
®©u ch¼ng h¹n.Toµn nh÷ng th«ng tin quan träng. Thùc tÕ, còng ® nhiÒu ng−ßi tù lµm b»ng
c¸ch ®äc boot sector lªn vµ sö dông phÇn BPB ®Ó tÝnh to¸n. Song c¸ch nµy ®em l¹i nhiÒu phøc
t¹p trong vÊn ®Ò tÝnh to¸n, ®ã lµ ch−a kÓ nh÷ng ®Üa mµ boot sector chøa ‘r¸c’ thay cho d÷ liÖu
ta cÇn. DOS còng kh«ng cã mét tµi liÖu c«ng bè chÝnh thøc nµo ®Ò cËp ®Õn vÊn ®Ò nµy. Tuy
nhiªn, trong qu¸ tr×nh nghiªn cøu, nh÷ng ng−êi th¶o ch−¬ng viªn giµu kinh nghiÖm ph¸t hiÖn
mét chøc n¨ng cña DOS (ng¾t 21h) cho phÐp lÊy nh÷ng th«ng tin nµy.
Tõ ®©y trë ®i, nh÷ng chøc n¨ng tù ng−êi sö dông ph¸t hiÖn ®−îc sÏ gäi lµ Undocumented (tµi
liÖu kh«ng ®−îc c«ng bè chÝnh thøc). Chøc n¨ng nµy lµ:
Vµo: AH=32h
DL=®Üa (0=ngÇm ®Þnh, 1=A....)
Ra: AL=0 nÕu ®Üa hîp lÖ
0FFh nÕu ®Üa kh«ng hîp lÖ
DS:BX lµ ®Þa chØ cña b¶ng tham sè ®Üa cña ®Üa ®−îc chØ ®Þnh.
CÊu tróc cña b¶ng tham sè ®Üa nh− sau:
Offset Size Néi dung
+0 1 Sè hiÖu ®Üa (0=A, 1=B ....)
+1 1 Sè hiÖu con tõ Device Driver
+2 2 Sè byte trong mét sector
+4 1 Sè sector trong mét cluster
+5 1 Cluster to sector shift (cluster lµ 2 mò sè sector) +6
2 BootSiz: Sè sector dµnh riªng
+8 1 Sè b¶ng FAT.
+9 2 MaxDir: sè ®Çu vµo tèi ®a trong Root
+0B 2 Sè sector øng víi cluster #2
+0D 2 Tæng sè cluster + 2
+0F 1 Sè sector cÇn cho 1 b¶ng FAT.
+10 2 Sector b¾t ®Çu Root.
+12 4 Off Seg: ®Þa chØ cña device header
+16 1 Byte media descriptor
+17 1 Cê access: 0 nÕu ®Üa ® truy xuÊt.
+18 4 Off Seg: ®Þa chØ cña b¶ng tham sè kÕ
19
cuèi b¶ng nÕu lµ FFFFh
Tuy vËy, còng cÇn chó ý mét ®iÒu: DOS sÏ kh«ng chÞu tr¸ch nhiÖm vÒ nh÷ng ®iÒu m×nh kh«ng
c«ng bè vµ do ®ã, nÕu ch−¬ng tr×nh cña b¹n cã sö dông ®Õn chøc n¨ng nµo g©y thiÖt h¹i ®¸ng
kÓ cho ®Üa cña b¹n th× ®ã lµ lçi cña b¹n! MÆt kh¸c, cÊu tróc nµy cã thÓ thay ®æi trong t−¬ng lai
khi mét version míi ra ®êi. Thùc tÕ ® chøng minh ®iÒu nµy: b¶ng tham sè ®Üa trªn ® cã mét
sù thay ®æi nhá trong cÊu tróc (tuy vËy, còng ® lµm ‘Run time error’ cho mét sè ch−¬ng
tr×nh). Do nhu cÇu më réng kh¶ n¨ng qu¶n lÝ ®Üa, sè sector dµnh cho mét b¶ng FAT cã thÓ
v−ît qu¸ giíi h¹n 255 sector vµ do ®ã gi¸ trÞ sector dµnh cho mét b¶ng FAT t¨ng tõ mét byte
lªn mét word.
3/ C¸c gi¶i thuËt chuyÓn ®æi - ®Þnh vÞ:
a. ChuyÓn ®æi: Sù tån t¹i 2 c¸ch truy xuÊt theo c¸c yÕu tè vËt lÝ hoÆc logic theo DOS lµm ph¸t
sinh vÉn ®Ò: sector a trªn head b track c sÏ t−¬ng øng víi sector logic bao nhiªu vµ ng−îc l¹i,
tõ sector logic x nµo ®ã lµm sao t×m ®−îc to¹ ®é vËt lÝ cña nã? ViÖc ®¸nh sè cña c¶ hai c¸ch
®Òu ®−îc kh¶o s¸t, do ®ã, còng kh«ng phøc t¹p l¾m ®Ó lµm mét c«ng thøc thay ®æi tõ hÖ nµy
sang hÖ kia vµ ng−îc l¹i.
Sector_logic=(sect-1)+Hd*SecTrk+Cyl*SecTrk*HdNo
Trong ®ã:
Sect : sè sector hiÖn thêi theo BIOS
SecTrk : sè sector trªn mét track
Cyl : sè Cylinder hiÖn thêi
Hd : sè head hiÖn thêi theo BIOS
HdNo : sè ®Çu ®äc cña ®Üa
Chó ý lµ c«ng thøc trªn chØ ®óng nÕu Boot sector cïng n»m ngay t¹i track 0, head 0 vµ sector
1, nghÜa lµ viÖc ®¸nh sè cña c¶ hai ph¶i b¾t ®Çu cïng mét gèc. NÕu trªn partition, ph¶i chó ý
®Õn gi¸ trÞ cña c¸c sector dÊu mÆt (hidden sector).
§Ó tiÕn hµnh chuyÓn ®æi ng−îc l¹i, ta còng cã c«ng thøc:
Sect=SecLog mod SecTrk+1
Dh=(SecLog/SecTrk) mod HdNo
Cyl=SecLog/(SecTrk*HdNo)
Trong ®ã:
Sect= sector tÝnh theo BIOS
HD= head tÝnh theo BIOS
Cyl= Cylinder tÝnh theo BIOS
SegLog= sè sector logic
HdNo= sè ®Çu ®äc cña ®Üa
Ba tham sè cña ng¾t 13 còng ®−îc chuyÓn ®æi, tuy nhiªn, vÉn ph¶i b¶o ®¶m ®¸nh sè cïng gèc
vµ ®iÒu chØnh l¹i nÕu kh«ng cïng gèc.
ViÖc chuyÓn ®æi kh«ng chØ x¶y ra gi÷a BIOS vµ DOS mµ cßn x¶y ra ngay chÝnh trong DOS.
ChÝnh v× qu¸ nhiÒu kh¸i niÖm ®−a ra lµm cho nã v« cïng phøc t¹p vµ ®«i lóc còng lµm n¶n
lßng nh÷ng ng−êi muèn tù m×nh lµm viÖc qu¶n lÝ ®Üa thay cho DOS. Dï ® ®−a ra kh¸i niÖm
sector logic ®Ó tiÖn truy xuÊt, DOS l¹i ®−a ra kh¸i niÖm cluster ®Ó tiÖn viÖc qu¶n lÝ. ViÖc
chuyÓn ®æi gi÷a hai kh¸i niÖm nµy còng lµ ®iÒu nªn biÕt. ViÖc chuyÓn tõ cluster sang sector
logic ®ßi hái ph¶i biÕt ®−îc sè sector logic ®Çu tiªn cña vïng data. NghÜa lµ ph¶i biÕt sè sector
dµnh cho tõng phÇn: FAT vµ Root Dir (cã lÏ ta kh«ng nªn ®Ò cËp ®Õn sè sector dµnh cho Boot
sector). Ngoµi ra, cßn ph¶i quan t©m ®Õn c¸c sector dµnh riªng (kÓ c¶ boot).
Sè sector dµnh cho Root Dir:
RootSec=(RootSize*32)/SecSize
Trong ®ã :
20
1
lêi nãi ®Çu
MÆc dï virus tin häc ® xuÊt hiÖn l©u trªn thÕ giíi vµ ë c¶ trong n−íc. Vµ kh«ng ai cßn ng¹c
nhiªn n÷a nÕu biÕt m¸y tÝnh cña m×nh ® bÞ nhiÔm virus. ThÕ nh−ng, thùc ®¸ng ng¹c nhiªn v×
hÇu nh− ch−a cã mét cuèn s¸ch nµo ®Ò cËp ®Õn virus mét c¸ch ®Çy ®ñ vµ chi tiÕt. Sù thiÕu v¾ng
th«ng tin nµy kh«ng ph¶i lµ v« t×nh mµ do nh÷ng quan niÖm cho r»ng phæ biÕn nh÷ng th«ng tin
nh− vËy kh«ng nh÷ng kh«ng ®−îc lîi Ých g× mµ cßn lµm gia t¨ng sè l−îng virus lªn, vµ nh− thÕ
lµm t¨ng nguy c¬ mÊt m¸t d÷ liÖu. XÐt vÒ khÝa c¹nh nµy, c¸c nhµ s¶n xuÊt phÇn mÒm chèng
virus còng rÊt ®ång t×nh.
ChÝnh sù thiÕu hiÓu biÕt thùc sù ... gi¶ t¹o vÒ virus cïng víi sù thæi phång qu¸ ®¸ng cña b¸o chÝ
® biÕn virus tin häc bÐ nhá thµnh mét con ‘ngo¸o ép’ khæng lå lµm kinh hoµng cho nh÷ng
ng−êi sö dông téi nghiÖp khi m¸y cña hä bÞ mét hiÖn t−îng nµo ®ã mµ nghi ngê lµ virus. C¸i
gi¸ ph¶i tr¶ cho sù thiÕu hiÓu biÕt nµy ®«i khi l¹i qu¸ to lín, mét sù sai lÖch d÷ liÖu do lçi logic
cña ch−¬ng tr×nh cã thÓ gi¸n ®o¹n vµi ngµy ®Ó backup d÷ liÖu vµ format l¹i ®Üa, mét file tù
nhiªn t¨ng kÝch th−íc còng g©y hoang mang. §ã lµ ch−a kÓ ®Õn sù ®æ lçi cho virus tin häc sù
thiÕu hiÓu biÕt cña m×nh.
MÆt kh¸c, mét virus tin häc ®óng nghÜa lµ mét virus cã kÝch th−íc ch−¬ng tr×nh cùc nhá vµ
trong ®ã bao gåm chøc n¨ng khã kh¨n nªn ®ßi hái virus ®−îc thiÕt kÕ trùc tiÕp b»ng ng«n ng÷
Assembler vµ bao hµm nh÷ng gi¶i thuËt tèi −u vµ kÜ thuËt cao, nÕu xÐt trªn mét khÝa c¹nh nµo
®ã rÊt ®¸ng cho chóng ta häc tËp.
ChÝnh v× nh÷ng lÝ do ®ã, cuèn s¸ch nµy ra ®êi nh»m cung cÊp cho ®éc gi¶ nh÷ng th«ng tin cÇn
thiÕt vµ ®óng ®¾n vÒ virus, tõ ®ã cã thÓ rót ra nh÷ng bµi häc bæ Ých vµ cÇn thiÕt trong viÖc ph¸t
hiÖn vµ cøu ch÷a c¸c hËu qu¶ mµ virus g©y ra.
Dï ®−îc so¹n víi nh÷ng th«ng tin rÊt c¬ b¶n, cuèn s¸ch nµy vÉn ®ßi hái ®éc gi¶ ph¶i cã mét
kiÕn thøc c¨n b¶n vÒ Assembler (v× chÝnh virus còng ®−îc thiÕt kÕ b»ng ng«n ng÷ nµy) ®Ó cã
thÓ hiÓu vµ ph©n tÝch virus mét c¸ch tØ mØ nhÊt.
T¸c gi¶ kh«ng bao giê cã môc ®Ých h−íng dÉn ®éc gi¶ mét ph−¬ng ph¸p ®Ó thiÕt kÕ mét virus,
vµ tèt nhÊt b¹n ®äc còng ®õng bao giê cã ý ®Þnh nµy v× chÝnh c¸c b¹n sÏ lµ nh÷ng n¹n nh©n ®Çu
tiªn cña nã vµ sÏ g¸nh chÞu mäi hËu qu¶ do nã g©y ra.
C¸c virus ®−îc kh¶o s¸t trong cuèn s¸ch nµy tÊt c¶ lµ nh÷ng virus ® biÕt trong thµnh phè còng
nh− trªn thÕ giíi, trong ®ã, sè virus ®−îc biÕt trong n−íc còng ® chiÕm gÇn ph©n nöa.
Xin c¶m ¬n sù gióp ®ì quÝ b¸u cña c¸c ®ång nghiÖp trong viÖc hiÖu chÝnh vµ ®ãng gãp nhiÒu ý
kiÕn hay cho cuèn s¸ch. V× ®©y lµ lÇn xuÊt b¶n ®Çu tiªn, ch¾c ch¾n cuèn s¸ch sÏ cßn nhiÒu ®iÒu
thiÕu sãt, t¸c gi¶ mong nhËn ®−îc nhiÒu ý kiÕn ®ãng gãp cña ®éc gi¶.
§Þa chØ liªn l¹c t¸c gi¶:
Ng« Anh Vò
Trung t©m CESAIS
Ban tin häc
17 Ph¹m Ngäc Th¹ch Q.3 TP Hå ChÝ Minh
2
www.updatesofts.com
3
Giíi thiÖu tæng qu¸t vÒ virus tin häc
I - Virus Tin Häc vµ Trojan Horse.
LuËt ph¸p tõng n−íc vÉn cßn cã chç kh«ng ®ång nhÊt, cã n−íc ® chÊp nhËn b¶o vÖ b¶n
quyÒn c¸c phÇn mÒm, nh−ng cã nh÷ng n−íc l¹i kh«ng ®Ò cËp mét c¸ch râ rµng ®Õn vÊn ®Ò
nµy. Cïng víi sù ph¸t triÓn nh− vò bo cña phÇn cøng, kÜ thuËt sao chÐp còng ®¹t ®Õn tr×nh ®é
cao. Nh÷ng phÇn mÒm sao chÐp nh− COPYIIPC, COPYWRIT ... cho phÐp t¹o mét ®Üa míi cã
mäi thµnh phÇn gièng nh− ®Üa gèc ® lµm thiÖt h¹i ®¸ng kÓ cho c¸c hng s¶n xuÊt phÇn mÒm.
Lîi dông kÏ ë luËt ph¸p cña c¸c n−íc, mét sè n¬i ® xuÊt hiÖn nh÷ng tay ‘c−íp’ phÇn mÒm
chuyªn nghiÖp. Nh÷ng phÇn mÒm võa ®−îc ®−a ra thÞ tr−êng ngµy h«m tr−íc th× lËp tøc nã bÞ
ph¸ khãa (khãa ë ®©y ®−îc hiÓu nh− mét m ®−îc ®−a vµo khi thi hµnh ch−¬ng tr×nh, mét ®Üa
gèc...), copy l¹i, thËm chÝ cßn söa ®æi c¶ tªn t¸c gi¶, råi tung ra thÞ tr−êng víi gi¸ rÎ ch−a tõng
cã.
Nh÷ng hµnh ®éng v« ®¹o ®øc nµy lµ mét th¸ch thøc ®èi víi c¸c nhµ s¶n xuÊt phÇn mÒm, do
®ã, ý t−ëng ®−a mét ®o¹n m ph¸ ho¹i (destructive code) vµo trong phÇn mÒm víi môc ®Ých sÏ
ph¸ hñy d÷ liÖu nÕu phÇn mÒm nµy kh«ng n»m trªn ®Üa gèc kh«ng ph¶i lµ ý t−ëng g× míi l¹.
Nh−ng viÖc giÊu mét ®o¹n m nh− thÕ nµo vµ b¶n chÊt cña ®o¹n m ra sao th× l¹i tïy thuéc vµo
nhµ s¶n xuÊt vµ kh«ng mét ai thõa nhËn (tÊt nhiªn, kÓ c¶ nh÷ng nhµ s¶n xuÊt ra nã) còng nh−
chøng kiÕn ®iÒu nµy c¶.
MÆt kh¸c, tin häc ® vµ ®ang trë thµnh phæ cËp cho toµn thÕ giíi, nh÷ng cÊu tróc néi t¹i,
nh÷ng kÜ thuËt lËp tr×nh ®Òu ®−îc h−íng dÉn tØ mØ vµ nghiªm tóc ®ang tiÕp cËn tõng ng−êi vµ
cô thÓ lµ víi tÇng líp thanh niªn. Víi ®Çy ®ñ kiÕn thøc vµ tÝnh hiÕu th¾ng, ®ua tµi cña tuæi trÎ,
mét t− t−ëng næi lo¹n hay sù tù kh¼ng ®Þnh m×nh qua nh÷ng ch−¬ng tr×nh mang tÝnh chÊt ph¸
ho¹i ®Òu cã thÓ g©y nguy hiÓm vµ thùc tÕ còng kh«ng Ýt vÝ dô chøng minh cho ®iÒu nµy.
C¨n cø vµo tÝnh chÊt cña ®o¹n m ph¸ ho¹i, ta cã thÓ chia chóng thµnh hai lo¹i: virus vµ trojan
horse.
1/ Trojan horse:
ThuËt ng÷ nµy dùa vµo mét ®iÓn tÝch cæ, chØ nh÷ng ®o¹n m ®−îc ‘c¾m’ vµo bªn trong
mét phÇn mÒm, cho phÐp xuÊt hiÖn vµ ra tay ph¸ ho¹i mét c¸ch bÊt ngê nh− nh÷ng ‘anh hïng’
x«ng ra tõ bông con ngùa thµnh Troa. Trojan horse lµ mét ®o¹n m HOµN TOµN KH¤NG
Cã TÝNH CHÊT L¢Y LAN, chØ n»m trong nh÷ng phÇn mÒm nhÊt ®Þnh. §o¹n m nµy sÏ ph¸
ho¹i vµo mét thêi ®iÓm x¸c ®Þnh cã thÓ ®−îc t¸c gi¶ ®Þnh tr−íc vµ ®èi t−îng cña chóng lµ
th«ng tin trªn ®Üa nh− format l¹i ®Üa, xãa FAT, Root....
Th«ng th−êng c¸c phÇn mÒm cã chøa Trojan horse ®−îc ph©n phèi nh− lµ c¸c version bæ sung,
hay míi, vµ ®iÒu nµy sÏ trõng ph¹t nh÷ng ng−êi thÝch sao chÐp phÇn mÒm ë nh÷ng n¬i cã
nguån gèc kh«ng x¸c ®Þnh.
Tuy nhiªn ®èi víi hiÖn t−îng nµy, ë ViÖt nam nãi chung vµ thµnh phè ta ch−a xuÊt hiÖn. Vµ
còng dÔ thÊy tÇm ho¹t ®éng vµ møc ph¸ ho¹i khi ho¹t ®éng trªn c¸c m¸y ®¬n sÏ v« cïng h¹n
chÕ.
2/ Virus tin häc:
ThuËt ng÷ nµy nh»m chØ mét ch−¬ng tr×nh m¸y tÝch cã thÓ tù sao chÐp chÝnh nã lªn nh÷ng ®Üa,
file kh¸c mµ ng−êi sö dông kh«ng hay biÕt. Th«ng th−êng virus còng mang tÝnh ph¸ ho¹i, nã
sÏ g©y ra lçi thi hµnh, lÖch l¹c hay hñy d÷ liÖu....
4
www.updatesofts.com
So víi Trojan horse, virus mang tÇm vãc ‘vÜ ®¹i’ h¬n, sù lan truyÒn xa h¬n vµ do ®ã t¸c h¹i cña
nã v« cïng khñng khiÕp h¬n. ë thµnh phè, virus ® xuÊt hiÖn kh¸ sím vµ còng ® g©y nhiÒu
t¸c h¹i víi −u thÕ cña virus so víi Trojan horse. ë ®©y , mét bµi b¸o nhan ®Ò “LÝ thuyÕt vµ c¬
cÊu cña c¸c phÇn tö tù hµnh phøc t¹p “(Theory and Organization of Complicated Automata).
Trong bµi b¸o cña m×nh, «ng ® nªu ra lÝ thuyÕt vÒ sù tù nh©n lªn nhiÒu lÇn cña c¸c ch−¬ng
tr×nh m¸y tÝnh. Nh÷ng ®ång nghiÖp cña «ng ® dÌ bØu nhiÒu vÒ ý t−ëng nµy nh−ng ®iÒu nµy
còng dÔ hiÓu v× nh÷ng chiÕc m¸y tÝnh ®iÖn tö ®Çu tiªn (electronic computer) ®−îc ph¸t triÓn
nhiÒu n¨m sau ®ã.
M−êi n¨m sau ®ã, trong mét chi nh¸nh cña hng AT&T’s Bell, ba th¶o ch−¬ng viªn trÎ tuæi ®
ph¸t triÓn mét trß ch¬i tªn lµ ‘Core War’, ba ng−êi nµy tªn lµ Mc Ilroy, Victor Vysottsky vµ
Robert Morris, ®Òu lµ nh÷ng ng−êi n¾m v÷ng nh÷ng cÊu tróc néi t¹i cña m¸y.
‘Core War’ lµ mét cuéc ®Êu trÝ gi÷a hai ®o¹n m cña hai th¶o ch−¬ng viªn. Mçi ®Êu thñ ®−a
mét ch−¬ng tr×nh cã kh¶ n¨ng tù t¸i t¹o (reproducing program) gäi lµ Organism vµo trong bé
nhí cña m¸y tÝnh. Khi b¾t ®Çu cuéc ch¬i Organism, mçi ®Êu thñ sÏ cè g¾ng ph¸ hñy organism
cña ®èi ph−¬ng vµ t¸i t¹o organism cña m×nh. §Êu thñ th¾ng cuéc lµ ®Êu thñ ph¸t triÓn nhiÒu
lÇn c¬ cÊu cña m×nh.
Trß ch¬i ‘Core War’ nµy ®−îc gi÷ kÝn cho ®Õn n¨m 1983, Ken Thompson, mét tay ch¬i lçi l¹c
® viÕt version ®Çu cho hÖ ®iÒu hµnh UNIX, ®Ó lé ra khi nhËn mét trong nh÷ng phÇn th−ëng
danh dù cña giíi kü nghÖ ®iÖn tö - Gi¶i th−ëng A.M Turing. Trong bµi diÔn v¨n cña m×nh, «ng
® ®−a ra mét ý t−ëng vÒ ph−¬ng ph¸p lµm virus. Thompson còng ®Ò cËp ®Õn Core War vµ sau
®ã tiÕp tôc khuyÕn khÝch thÝnh gi¶ cña m×nh hy lµm thö!
Th¸ng 5/1984 tê b¸o Scientific America cã ®¨ng mét bµi b¸o m« t¶ vÒ Core War vµ cung cÊp
cho ®äc gi¶ c¬ héi mua nh÷ng lêi h−íng dÉn vÒ trß ch¬i nµy - nã ®−îc gëi ®Õn tËn nhµ víi gi¸
2 USD c−íc phÝ b−u ®iÖn!
§Çu tiªn, virus tin häc ® b¾t ®Çu trªn c¸c m¸y lín nh− CREEPER (1970, RABBIT (1974),
ANIMAL (1980).... Sau ®ã míi b¾t ®Çu xuÊt hiÖn trªn m¸y PC. § cã mét sè tµi liÖu cho r»ng
virus tin häc trªn PC b¾t ®Çu tõ n¨m 1987, tuy nhiªn ®iÒu nµy còng kh«ng ®−îc ch¾c ch¾n khi
virus Brain ‘th«ng b¸o’ nã ®−îc ra ®êi tõ n¨m 1986!
Virus ®Çu tiªn trªn m¸y IBM PC ®−îc ph¸t hiÖn vµ nhanh chãng trë nªn næi tiÕng lµ Lehigh
virus (v× nã xuÊt hiÖn ®Çu tiªn ë tr−êng §¹i häc nµy) vµo tr−íc lÔ T¹ ¬n n¨m 1987. Cïng thêi
víi virus nµy, mét virus kh¸c ©m thÇm ®æ bé tõ Pakistan vµo MÜ lµ Brain víi môc tiªu ®Çu tiªn
lµ tr−êng §¹i häc Delaware. Mét n¬i kh¸c trªn thÕ giíi còng ® t−êng thuËt sù xuÊt hiÖn cña
virus: §¹i häc Hebrew - Israel. TÊt c¶ ®Òu cã chung mét ®iÓm: tõ c¸c tr−êng §¹i häc, n¬i cã
c¸c sinh viªn giái, hiÕu ®éng vµ thÝch ®ïa.
MÆc dï xuÊt hiÖn ë nhiÒu n¬i trªn thÕ giíi, virus vÉn cã chung mét ph−¬ng ph¸p l©y lan, v×
kh«ng n¾m râ c¸ch thøc nµy, mét sè ng−êi ® c¶m thÊy hèt ho¶ng khi ® diÖt b»ng mäi c¸ch,
m¸y tÝnh vÉn cø bÞ nhiÔm ®i nhiÔm l¹i mét virus.
Dï vËy, vÉn ph¶i cã mét ph©n lo¹i nµo ®ã chi tiÕt h¬n vÒ virus, lµm cho nã dÔ kiÓm so¸t vµ ®−a
ra ph−¬ng ph¸p ch÷a trÞ thÝch hîp. Do ®ã, ng−êi ta ® chia virus thµnh hai lo¹i chÝnh c¨n cø
theo c¸ch l©y vµ ®èi t−îng l©y. Ta sÏ kh¶o s¸t lÇn l−ît tõng ®èi t−îng mét.
III - C¸ch Thøc L©y - Ph©n Lo¹i.
Dùa vµo ®èi t−îng l©y lan lµ file hay ®Üa, ta chia virus thµnh hai nhãm chÝnh:
+ B - virus (boot virus): virus chØ tÊn c«ng lªn c¸c Boot sector hay Master boot.
+ F - virus (file virus): virus chØ tÊn c«ng lªn c¸c file thi hµnh ®−îc (d¹ng cã thÓ thi hµnh
b»ng chøc n¨ng 4Bh cña DOS h¬n lµ nh÷ng file d¹ng .COM hay .EXE).
5
Dï vËy, c¸ch ph©n chia nµy còng kh«ng ph¶i lµ duy nhÊt, mµ còng kh«ng h¼n chÝnh x¸c. V×
sau nµy, c¸c F - virus vÉn ph¸ ho¹i hay chÌn m ph¸ ho¹i vµo Boot sector, còng nh− B - virus
chÌn ®o¹n m vµo file. Tuy nhiªn, nh÷ng hiÖn t−îng nµy chØ nh»m ph¸ ho¹i chø kh«ng coi ®ã
lµ ®èi t−îng ®Ó l©y lan. D¹ng tæng qu¸t cña mét virus cã thÓ biÓu diÔn b»ng s¬ ®å sau:
T×m file/®Üa
NhiÔm
? Exit
L©y
Nh− ® giíi thiÖu vÒ ®Þnh nghÜa virus, ®o¹n m nµy mét lóc nµo ®ã ph¶i ®−îc trao quyÒn ®iÒu
khiÓn. Nh− vËy, râ rµng virus ph¶i khai th¸c mét chç hë nµo ®ã mµ m¸y ‘tù nguyÖn’ trao
quyÒn ®iÒu khiÓn l¹i cho nã. Thùc tÕ cã hai kÏ hë nh− thÕ, mµ ta sÏ lÇn l−ît xÐt sau ®©y:
1/ B - virus:
Khi m¸y tÝnh b¾t ®Çu khëi ®éng (Power on), mäi thanh ghi cña CPU sÏ ®−îc xãa, c¸c thanh
ghi ph©n ®o¹n (segment) ®−îc g¸n gi¸ trÞ 0FFFFh, cßn tÊt c¶ c¸c thanh ghi cßn l¹i ®Òu ®−îc
xãa vÒ 0. Lóc nµy CS:IP dÜ nhiªn sÏ trá ®Õn 0FFFFh:0. T¹i ®Þa chØ nµy lµ mét lÖnh JMP FAR
chuyÓn quyÒn ®iÒu khiÓn ®Õn mét ®o¹n ch−¬ng tr×nh ®Þnh s½n trong ROM, ®o¹n ch−¬ng tr×nh
nµy sÏ thùc hiÖn qu¸ tr×nh POST (Power On Seft Test: tù kiÓm tra khi khëi ®éng).
Qu¸ tr×nh POST sÏ lÇn l−ît kiÓm tra c¸c thanh ghi, kiÓm tra bé nhí, khëi t¹o c¸c chÝp ®iÒu
khiÓn DMA, bé ®iÒu khiÓn ng¾t, ®Üa.....NÕu qu¸ tr×nh nµy hoµn thµnh tèt ®Ñp, c«ng viÖc tiÕp
theo sÏ dß t×m c¸c card thiÕt bÞ g¾n thªm vµo (th−êng c¸c thiÕt bÞ nµy lµ card ®iÒu khiÓn ®Üa
cøng hay mµn h×nh) vµ trao quyÒn ®iÒu khiÓn ®Ó cho chóng tù khëi t¹o råi sau ®ã lÊy l¹i khi
card hoµn thµnh xong phÇn khëi t¹o. Tuy vËy còng ph¶i chó ý: toµn bé ®o¹n ch−¬ng tr×nh nµy
n»m ngay trong ROM, cã tÝnh chÊt ChØ §äc nªn kh«ng thÓ söa ®æi còng nh− chÌn bÊt k× mét
®o¹n m ch−¬ng tr×nh kh¸c vµo ®−îc.
Sau khi mäi viÖc khëi t¹o ®Òu hoµn thµnh tèt ®Ñp, lóc nµy ®o¹n ch−¬ng tr×nh trong ROM míi
tiÕn hµnh ®äc Boot sector tõ ®Üa vËt lÝ ®Çu tiªn (lµ ®Üa A) vµo trong RAM t¹i ®Þa chØ 0:07C00h
(Boot sector lµ sector ®Çu tiªn trªn ®Üa n»m ë sector 1, head 0, track 0). NÕu viÖc ®äc kh«ng
thµnh c«ng, (kh«ng cã ®Üa trong æ ®Üa...) Boot Master cña ®Üa cøng sÏ ®−îc ®äc vµo (nÕu cã ®Üa
cøng). Gi¶ sö viÖc ®äc ® thµnh c«ng, quyÒn ®iÒu khiÓn sÏ ®−îc trao cho ®o¹n m n»m trong
Boot record b»ng mét lÖnh JMP FAR 0:07C00 mµ kh«ng cÇn biÕt ®o¹n m nµy lµm g×. Nh−
vËy, ®Õn lóc nµy bÊt kÓ trong Boot record chøa ®o¹n m nµo, quyÒn ®iÒu khiÓn vÉn ®−îc trao
vµ nÕu ®o¹n m ®ã l¹i tiÕn hµnh format l¹i ®Üa!. Râ rµng, ®©y lµ mét kÏ hë ®Çu tiªn mµ m¸y
m¾c ph¶i. Nh−ng ®iÒu nµy còng dÔ hiÓu v× PC kh«ng thÓ kiÓm tra ®−îc ®o¹n m trong Boot
record - øng víi mçi hÖ ®iÒu hµnh, hoÆc ngay c¶ c¸c version kh¸c nhau - ®o¹n m nµy còng
kh¸c nhau. NÕu tù kiÓm ®iÓm l¹i m×nh, b¹n sÏ kh«ng khái giËt m×nh v× sè lÇn ®Ó quªn ®Üa
mÒm trong æ ®Üa còng kh«ng ph¶i lµ Ýt.
Tuy vËy, còng cßn may m¾n lµ ....®o¹n m trong Boot record l¹i hoµn toµn trong s¹ch, nghÜa lµ
nã ®−îc format d−íi hÖ ®iÒu hµnh hiÖn hµnh vµ h¬n n÷a ch−a cã ai söa ®æi, thay thÕ ®o¹n m
nµy c¶.
Lóc nµy, ®o¹n m sÏ dß t×m, vµ nÕu cã sÏ t¶i 2 file hÖ thèng vµo vïng nhí (nÕu lµ hÖ ®iÒu hµnh
MS-DOS, 2 file nµy sÏ cã tªn IO.SYS vµ MSDOS.SYS) råi mét lÇn n÷a trao quyÒn ®iÒu khiÓn.
Lóc nµy, CONFIG.SYS (nÕu cã) sÏ ®−îc ®äc vµo vµ tiÕn hµnh khëi t¹o c¸c device driver, ®Þnh
buffer file cho c¸c file.... cuèi cïng COMMAND.COM sÏ ®−îc gäi (nÕu kh«ng cã lÖnh
SHELL trong CONFIG.SYS) ®Ó råi dÊu nh¾c A:\> quen thuéc xuÊt hiÖn trªn mµn h×nh.
Lîi dông kÏ hë ®Çu tiªn nµy, B - virus sÏ tÊn c«ng vµo Boot sector, nghÜa lµ nã sÏ thay mét
Boot sector chuÈn b»ng mét ®o¹n m virus, quyÒn ®iÒu khiÓn lóc nµy sÏ ®−îc trao cho virus
6
www.updatesofts.com
tr−íc khi Boot record nhËn quyÒn ®iÒu khiÓn råi sau ®ã mäi chuyÖn vÉn tiÕn hµnh mét c¸ch
b×nh th−êng cho ®Õn khi...
Do ®Æc ®iÓm lªn tr−íc c¶ hÖ ®iÒu hµnh, virus ph¶i tù lµm hÕt mäi chuyÖn. Vµ v× vËy ®iÒu nµy
còng kh«ng ph¶i lµ dÔ dµng víi mét kÝch th−íc ch−¬ng tr×nh nhá bÐ (nÕu kh«ng tin b¹n cã thÓ
thö ®Þnh vÞ vµ ph©n tÝch FAT mµ kh«ng dïng ®Õn bÊt k× mét th«ng tin nµo tõ DOS xem)
2/ F - virus:
Sau khi COMMAND.COM ®−îc gäi, lóc nµy nã sÏ t×m file AUTO.EXEC.BAT ®Ó thi hµnh
(nÕu cã) vµ sau cïng dÊu nh¾c sÏ xuÊt hiÖn ®Ó chê nhËn lÖnh. TÊt nhiªn kh«ng ai dïng nh÷ng
lÖnh néi tró cña DOS ®Ó thi hµnh (trõ nh÷ng ng−êi b¾t ®Çu häc hÖ ®iÒu hµnh DOS). Th«ng
th−êng, ng−êi ta sÏ thi hµnh mét file nµo ®ã. §¬n gi¶n nhÊt lµ anh ta muèn thi hµnh phÇn mÒm
Foxbase ch¼ng h¹n b»ng c¸ch ®¸nh tªn Mfoxplus ë dÊu nh¾c ®îi lÖnh cña DOS vµ bÊm phÝm
Enter. Lóc nµy DOS sÏ t×m mét file cã tªn Mfoxplus.EXE. May m¾n thay file nµy ® ®−îc t×m
thÊy, DOS b¾t ®Çu tæ chøc l¹i vïng nhí, t¶i nã lªn råi trao quyÒn ®iÒu khiÓn mµ kh«ng mét
chót b¨n kho¨n xem nã ®Þnh lµm c¸i g× vµ cã nguy hiÓm kh«ng?
May thay, kÏ hë thø hai nµy còng bÞ bá qua mµ kh«ng mét ai g©y phiÒn phøc g×. Sau khi thi
hµnh xong anh ta cã thÓ trë vÒ dÊu nh¾c cña hÖ ®iÒu hµnh mét c¸ch an toµn.
Thùc chÊt, kÏ hë thø hai nµy còng ®−îc virus tËn dông. §iÒu g× sÏ x¶y ra nÕu quyÒn ®iÒu khiÓn
thay v× ®−îc trao cho file l¹i rÏ nh¸nh sang cho mét kÎ l¹ mÆt sèng ‘kÝ sinh’ lªn file? §iÒu nµy
chØ cã... virus míi biÕt ®−îc vµ tÊt nhiªn sau ®ã, khi kÕt qu¶ ph¸ ho¹i còng ® râ rµng th×
ng−êi sö dông còng... biÕt.
éi t¹i cña hÖ ®iÒu hµnh mµ ta ch−a ®−îc biÕt.
Qui −íc:
+ C¸c sè trong cuèn s¸ch nµy ®−îc ngÇm hiÓu d−íi d¹ng thËp lôc h¬n lµ thËp ph©n nÕu
kh«ng ghi râ d¹ng.
+ C¸c ch−¬ng tr×nh virus ®−îc minh häa hÇu hÕt ®−îc Unassembler b»ng phÇn mÒm D68.
7
®Üa - s¬ l−îc vÒ ®Üa
Ch−¬ng nµy kh«ng nh»m môc ®Ých kh¶o s¸t t−êng tËn tõng cÊu tróc vËt lÝ còng nh− logic mµ
chØ ®¬n gi¶n nh»m cung cÊp cho ®éc gi¶ mét sè th«ng tin thËt cÇn thiÕt, tiÖn cho viÖc ph©n tÝch
B-virus trong ch−¬ng tiÕp theo. Dï vËy, vÉn cã mét sè th«ng tin bæ Ých cho viÖc tham kh¶o.
I - CÊu Tróc VËt LÝ.
CÊu tróc ®Üa - dï vËt lÝ hay logic, trong thùc tÕ Ýt ®−îc ai ®Ò cËp ®Õn v× møc ®é phøc t¹p, nhÊt
lµ ®Üa cøng. Tuy nhiªn, nh÷ng kh¸i niÖm c¬ b¶n nhÊt l¹i v« cïng ®¬n gi¶n.
C¸c lo¹i ®Üa (c¶ ®Üa cøng lÉn ®Üa mÒm) ®Òu dùa vµo hiÖn t−îng tõ hãa ®Ó chøa d÷ liÖu: ®Çu tõ
®äc ghi sÏ tõ hãa nh÷ng phÇn tö cùc nhá trªn bÒ mÆt, mçi phÇn tö di chuyÓn qua ®Çu tõ sÏ bÞ
tõ hãa. Do h×nh d¹ng ban ®Çu cña ®Üa lµ h×nh trßn nªn nhiÒu ng−êi lÇm t−ëng ®©y lµ h×nh d¹ng
b¾t buéc, thùc ra, b¹n cã thÓ t¹o ra mét ®Üa víi h×nh d¹ng bÊt k×, miÔn sao tån t¹i mét æ ®Üa cho
phÐp b¹n truy xuÊt nh÷ng th«ng tin trªn ®ã.
Kh¸c víi trªn b¨ng tõ, trªn ®Üa chóng ta sÏ ghi d÷ liÖu d−íi d¹ng rêi r¹c (hoÆc sÏ mang gi¸ trÞ
tèi ®a lµ 1 hoÆc mang gi¸ trÞ tèi thiÓu lµ 0) . C¸ch thÓ hiÖn nh− thÕ ®−îc gäi lµ digital.
Chóng ta sÏ b¾t ®Çu víi kh¸i niÖm Track.
1/ Track: NÕu b¹n ®Æt mét c©y bót cho lªn mét ®Üa h¸t ®ang xoay. §−êng bót ch× sÏ t¹o trªn
thµnh ®Üa mét h×nh trßn. Vµ b¹n cø viÖc coi r»ng ®Üa lµ mét ®Üa mÒm, cßn ®Çu bót ch× lµ ®Çu tõ
®äc ghi. §−êng do c©y bót ch× t¹o nªn b©y giê cã tªn lµ Track. Do mét Track chØ lµ mét h×nh
trßn chiÕm mét phÇn rÊt nhá, nªn trªn mét ®Üa, ta cã thÓ t¹o nªn nhiÒu h×nh trßn ®ång t©m ®Ó
cã ®−îc nhiÒu Track.
2/ Side: BÊt mét ®Üa mÒm nµo còng cã hai mÆt (Side), do ®ã, kh«ng ai b¾t buéc chóng ta ph¶i
sö dông mét mÆt ®Üa (mÆc dï DOS ® lµm ®iÒu nµy, nh−ng sau ®ã, nã còng söa sai). Ghi d÷
liÖu lªn c¶ hai mÆt ®Üa râ rµng mang l¹i tÝnh king tÕ h¬n v× kh¶ chøa d÷ liÖu cña ®Üa t¨ng lªn
gÊp ®«i mµ kh«ng cÇn tèn thªm mét æ ®Üa thø hai. §¬n gi¶n lµ ®Æt thªm mét ®Çu ®äc thø hai ë
phÝa bªn kia ®Ó t¹o thµnh mét ‘gäng k×m’. Hai mÆt ®−îc ®¸nh sè lÇn l−ît lµ mÆt 1 vµ mÆt 0.
3/ Cylinder: Râ rµng, mét thuËn lîi thø hai cña ®Üa hai mÆt: d÷ liÖu cã thÓ ghi hai lÇn nhanh
h¬n tr−íc khi ®Çu ®äc chuyÓn sang Track míi. D÷ liÖu ®Çu tiªn cã thÓ ghi lªn Track cña mÆt
bªn nay råi sau ®ã cïng mét Track nh− thÕ nh−ng ë mÆt bªn kia, cuèi cung míi chuyÓn sang
Track kh¸c. Mét cÆp Track n»m ®èi xøng nh− thÕ ®−îc tham chiÕu ®Õn nh− mét phÇn tö duy
nhÊt Cylinder.
§Ó thuËn lîi cho viÖc tham chiÕu, Track vµ Cylinder ®−îc ®¸nh sè. Track ë ngoµi cïng ®−îc
®¸nh sè lµ Track 0. Track ë mÆt trªn ngoµi cïng lµ Track 0, Side 0; Track ë mÆt d−íi lµ Track
0 Side 1. Nh÷ng Track 0 nh− thÕ ®−îc gäi chung lµ Cylinder 0. B¹n ch¾c ® tõng nghe nãi ®Üa
mÒm 360 Kb, nh÷ng ®Üa mÒm lo¹i nh− thÕ cã 80 Track ®−îc ®¸nh sè tõ 0 ®Õn 79. Th«ng
th−êng, viÖc ®¸nh sè trªn m¸y tÝnh b¾t ®Çu tõ 0 h¬n lµ tõ 1, song vÉn cã ngo¹i lÖ khi Sector b¾t
®Çu ®¸nh sè tõ 1 vµ Cluster ®−îc ®¸nh sè b¾t ®Çu tõ 2 mµ chóng ra sÏ xÐt sau.
§èi víi ®Üa cøng, mét m« h×nh ®¬n gi¶n lµ c¸c ®Üa mÒm ®−îc xÕp song song víi nhau
thµnh h×nh trô. §Üa trªn cïng lµ Side 0, ®¸y cña nã lµ Side 1 ®Üa thø hai cã hai mÆt lÇn l−ît lµ
Side 2 vµ 3.... TËp hîp nh÷ng track 0 ®−îc tham kh¶o d−íi tªn gäi Cylinder 0. TÊt nhiªn sè
®Çu ®äc còng sÏ t¨ng theo. Khèi l−îng d÷ liÖu trªn mét track trªn ®Üa cøng còng thay ®æi tïy
thuéc tõng m¸y, tuy nhiªn, th−êng tõ 8Kb ®Õn 12Kb trªn mét track.
www.updatesofts.com
4/ Sector: MÆc dï cã thÓ ®äc/ghi d÷ liÖu lªn ®Üa mét lóc 8 ®Õn 12 Kb, nh−ng trong thùc tÕ,
kh«ng ai d¸m dïng ®Õn mét khèi l−îng lín ®Õn nh− thÕ. Bé ®iÒu khiÓn ®Üa th−êng ®−îc thiÕt
kÕ ®Ó cã thÓ ®äc vµ ghi mét lÇn chØ tõng ph©n ®o¹n cña Track. Sè byte trong mét ph©n ®o¹n,
®−îc gäi lµ Sector, phô thuéc vµo phÇn cøng mµ cña bé ®iÒu khiÓn ®Üa vµ vµo hÖ ®iÒu hµnh:
c¸c nhµ thiÕt kÕ sÏ t¹o nh÷ng kÝch th−íc Sector kh¸c nhau vµ hÖ ®iÒu hµnh sÏ chän mét trong
nh÷ng kÝch th−íc nµy. Th«ng th−êng, c¸c kÝch th−íc nµy lµ 128, 256, vµ 1024 byte. §èi víi hÖ
®iÒu hµnh DOS, kÝch th−íc ®−îc chän lµ 512 byte cho mçi Sector víi tÊt c¶ c¸c lo¹i ®Üa.
Trªn ®Üa mÒm 360 Kb, mçi Track cã thÓ ®¹t tíi 10 Sector, tuy nhiªn, v× vÊn ®Ò an toµn d÷ liÖu,
DOS chØ chän 9 Sector cho mçi Track. ChÝnh v× ®iÒu nµy, sÏ thÊy mét ®Üa 40 Track sÏ cã:
40Track * 2Side * 9Sector 8 512byte = 360 Kb.
§èi víi ®Üa cøng, mËt ®é Track trªn mét inch cã thÓ ®¹t ®Õn 600 Track/inch, do ®ã kh¶ n¨ng
l−u tr÷ d÷ kiÖu cña ®Üa cøng lín h¬n ®Üa mÒm rÊt nhiÒu.
Lóc nµy, ®Ó tham chiÕu, kh«ng nh÷ng chóng ta ph¶i chØ ra mÆt (Side) vµ Track mµ cßn ph¶i
chØ ra sè Sector nµo trong Track ®ã.
5/ §¸nh ®Þa chØ Sector: Khi chóng ta ® ®¹t ®Õn Track cÇn ®äc/ghi, lµm thÕ nµo ®Ó cã thÓ
nhËn ra Sector cÇn t×m. Cã hai c¸ch ®Ó ®Þnh vÞ Sector, ®ã lµ :
+ §¸nh sè Sector b»ng ph−¬ng ph¸p cøng (Hard sectoring): Nh÷ng lç ®Òu nhau sÏ ®−îc
bÊm xung quanh ®Üa vµ mçi lç nh− thÕ cã ý nghÜa ®¸nh dÊu sù b¾t ®Çu mét Sector. Ph−¬ng
ph¸p nµy tá ra kh«ng cßn hiÖu nghiÖm khi tèc ®é truy xuÊt ®Üa ngµy cµng t¨ng.
+ §¸nh sè Sector mÒm (Soft sectoring): Ph−¬ng ph¸p nµy m hãa ®Þa chØ cña Sector thµnh d÷
liÖu cña Sector ®ã vµ ®−îc g¾n vµo tr−íc mçi Sector. V× Sector ®−îc ®¸nh sè tuÇn tù xung
quanh Track nªn ®Þa chØ cña nã ®¬n gi¶n lµ c¸c sè liªn tiÕp xung quanh Track (nh−ng ®èi víi
mét sè ®Üa ®−îc thiÕt kÕ chèng sao chÐp th× ®iÒu nµy kh¸c).
HiÖn nay, ph−¬ng ph¸p ®¸nh sè mÒm ®−îc dïng réng ri. Víi ph−¬ng ph¸p nµy, tr−íc khi ®Üa
®−îc dïng, ®Þa chØ cña Sector ph¶i ®−îc ghi vµo Sector (qu¸ tr×nh nµy ®−îc thùc hiÖn b»ng
viÖc Format ®Üa). §Þa chØ Sector nµy thùc ra chØ lµ mét phÇn th«ng tin trong d÷ liÖu ë phÇn ®Çu
Sector, ngoµi ra cßn mét sè th«ng tin kh¸c mµ thiÕt nghÜ r»ng nªu ra ë ®©y chØ lµm rèi cho ®éc
gi¶.
6/ Format vËt lÝ: Ghi toµn bé ®Þa chØ Sector, c¸c th«ng tin kh¸c vµo phÇn ®Çu cña Sector ®−îc
gäi lµ format vËt lÝ hay format ë møc thÊp, v× viÖc nµy ®−îc thùc hiÖn chØ b»ng phÇn cøng cña
bé ®iÒu khiÓn ®Üa. Trong qu¸ tr×nh format, phÇn mÒm sÏ b¾t bé ®iÒu khiÓn ®Üa tiÕn hµnh format
víi nh÷ng th«ng sè vÒ kÝch th−íc cña mét Sector ... cßn c«ng viÖc cßn l¹i tù bé ®iÒu khiÓn ®Üa
ph¶i lµm.
Format vËt lÝ ph¶i ®−îc thùc hiÖn tr−íc khi ®Üa ®−îc ®−a vµo sö dông. Mét qu¸ tr×nh ®éc lËp
thø hai - format logic - còng ph¶i ®−îc thùc hiÖn ngay sau ®ã tr−íc khi ®Üa chuÈn bÞ chøa d÷
liÖu. ë møc nµy, tïy theo c¸ch tæ chøc cña tõng hÖ ®iÒu hµnh, nã sÏ chia ®Üa thµnh tõng vïng
t−¬ng øng.
Trong thùc tÕ, hÇu nh− kh«ng ai chó ý ®Õn vÉn ®Ò nµy v× ® cã lÖnh Format cña DOS. Tuy
nhiªn ®Ó gi¶i thÝch c«ng viÖc cô thÓ cña lÖnh nµy th× hÇu nh− Ýt ai quan t©m ®Õn. Cã thÓ gi¶i
thÝch nh− sau :
+ Víi ®Üa mÒm: mét ®Üa cho dï ® ®−îc format lÇn nµo hay ch−a ®Òu ®−îc ®èi xö “b×nh
®¼ng “nh− nhau, nghÜa lµ ®Çu tiªn DOS sÏ tiÕn hµnh forrmat vËt lÝ, sau ®ã sÏ lµ format logic
nh»m khëi t¹o c¸c vïng hÖ thèng vµ d÷ liÖu.
DÔ thÊy, ®èi víi mét ®Üa ® qua mét lÇn format, qu¸ tr×nh format vËt lÝ sÏ kh«ng cßn cÇn thiÕt,
trõ tr−êng hîp muèn format vËt lÝ, do ®ã nÕu chØ cã qu¸ tr×nh format logic sÏ lµm gi¶m thêi
gian format mét ®Üa. ý t−ëng nµy, thùc tÕ ® ®−îc c¸c phÇn mÒm chuyªn dông khai th¸c rÊt
kÜ. PCformat cña Central point, SafeFormat cña Norrton .... ®Òu cã nh÷ng option cho phÐp chØ
®Þnh t¸c vô nµy.
9
+ §èi víi ®Üa cøng: mäi ®Üa cøng tr−íc khi ®−a ra thÞ tr−êng ®Òu ® ®−îc format vËt lÝ vµ
do ®ã kh«ng cã mét lÝ do nµo ®Ó format l¹i nÕu kh«ng thÊy cÇn thiÕt. §èi víi tr−êng hîp nµy,
DOS kh«ng cÇn ph¶i format vËt lý mµ ®¬n gi¶n chØ tiÕn hµnh format logic. Trong tr−êng hîp
nµy, tèc ®é format trªn ®Üa cøng sÏ rÊt nhanh chø kh«ng × ¹ch nh− trªn ®Üa mÒm. Sau khi ®
qua format, ®Üa cña chóng ta giê ®©y ® s½n sµng chøa d÷ liÖu.
II - CÊu Tróc Logic.
ë phÇn trªn, ta ® cã ®Ò cËp ®Õn format logic, nh−ng l¹i kh«ng ®−a ra mét chi tiÕt nµo, sau ®©y
ta sÏ lÇn l−ît xÐt chi tiÕt ®Õn chóng. Râ rµng, ®èi víi mét ®Üa cã dung l−îng lín, viÖc qu¶n lÝ
d÷ liÖu nh− thÕ nµo cho hiÖu qu¶ vµ nhanh chãng lµ mét vÊn ®Ò phøc t¹p. Do ®ã, mçi hÖ ®iÒu
hµnh cÇn thiÕt ph¶i tæ chøc cho m×nh mét vµi cÊu tróc nµo ®ã gióp cho viÖc kiÓm so¸t ®Üa ®−îc
nhanh vµ chÝnh x¸c, cho biÕt phÇn nµo ® dïng ®Ó chøa d÷ liÖu, phÇn nµo cßn trèng .... C¸ch
ghi nhí nh÷ng cÊu tróc nh− thÕ lªn ®Üa ®−îc gäi lµ format logic ®Üa. Dï lµ lo¹i ®Üa nµo, DOS
vÉn tæ chøc ®Üa thµnh c¸c phÇn sau: Boot Sector, b¶ng FAT (file allocation table), Root
directory vµ phÇn d÷ liÖu (ba phÇn ®Çu ®«i khi ®−îc gäi d−íi tªn Vïng hÖ thèng).
Trªn ®Üa cøng, víi dung l−îng qu¸ lín, cã thÓ chia thµnh tõng phÇn kh¸c nhau ®−îc gäi lµ
Partition, do ®ã cßn ph¶i thªm mét phÇn thø 5 Partition table. Sau ®©y, chóng ta sÏ lÇn l−ît
kh¶o s¸t tõng phÇn mét.
1/ Boot Sector: Lu«n chiÕm Sector ®Çu tiªn trªn Track 0, Side 1 cña ®Üa, tuy vËy, ®iÒu nµy
còng chØ tuyÖt ®èi ®óng trªn c¸c ®Üa mÒm, cßn ®èi víi ®Üa cøng, vÞ trÝ nµy ph¶i nh−êng l¹i cho
Partition table.
Boot sector nµy sÏ ®−îc ®äc vµo ®Þa chØ 0:07C00 sau khi m¸y thùc hiÖn xong qu¸ tr×nh POST.
QuyÒn ®iÒu khiÓn sÏ ®−îc trao l¹i cho ®o¹n m n»m trong Boot sector. §o¹n m nµy cã nhiÖm
vô t¶i c¸c file hÖ thèng vµo nÕu cã. Ngoµi ra, Boot sector cßn chøa mét b¶ng tham sè quan
träng ®Õn cÊu tróc ®Üa, b¶ng nµy ®−îc ghi vµo trong qu¸ tr×nh format logic ®Üa vµ ngay c¶ ®èi
víi nh÷ng ®Üa kh«ng ph¶i lµ ®Üa boot ®−îc .
a. CÊu tróc cña b¶ng tham sè ®Üa BPB (Bios Parameter Block): B¶ng tham sè nµy ë offset 0B
cña Boot sector vµ cã cÊu tróc sau :
offset Size Néi dung
+0 3 JMP xx:xx LÖnh nh¶y gÇn ®Õn ®Çu ®o¹n m boot
+3 8 Tªn c«ng ty hay version.
+0Bh 2 SectSiz Sè byte 1 sector <--------- Start of BPB.
+DH 1 ClustSiz Sè sector mçi cluster.
+Eh 2 ResSecs Sè sector dµnh riªng (sector tr−íc FAT).
+10h 1 FatCnt Sè b¶ng FAT.
+11h 2 RootSiz Sè ®Çu vµo tèi ®a cho Root (32 byte cho mçi ®Çu
vµo).
+13h 2 TotSecs Tæng sè sector trªn ®Üa (hay partition).
+15h 1 Media Media descriptor ®Üa (gièng nh− byte ®Çu b¶ng
FAT.
+16h 2 FatSize Sè l−îng sector cho mét b¶ng FAT
<----------- end of BPB .
+18h 2 TrkSecs Sè sector trªn mçi track.
+1Ah 2 HeadCnt Sè ®Çu ®äc ghi.
+1Ch 2 HindSec Sè sector dÊu mÆt (®−îc dïng trong cÊu tróc
10
www.updatesofts.com
partition).
+1Eh §Çu ®o¹n m trong Boot sector.
+1Ch 4 HindSec Sè sector dÊu mÆt (® ®−îc ®iÒu chØnh lªn sè 32 bit)
+20h 4 TotSecs Tæng sè sector trªn ®Üa nÕu gi¸ trÞ ë offset 13h b»ng
0.
+24h 1 PhsDsk Sè ®Üa vËt lÝ (0: ®Üa mÒm, 80h: ®Üa cøng)
+25h 1 Resever Dµnh riªng.
+26h 1 Dos4_ID KÝ hiÖu nhËn diÖn cña DOS 4.xx (cã gi¸ trÞ 29h).
+27h 4 Serial Mét sè nhÞ ph©n 32 bit cho biÕt Serial number.
+2Bh Bh Volume Volume label.
+36h 8 Reserve Dµnh riªng.
+3Eh §Çu ®o¹n m ch−¬ng tr×nh.
§èi víi DOS 4.xx, do sè l−îng sector qu¶n lÝ ®−îc kh«ng cßn n»m trong giíi h¹n sè 16 bit, do
®ã gi¸ trÞ trong offset 13h ® trë nªn ‘chËt hÑp’. B¾t ®Çu tõ DOS 4.xx, cÊu tróc cña b¶ng cã
mét sè söa ®æi vµ bæ xung nho nhá, tuy vËy, vÉn kh«ng lµm mÊt ®i cÊu tróc tr−íc ®ã. ë ®©y
chØ cã mét ®iÓm cÇn l−u ý lµ gi¸ trÞ tæng sè sector trªn ®Üa, nÕu sè sector vÉn cßn lµ mét sè 16
bit, vïng ë offset 13h vÉn cßn dïng ®Õn, trong tr−êng hîp ng−îc l¹i, vïng nµy ph¶i ®−îc g¸n
lµ 0 vµ gi¸ trÞ míi ®−îc l−u gi÷ t¹i offset 20h (dÔ thÊy c¸c ®Üa mÒm vÉn cã néi dung nh− tr−íc
®©y).
b. §o¹n m: do Boot sector chØ chiÕm ®óng mét sector, nghÜa lµ chØ cã ®óng 512 byte, trõ ®i
cho b¶ng tham sè BPB, phÇn cßn l¹i vÉn cßn qu¸ Ýt cho mét ch−¬ng tr×nh tù xoay xë lµm ®ñ
mäi viÖc. C¸c ®o¹n m sau d−íi DOS ®Òu lµm c¸c c«ng viÖc sau ®©y:
+ Thay l¹i b¶ng tham sè ®Üa mÒm (ng¾t 1Eh).
+ §Þnh vÞ vµ ®äc sector ®Çu tiªn cña Root vµ ®Þa chØ 0:0500h.
+ Dß t×m vµ ®äc hai file hÖ thèng vµo nÕu cã.
Cã thÓ biÓu diÔn b»ng l−u ®å sau
Thay ng¾t 1Eh
§äc sector root vµo
? SYS ------------ > Non system disk
N¹p file hÖ thèng vµo
JMP FAR 070:0
2/ FAT (file allocation table): §©y lµ mét trong hai cÊu tróc quan träng nhÊt (cÊu tróc thø hai
lµ Root) mµ DOS khëi t¹o trong qu¸ tr×nh format logic ®Üa. CÊu tróc nµy dïng ®Ó qu¶n lÝ file
trªn ®Üa còng nh− cho biÕt sector nµo ® háng. ë møc nµy DOS còng ®−a ra mét sè kh¸i niÖm
míi :
a. Cluster: Khi ®Üa ®−îc format fogic, ®¬n vÞ nhá nhÊt trªn ®Üa mµ DOS cã thÓ qu¶n lÝ ®−îc lµ
sector (theo DOS tù qui ®Þnh - kÝch th−íc cña mét sector còng ® cè ®Þnh lµ 512 byte). Nh−
thÕ, DOS cã thÓ qu¶n lÝ tõng sector mét xem nã cßn dïng ®−îc hay kh«ng. Tuy nhiªn, mét ®Üa
cã dung l−îng cao (th−êng lµ ®Üa cøng), sè sector qu¸ lín kh«ng thÓ qu¶n lÝ theo c¸ch nµy mµ
thay vµo ®ã, DOS ®−a ra mét kh¸i niÖm Cluster: lµ tËp hîp nhiÒu sector, do ®ã, thay v× qu¶n
qu¶n lÝ nhiÒu sector, DOS b©y giê chØ qu¶n lÝ trªn c¸c cluster. Râ rµng sè l−îng cluster sÏ
gi¶m ®i nhiÒu nÕu ta t¨ng sè l−îng sector cho mét cluster.
b. Kh¸i niÖm vÒ FAT: VÊn ®Ò phøc t¹p vµ then chèt cña viÖc qu¶n lÝ file trªn ®Üa lµ lµm sao
qu¶n lÝ ®−îc sù thay ®æi kÝch th−íc c¸c file. §©y lµ mét ®iÒu tÊt nhiªn v× khi lµm viÖc víi m¸y,
®ßi hái ta ph¶i truy xuÊt ®Õn file trªn ®Üa.
11
Gi¶ sö, cã mét file cã kÝch th−íc 2250 byte ®−îc chøa trªn ®Üa cã dung l−îng 1.2 Mb (®èi víi
lo¹i ®Üa nµy, mét cluster chØ lµ mét sector), ta ph¶i dïng tíi 5 cluster ®Ó chøa file nµy, 4 cluster
®Çu tiªn ® chøa 2048 byte, sector cßn l¹i chØ chøa 2250 - 2048 = 202 byte (v× râ rµng, ta
kh«ng thÓ ghi mét khèi nhá h¬n mét sector). TiÕp theo, file thø hai ®−îc ghi lªn 7 sector kÕ
®ã. B©y giê, vÊn ®Ò sÏ khã kh¨n nÕu ta muèn bæ xung thªm 460 byte vµo file ®Çu. Lµm thÕ nµo
cho tèi −u ? Râ rµng, ta chØ cã thÓ bæ xung vµo sector cuèi file mét thªm 512 - 202 = 310 byte,
nh− thÕ vÉn d− l¹i 460 - 310 = 150 byte mµ kh«ng biÕt ph¶i ®Ó vµo ®©u. Ghi vµo sector thø s¸u
ch¨ng ? Kh«ng thÓ ®−îc v× sector nµy ® ®−îc dµnh cho file thø hai råi. C¸ch gi¶i quyÕt t−ëng
chõng ®¬n gi¶n lµ dêi toµn bé file nµy xuèng mét sector . Tuy nhiªn, ®©y còng kh«ng ph¶i lµ
mét ph−¬ng ph¸p tèi −u v× nÕu file thø hai chiÕm ®Õn 1Mb. §Ó ghi thªm 150 byte mµ cÇn ph¶i
dêi (thùc chÊt lµ ph¶i ®äc/ghi l¹i) ®i 1Mb th× thËt lµ qu¸ tèn kÐm vµ kh«ng thiÕt thùc chót nµo.
Ph−¬ng ph¸p gi¶i quyÕt tèt nhÊt ® ®−îc DOS ®Ò nghÞ: dïng mét b¶ng l−u tr¹ng th¸i c¸c sector
(FAT) cho phÐp DOS biÕt ®−îc sector nµo cßn dïng ®−îc, sector nµo ® dïng ...... do ®ã, dÔ
t×m ®−îc mét sector nµo ®ã cßn trèng ®Ó ph©n bæ cho file míi.
Nh−ng ®Ó qu¶n lÝ nh÷ng sector nh− thÕ cÇn qu¸ nhiÒu byte cho FAT. Gi¶ sö mét ®Üa cøng cã
dung l−îng 32 Mb sÏ cã kho¶ng 64 Kb sector (32Mb/512byte). NÕu mét sector cÇn ph¶i tèn
®Õn 2 byte ®Ó qu¶n lÝ th× ph¶i mÊt 2*64=128Kb cho b¶ng FAT. ThÕ nh−ng, ®Ó tiÖn cho viÖc
truy xuÊt, phÇn lín FAT sÏ ®−îc t¶i vµo bé nhí trong, nh− thÕ kÝch th−íc qu¸ lín còng lµm
gi¶m ®i tèc ®é truy xuÊt. V× vËy, ®©y còng lµ lý do mµ DOS ® ®−a ra kh¸i niÖm cluster nh»m
gi¶m bít ®¸ng kÓ kÝch th−íc cña FAT.
Lµ mét s¶n phÈm cña DOS, hä cã toµn quyÒn ®Þnh ®o¹t ®Ó cã bao nhiªu sector cho mét
cluster, do vËy, sè nµy sÏ thay ®æi tuy thuéc vµo dung l−îng cña ®Üa sao cho tèi −u nhÊt. Víi
c¸c ®Üa mÒm, th−êng sè sector cho mét cluster tõ 1 ®Õn 2 sector, trªn ®Üa cøng, con sè nµy lµ 4
hay 8.
c. §¸nh sè sector - ®¸nh sè cluster: Nh− ta ® biÕt, bé ®iÒu khiÓn ®Üa tham chiÕu mét sector
trªn ®Üa th«ng qua 3 tham sè: Cylinder, Head, vµ Sector (v× vËy, ®«i khi nã cßn ®−îc biÕt
d−íi tªn gäi hÖ 3 trôc to¹ ®é). Tuy nhiªn, hÖ trôc nµy l¹i kh«ng thuËn lîi cho ng−êi sö dông v×
hä ch¼ng cÇn ph¶i biÕt cÊu tróc chi tiÕt cña ®Üa: gåm bao nhiªu Track, bao nhiªu head, còng
nh− bao nhiªu sector trªn mét Track ra sao. §Ó tr¸nh sù bÊt tiÖn nµy, DOS tiÕn hµnh ®Þnh vÞ d÷
liÖu trªn ®Üa chØ theo mét chiÒu: sector. DOS ®¬n gi¶n lµ ®¸nh sè sector lÇn l−ît b¾t ®Çu tõ
sector 1, Track 0, head 0 cho ®Õn hÕt sè sector trªn track nµy, råi chuyÓn sang sector 1 cña
Side 1. TÊt c¶ c¸c sector cña mét Cylinder sÏ ®−îc ®¸nh sè tuÇn tù tr−íc khi DOS chuyÓn sang
track kÕ. ViÖc ®¸nh sè nµy thùc chÊt còng nh»m tèi −u viÖc di chuyÓn ®Çu ®äc cña ®Üa, khi ®
hÕt sector trªn track nµy míi chuyÓn ®Çu ®äc sang track kÕ. (V× lÝ do nµy, mét sè phÇn mÒm ®
t×m c¸ch dån file l¹i trªn c¸c sector liªn tiÕp nh»m t¨ng tèc ®é truy xuÊt còng nh− kh¶ n¨ng
kh«i phôc file khi bÞ sù cè nh− SpeedDisk cña Norton Untility). C¸ch ®¸nh sè nh− vËy ®−îc
gäi lµ ®¸nh sè sector logic, kh¸c víi sector vËt lÝ, sector logic b¾t ®Çu ®Õm tõ 0.
Mét khi sector ® ®−îc ®¸nh sè, cluster còng ®−îc ®¸nh sè theo. Nh− ta ® biÕt: FAT chØ qu¶n
lÝ nh÷ng cluster ®Ó l−u chøa d÷ liÖu nªn cluster b¾t ®Çu ®−îc ®¸nh sè tõ nh÷ng sector ®Çu tiªn
cña phÇn d÷ liÖu. NÕu ®Üa ®−îc qui ®Þnh 2 sector cho mét cluster th× hai sector ®Çu tiªn cña
phÇn d÷ liÖu (phÇn b¾t ®Çu ngay sau Root) sÏ ®−îc ®¸nh sè lµ 2, hai sector kÕ tiÕp lµ cluster 3
vµ cø thÕ cho ®Õn hÕt.
V× vËy, nÕu mét ®Üa cã 15230 cluster cho phÇn d÷ liÖu th× sector cuèi cïng cña ®Üa sÏ ®−îc
®¸nh sè 15231.
d. Néi dung cña FAT: Mçi cluster trªn ®Üa ®−îc DOS qu¶n lÝ b»ng mét entry (®Çu vµo), hai
entry ®Çu tiªn ®−îc dïng ®Ó chøa th«ng tin ®Æc biÖt: byte nhËn d¹ng (®©y còng lµ lÝ do cluster
®−îc ®¸nh sè tõ 2), entry thø 3 chøa th«ng tin vÒ cluster 2, cø thÕ tiÕp tôc.... Khi format logic
®Üa, trong khi x©y dùng FAT, DOS sÏ lÇn l−ît tiÕn hµnh ®äc tõng sector lªn, nÕu gÆp lçi øng
víi cluster nµo, cluster ®ã sÏ ®−îc ®¸nh dÊu lµ háng.
Khi qu¶n lÝ file, lµm sao DOS cã thÓ biÕt nh÷ng cluster nµo lµ cña file nµo? RÊt ®¬n gi¶n: gi¸
trÞ entry cña cluster nµy chøa gi¸ trÞ lµ sè thø tù entry tiÕp theo nã, cø thÕ, c¸c cluster cña file
12
www.updatesofts.com
t¹o thµnh mét chuçi (chain) cho ®Õn khi gÆp dÊu hiÖu kÕt thóc. Tïy theo kÝch th−íc cña entry
lµ 12 hay 16 bit, gi¸ trÞ cña cluster cã thÓ biÕn thiªn theo b¶ng :
Gi¸ trÞ ý nghÜa
0 Cluster cßn trèng, cã thÓ ph©n bæ ®−îc.
(0)002-(F)FEF Cluster ®ang chøa d÷ liÖu cña mét file nµo ®ã
(0)002 gi¸ trÞ cña nã lµ sè cluster kÕ tiÕp trong chain
(F)FF0-(F)FF6 Dµnh riªng kh«ng dïng
(F)FF7 Cluster háng
(F)FF8-(F)FFF Cluster cuèi cïng cña chain
Mét vÝ dô nh»m minh häa chain trong FAT:
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
00 ID FF 03 04 05 FF 00 00 09 0A 0B 15 00 00 00 00
10 00 00 00 00 00 16 17 19 F7 1A 1B FF 00 00 00 00
Trong vÝ dô trªn, ‘entry’ 0 vµ 1 ®−îc dµnh riªng cho byte nh©n diÖn: FDh (®Üa 360Kb), gi¸ trÞ
cña cluster 2 trá ®Õn cluster 3, gi¸ trÞ cña cluster 3 trá ®Õn cluster 4 ... cho ®Õn khi cluster 5
chøa gi¸ trÞ lµ 0FFh cho biÕt ® lµ cuèi file, cluster 6 vµ 7 cã gi¸ trÞ 0 cho biÕt hai cluster nµy
ch−a dïng tíi, cã thÓ ph©n bæ nÕu cÇn. Cluster 18 cã gi¸ trÞ 0F7h cho biÕt ® ®¸nh dÊu bá. Tuy
nhiªn, ë ®©y l¹i xuÊt hiÖn mét c©u hái kh¸c: lµm sao x¸c ®Þnh cluster nµo b¾t ®Çu mét file?
(còng lµ ®Çu vµo mét chain) vµ kÝch th−íc thËt sù cña file (v× râ rµng sector cuèi cïng kh«ng
dïng hÕt). §iÒu nµy sÏ ®−îc DOS ®Ò cËp ®Õn trong cÊu tróc tiÕp theo - cÊu tróc Root.
e. Ph©n lo¹i FAT - §Þnh vÞ cluster: Gi¶ sö ta cã mét ®Üa 360 Kb, cã kho¶ng 720 sector, nÕu sö
dông 2 sector cho mét cluster, vµ nh− thÕ tèi ®a còng chØ 720/2=360 cluster. §Ó qu¶n lÝ sè
l−îng entry kh«ng lín l¾m nµy, ta ph¶i cÇn ®Õn mét entry bao nhiªu bÝt ?
Râ rµng, víi kÝch th−íc mét byte, ta kh«ng thÓ qu¶n lÝ ®−îc v× gi¸ trÞ tèi ®a mµ mét byte cã
thÓ biÓu diÔn ®−îc lªn tíi tèi ®a 255 < 360. Nh−ng nÕu dïng mét word ®Ó biÓu diÔn th× l¹i qu¸
thõa v× gi¸ trÞ tèi ®a cña nã lªn tíi 65535. TÊt nhiªn lµ qu¸ lín so víi 360 cluster mµ ta ®Þnh
biÓu diÔn. C¸ch tèt nhÊt lµ lÊy kÝch th−íc trung gian: 12bit (mét byte r−ìi). Râ rµng, kÝch
th−íc nµy rÊt xa l¹ víi mäi ng−êi, kÓ c¶ nh÷ng th¶o ch−¬ng viªn hÖ thèng v× chØ cã kh¸i niÖm
byte, bit, word hay thËm chÝ double word mµ th«i. Dï vËy, kh¸i niÖm FAT12 bit nµy vÉn ®−îc
dïng cho ®Õn nay do tÝnh hiÖu qu¶ cña nã trªn c¸c ®Üa cã dung l−îng nhá. Víi 12 bit cã thÓ
qu¶n lÝ tèi ®a 4095 cluster, sè nµy kh«ng ph¶i lµ nhá.
Tuy nhiªn, víi sù ra ®êi cña c¸c ®Üa cøng dung l−îng cao: 20Mb, 40 Mb .... ® lµm xuÊt hiÖn
nh−îc ®iÓm cña FAT12: chØ qu¶n lÝ tèi ®a 4095 cluster, do ®ã víi sè l−îng sector trªn ®Üa
cµng nhiÒu th× chØ cã mét c¸ch gi¶i quyÕt lµ t¨ng sè l−îng sector trong mét cluster. Nh−ng
c¸ch nµy còng kh«ng ph¶i lµ tèi −u v× sè byte cÊp ph¸t thõa cho 1 file sÏ t¨ng lªn nhanh khi sè
sector trong cluster t¨ng lªn. V× lÝ do nµy, FAT 16 bit ® ra ®êi vµ sè l−îng cluster qu¶n lÝ
®−îc ® t¨ng lªn 65535 cluster.
Víi sù xuÊt hiÖn cña hai lo¹i FAT, vÊn ®Ò l¹i trë nªn phøc t¹p: c¸ch ®Þnh vÞ hai lo¹i FAT nµy
hoµn toµn kh¸c nhau. Tuy vËy cã thÓ tÝnh to¸n nh− sau :
* §èi víi FAT 16 bit: mçi entry cña cluster chiÕm hai byte nªn vÞ trÝ cña cluster tiÕp theo sÏ
b»ng gi¸ trÞ cluster hiÖn thêi nh©n hai.
* §èi víi FAT 12 bit: v× mçi entry chiÕm 1.5 byte nªn vÞ trÝ cña cluster tiÕp theo trªn FAT
b»ng gi¸ trÞ cluster hiÖn thêi nh©n víi 1.5.
Nh−ng gi¸ trÞ tiÕp theo ph¶i ®−îc tÝnh l¹i v× nã chØ chiÕm 12 bit trong khi gi¸ trÞ lÊy ra lµ 1
word (trong c¸c lÖnh m¸y, rÊt tiÕc kh«ng cã lÖnh nµo cho phÐp lÊy mét gi¸ trÞ 12 bit c¶). C¸ch
gi¶i quyÕt nh− sau :
+ NÕu sè thø tù sè cluster lµ ch½n, gi¸ trÞ thùc tÕ lµ 12 bit thÊp.
13
+ NÕu sè thø tù sè cluster lµ lÎ, gi¸ trÞ thùc tÕ lµ 12 bit cao.
TÊt c¶ c¸c ®Üa mÒm vµ nh÷ng ®Üa cøng cã dung l−îng d−íi 12Mb vÉn cßn dïng FAT 12 bit.
§o¹n m sau minh häa c¸ch ®Þnh vÞ cluster:
LocateCluster proc near
;Chøc n¨ng: tiÕn hµnh ®Þnh gi¸ trÞ cña cluster kÕ trong FAT_Buffer ®−a vµo sè cluster vµ ;lo¹i
FAT trong biÕn FAT_type, bit 2 cña biÕn nµy = 1 cho biÕt lo¹i FAT lµ 16 bit.
;Vµo SI = sè cluster ®−a vµo.
;Ra DX = sè cluster tiÕp theo.
mov AX, 3
test FAT_type ;FAT thuéc lo¹i nµo
je FAT_12 ;NÕu 12bit sÏ nh©n víi 3
inc AX ;NÕu 16bit sÏ nh©n víi 4
FAT_12:
mul SI
shr AX, 1 ;Chia l¹i cho 2 ®Ó ra ®óng sè
mov BX, AX
mov DX, FAT_buffer[BX] ;DX=gi¸ trÞ cña cluster kÕ
test FAT_type, 4 ;FAT thuéc lo¹i nµo?
jne FAT_16 ;NÕu lµ FAT 12 sÏ tÝnh tiÕp
mov ch, 4
test SI, 1 ;Cluster ®−a vµo lµ ch½n hay lÎ
je chan
shr DX, CL ;ChuyÓn 4 bit cao thµnh thÊp
Chan:
and DH, 0Fh ;T¾t 4 bit cao
FAT_16:
ret
Locate_cluster endp
(TrÝch PingPong virus).
3/ Root directory: Lµ cÊu tróc bæ xung cho FAT vµ n»m ngay sau FAT. NÕu FAT nh»m môc
®Ých qu¶n lÝ ë møc thÊp: tõng sector, xem nã cßn dïng ®−îc hay kh«ng, ph©n phèi nÕu cÇn th×
Root directory kh«ng cÇn quan t©m mµ chØ nh»m qu¶n lÝ file, mét kh¸i niÖm cao h¬n, mµ
kh«ng cÇn biÕt nã gåm nh÷ng sector nµo. Root cã nhiÖm vô l−u gi÷ th«ng tin vÒ file trªn ®Üa.
Mçi file ®−îc ®Æc tr−ng bëi mét ®Çu vµo trong Root Dir. Kh«ng nh− FAT, mçi entry cña Root
Dir cã kÝch th−íc x¸c ®Þnh 32 byte l−u gi÷ nh÷ng th«ng tin sau :
Offset K/th−íc Néi dung
+0 8 Tªn file, ®−îc canh tr¸i
+8 3 PhÇn më réng, ®−îc canh tr¸i
+0Bh 1 Thuéc tÝnh file
+0Ch 0Ah Dµnh riªng
+16h 2 Thêi gian t¹o hay bæ xung sau cïng
18h 2 Ngµy t¹o hay bæ xung sau cïng
1AH 2 Sè cluster b¾t ®Çu cña file trong FAT
1Ch 4 KÝch th−íc file (byte)
14
www.updatesofts.com
Thuéc tÝnh file: m« t¶ thuéc tÝnh mµ file sÏ mang, nh÷ng thuéc tÝnh nµy lµ Read Only,
Hidden, System, Volume, SubDir vµ Attrive. C¸c bit biÓu diÔn nh÷ng thuéc tÝnh nµy nh− sau :
byte thuéc tÝnh:
+ bit 0 = 1: file chØ ®äc.
+ bit 1 = 1: file Èn.
+ bit 2 = 1: file hÖ thèng.
+ bit 3 = 1: Volume label
+ bit 4 = 1: SubDir.
+ bit 5 = 1: file ch−a ®−îc backup.
Entry ®Çu file trong FAT còng ®−îc l−u gi÷ t¹i ®©y cho phÐp t¨ng tèc ®é tÝnh to¸n vµ truy xuÊt
file còng nh− kÝch th−íc file cho biÕt kÝch th−íc cô thÓ cña tõng file h¬n lµ sè cluster qu¸ trõu
t−îng.
Néi dung cña th− môc gèc: cã thÓ lµ mét file hay mét th− môc con (SubDir). Ta sÏ ®i s©u vµo
sù kh¸c nhau gi÷a th− môc gèc vµ th− môc con. Th− môc gèc lu«n n»m trong vïng hÖ thèng,
ngay sau FAT, kÝch th−íc (sè sector) dµnh cho Root ®−îc t¹o ra trong khi format logic vµ
kh«ng thay ®æi trong suèt qu¸ tr×nh sö dông, do ®ã, sè entry trong Root bÞ giíi h¹n. Ng−îc l¹i,
SubDir l¹i n»m trong vïng d÷ liÖu nªn kÝch th−íc kh«ng bÞ h¹n chÕ, nã cã thÓ ®−îc t¹o ra,
thªm bít, hñy .... nh− mét file. Thùc chÊt, SubDir lµ cÊu tróc ‘lai’ gi÷a file vµ Root: nã cã thÓ
®−îc ph©n phèi cluster ®Ó chøa d÷ liÖu, t¨ng gi¶m kÝch th−íc nh− file, tuy nhiªn, d÷ liÖu cña
nã l¹i lµ c¸c entry nh− Root Dir. ChÝnh cÊu tróc cña SubDir lµm cho cÊu tróc toµn th− môc nãi
chung kh«ng bÞ h¹n chÕ (t©t nhiªn, còng bÞ h¹n chÕ do dung l−îng ®Üa) t¹o thµnh mét cÊu tróc
c©y cho phÐp thi hµnh gi¶i thuËt truy xuÊt trªn c©y gän vµ ®Çy hiÖu qu¶.
Còng nh− nh÷ng entry cña FAT, entry cña Root còng mang nh÷ng gi¸ trÞ nµo ®ã ®Ó chØ ra
entry nµy hoÆc ® dïng, cßn trèng hay ® bá ®i .... KÝ tù ®Çu tiªn cña tªn file ph¶n ¸nh ®iÒu
nµy. NÕu mét entry b¾t ®Çu b»ng byte cã gi¸ trÞ:
0: entry cßn trèng ch−a ®−îc dïng, do ®ã, cho phÐp DOS biÕt nã ® ®¹t tíi entry cuèi cïng.
‘.’ (dÊu chÊm): kÝ tù nµy ë byte ®Çu cho biÕt entry nµy dµnh riªng cho DOS, ®−îc dïng trong
cÊu tróc th− môc con.
0E5: kÝ tù sigma nµy th«ng b¸o cho DOS biÕt entry nµy cña mét file bÞ xãa. Khi xãa mét file,
thùc chÊt DOS chØ d¸nh dÊu byte ®Çu tiªn lµ 05E vµ xãa chain cña file trong FAT. Do ®ã, cã
thÓ kh«i phôc l¹i file nÕu ch−a bÞ file kh¸c ®Ì lªn.
Mét kÝ tù bÊt k×: lµ tªn mét file, entry nµy ®ang l−u gi÷ th«ng tin vÒ mét file nµo ®ã.
4/ CÊu tróc Partition table: Gi¸ mét ®Üa cøng t−¬ng ®èi m¾c, mÆt kh¸c, dung l−îng ®Üa qu¸
lín còng lµm DOS kh«ng qu¶n lÝ næi (chØ tõ DOS 3.4 trë ®i, míi cã kh¶ n¨ng qu¶n lÝ trªn
32Mb), vµ nhÊt lµ muèn t¹o mét ®Üa víi nhiÒu hÖ ®iÒu hµnh kh¸c nhau, do ®ã ®ßi hái ph¶i chia
®Üa cøng thµnh tõng phÇn gäi lµ Partition.
C¸c cÊu tróc ®Üa mµ ta tr×nh bµy trªn chØ hoµn toµn ®óng ®èi víi ®Üa mÒm, cßn ®Üa cøng, nÕu
® ®−îc chia thµnh c¸c Partition th× cÊu tróc trªn vÉn ®óng trong c¸c Partition mµ DOS qu¶n lÝ.
C¸c th«ng tin vÒ ®iÓm b¾t ®Çu vµ kÝch th−íc cña tõng partition ®−îc ph¶n ¸nh trong Partition
table. Partition table nµy lu«n t×m thÊy ë sector ®Çu tiªn trªn ®Üa (track 0, Side 0, sector 1) thay
v× Boot sector (cßn ®−îc gäi d−íi tªn Master boot).
Nh− ® biÕt, sector nµy sÏ ®−îc ®äc lªn ®Çu tiªn vµ trao quyÒn ®iÒu khiÓn, do ®ã, ngoµi
Partition table, Master boot cßn chøa ®o¹n m cho phÐp x¸c ®Þnh partition nµo ®ang ho¹t ®éng
vµ chØ duy nhÊt cã mét partition ho¹t ®éng mµ th«i.
Partition table n»m ë offset 01BE, mçi partition ®−îc ®Æc tr−ng b»ng mét entry 16 byte ph¶n
¸nh nh÷ng th«ng tin vÒ nã. Mçi entry cã cÊu tróc nh− sau:
Offset Size Néi dung
15
+0 1 Cê hiÖu boot: 0=kh«ng active; 80h=active
+1 1 Sè head b¾t ®Çu
+2 2 Sè sector vµ Cylinder cña boot sector
+4 1 M hÖ thèng: 0=unknow; 1=FAT 12 bit; 4= 16 bit
+5 1 Sè head kÕt thóc.
+6 2 Sè sector vµ Cylinder cña sector cuèi cïng.
+8 4 Sè sector b¾t ®Çu t−¬ng ®èi. (low high)
+0Ch 4 Tæng sè sector trªn partition.(low high)
+10h §Çu vµo cña mét partition míi hay tËn cïng cña b¶ng
nÕu cã gi¸ trÞ 0AA55.
III - C¸c T¸c Vô Truy XuÊt §Üa.
C¸c phÇn trªn ® ®Ò cËp kh¸ chi tiÕt ®Õn cÊu tróc vËt lÝ còng nh− cÊu tróc logic cña ®Üa. TÊt
nhiªn, c¸c b¹n sÏ hái: øng víi cÊu tróc nh− thÕ, viÖc truy xuÊt ph¶i nh− thÕ nµo? LiÖu r»ng víi
hai c¸ch tæ chøc ®Üa (vËt lÝ vµ logic theo DOS), viÖc truy xuÊt cã g× kh¸c nhau? PhÇn sau ®©y
sÏ gi¶i quyÕt c©u hái nµy.
1/ Møc BIOS (Basic Input/Output System): T−¬ng øng víi møc cÊu tróc vËt lÝ, bé ®iÒu khiÓn
®Üa còng ®−a ra c¸c kh¶ n¨ng cho phÐp truy xuÊt ë møc vËt lÝ. C¸c chøc n¨ng nµy ®−îc thùc
hiÖn th«ng qua ng¾t 13h, víi tõng chøc n¨ng con trong thanh ghi AH. C¸c chøc n¨ng c¨n b¶n
nhÊt sÏ ®−îc kh¶o s¸t sau ®©y:
a. Reset ®Üa:
Vµo: AH = 0
DL = sè hiÖu ®Üa vËt lÝ (0=®Üa A, 1=®Üa B ..... 080=®Üa cøng).
NÕu DL lµ 80h hay 81h, bé ®iÒu khiÓn ®Üa cøng sÏ reset
sau ®ã ®Õn bé ®iÒu khiÓn ®Üa mÒm.
Ra: Kh«ng
Chøc n¨ng con nµy ®−îc dïng ®Ó reset ®Üa sau mét t¸c vô gÆp lçi.
b. LÊy m lçi cña t¸c vô ®Üa gÇn nhÊt:
Vµo: AH = 1
DL = ®Üa vËt lÝ. NÕu DL=80h lÊy lçi cña ®Üa mÒm
DL=7Fh lÊy lçi cña ®Üa cøng.
Ra: AL chøa m lçi, thùc chÊt cña lçi nµy, BIOS lÊy ra tõ vïng d÷ liÖu cña nã t¹i ®Þa
chØ 0:0441.
Mét sè m lçi th−êng gÆp ®−îc liÖt kª sau ®©y:
M lçi M« t¶
00h Kh«ng gÆp lçi
01h Sai lÖnh hoÆc lÖnh kh«ng hîp lÖ.
03h Ghi vµo ®Üa cã d¸n nhn chèng ghi.
04h Sector ID sau hay kh«ng t×m thÊy.
05h Reset gÆp lçi.
10h Bad CRC: CRC kh«ng hîp lÖ khi d÷ liÖu trªn sector ®−îc kiÓm tra.
20h Controller gÆp lçi.
40h Seek gÆp lçi, track yªu cÇu kh«ng t×m thÊy.
80h §Üa kh«ng s½n sµng.
0BBh Lçi kh«ng x¸c ®Þnh.
c. §äc sector:
16
www.updatesofts.com
Vµo: AH=2
DL=sè hiÖu ®Üa (0=®Üa A, ..., 80h=®Üa cøng 0, 81h=
®Üa cøng 1);
DH=sè ®Çu ®äc ghi.
CH= sè track (Cylinder)
CL=sè sector.
AL=sè sector cÇn ®äc/ghi (kh«ng v−ît qu¸ sè sector
trªn mét track).
ES:BX=®Þa chØ cña buffer chøa th«ng tin.
0:078=b¶ng tham sè ®Üa mÒm (®èi víi c¸c t¸c vô trªn
®Üa mÒm).
0:0101=b¶ng tham sè ®Üa cøng (®èi víi c¸c t¸c vô trªn
®Üa cøng).
Ra: CF=1 nÕu cã lçi vµ m lçi chøa trong AH.
d. Ghi sector:
Vµo: AH=3
ES:BX trá ®Õn buffer chøa d÷ liÖu
cßn l¹i t−¬ng tù nh− chøc n¨ng ®äc sector.
Ra: CF=1 nÕu cã lçi vµ m lçi chøa trong AH.
ë ®©y cÇn l−u ý ®Õn quy −íc phøc t¹p trong viÖc x¸c ®Þnh track vµ sè thø tù sector trong thanh
ghi CX. Râ rµng, sè sector trªn mét track lµ qu¸ nhá (sè sector trªn mét track lín nhÊt th−êng
gÆp hiÖn nµy còng chØ kho¶ng 34 (chiÕm cao l¾m kho¶ng 6 bit), trong khi ®ã, sè l−îng track
trªn ®Üa cã thÓ lín, do ®o, khã mµ ®−a gi¸ trÞ ®ã vµo thanh ghi CH (chØ biÓu diÔn tèi ®a 256
track mµ th«i). Gi¶i ph¸p lµ dïng thªm 2 bit trong CL lµ 2 bit cao cho sè track, lµm cho nã cã
kh¶ n¨ng biÓu diÔn ®−îc sè track tèi ®a lªn ®Õn 1024 track. S¬ ®å nh− sau:
F E D C B A 9 8 7 6 5 4 3 2 1 0
c c c c c c c c C c S s s s s s
2 bit ®−îc dïng nh− bit cao cho tr−íc
Theo s¬ ®å nµy, 2 bit cuèi cña CL ®−îc g¸n lµ 2 bit cao nhÊt thªm vµo bªn gi¸ trÞ CH. Do ®ã,
gi¸ trÞ lín nhÊt cña sector (6 bit) lµ 3Fh=63 sector trªn mét track (còng vÉn ch−a khai th¸c hÕt
kh¶ n¨ng nµy) vµ b©y giê sè track tèi ®a cã thÓ qu¶n lÝ ®−îc lªn ®Õn 3FFh=1024 track. ChÝnh
v× c¸ch quy −íc nµy, viÖc thùc hiÖn ®iÒu chØnh c¶ hai gi¸ trÞ track v¶ vµo thanh ghi CX ®ßi hái
mét gi¶i thuËt khÐo lÐo. §o¹n ch−¬ng tr×nh sau sÏ minh häa c¸ch gi¶i quyÕt nay:
Ready_CX proc near
:Chøc n¨ng: cho gi¸ trÞ 2 biÕn track vµ sector vµo thanh CX chuÈn bÞ cho t¸c vô ®äc ghi ;s¾p
tíi.
Push DX ;CÊt thanh ghi DX
mov DX, track ;DX=gi¸ trÞ track trong c¸c bit
;tõ 0 tíi 9
xchg DH, DL ;DH chøa 8bit thÊp, DL chøa 2bit
;cao
mov CL, 5 ;tuy nhiªn l¹i n»m ë bit 0 vµ 1
shl DL, CL ;CÇn ®Èy chóng sang tr¸i 6 vÞ trÝ
or DL, sector ;§−a gi¸ trÞ sector vµo DL
17
mov CX, DX ;CX ® lµm xong
pop DX ;LÊy l¹i gi¸ trÞ DX
ret
Ready_CX endp
e. Verify sector: Chøc n¨ng nµy cho phÐp kiÓm tra CRC cña c¸c sector ®−îc chän.
Vµo: AH=4
C¸c thanh ghi nh− c vµ d
Ra: CF=1 nÕu cã lçi vµ m lçi chøa trong AH.
2/ Møc DOS: C¸c chøc n¨ng cña ng¾t 13h cho phÐp ®äc bÊt k× mét sector nµo trªn ®Üa. Tuy
nhiªn, do c¸c quy ®Þnh thanh ghi phøc t¹p, nhiÒu yÕu tè ¶nh h−ëng (track, head, sector), c¸c
chøc n¨ng nµy kh«ng ®−îc ng−êi sö dông −a chuéng l¾m. Thay vµo ®ã, DOS ® cung cÊp mét
c¸ch truy xuÊt ®Üa kh¸c rÊt thuËn lîi cho ng−êi sö dông v× tÝnh ®¬n gi¶n vµ hiÖu qña.
Chøc n¨ng ®äc vµ ghi ®Üa d−íi DOS ®−îc ph©n biÖt bëi hai ng¾t 25h vµ 26h, tham sè ®−a vµo
b©y giê chØ cßn lµ sector logic. Nh−ng nh−îc ®iÓm cña nã trªn c¸c ®Üa cøng cã chia partition:
nã chØ cho phÐp truy xuÊt c¸c sector b¾t ®Çu tõ Boot sector cña partition ®ã.
§Ó tiÖn viÖc gäi tªn ®Üa, DOS kh«ng xem c¸c ®Üa mÒm ®−îc ®¸nh sè tõ 0 ®Õn 7Fh vµ ®Üa cøng
b¾t ®Çu tõ 80h nh− BIOS mµ thay vµo ®ã, gäi c¸c ®Üa theo thø tù c¸c ch÷ c¸i tõ A ®Õn Z. C¸ch
®¸nh sè nµy lµm cho ng−êi sö dông dÔ h×nh dung ra æ ®Üa ®−îc truy xuÊt. C¸c tham sè cho
chøc n¨ng nµy nh− sau:
Vµo: AL=sè ®Üa (0=A, 1=B, ...)
CX=sè l−îng sector cÇn ®äc/ghi
DX=sè sector logic b¾t ®Çu.
DS:BX=®Þa chØ cña buffer chøa d÷ liÖu cho t¸c vô ®äc/ghi
Ra: Lçi nÕu CF=1, m lçi ch−a trong AX. Ng−îc l¹i, t¸c vô ®äc/ghi ®−îc thùc hiÖn thµnh
c«ng, c¸c gi¸ trÞ thanh ghi ®Òu bÞ ph¸ hñy, trõ c¸c thanh ghi ph©n ®o¹n vµ mét word cßn sãt l¹i
trªn stack.
C¸c ng¾t nµy vÉn bÞ hai nh−îc ®iÓm g©y khã chÞu cho ng−êi dïng. TÊt c¶ c¸c thanh ghi ®Òu bÞ
thay ®æi, do vËy, tr−íc khi gäi chøc n¨ng nµy, nªn cÊt nh÷ng thanh ghi nµo cÇn thiÕt. MÆt
kh¸c, khi thùc hiÖn xong, DOS l¹i ®Ó l¹i trªn stack mét word sÏ g©y lçi cho ch−¬ng tr×nh nÕu
kh«ng ®Ó ý ®Õn. §o¹n vÝ dô sau ®äc Boot sector cña ®Üa A b»ng ng¾t 25h.
ReadBoot proc near
;®äc Boot sector cña ®Üa A vµo MyBuffer
mov AL, 0 ;§Üa A
mov DX, 0 ;Sector 0
mov CX, 1 ;§äc mét sector
lea BX, MyBuffer ;DS:BX trá ®Õn MyBuffer
int 25h
pop DX ;LÊy l¹i mét word trªn stack
ret
ReadBoot endp
NÕu ®Ó ý, ta sÏ thÊy sè sector logic ®−îc ®Æt trong mét thanh ghi 16 bit, nghÜa lµ sè sector tèi
®a còng chØ ®¹t tíi 65535. NÕu sè byte trªn sector vÉn lµ 512 byte th× dung l−îng ®Üa mµ DOS
qu¶n lÝ ®−îc chØ cã 32Mb dï sè l−îng cluster lín nhÊt mµ DOS qu¶n lÝ cã thÓ gÊp 4 hoÆc 8
lÇn.
18
www.updatesofts.com
Nh−îc ®iÓm nµy cÇn ph¶i ®−îc kh¾c phôc tr−íc sù c¹nh tranh khèc liÖt gi÷a c¸c hÖ ®iÒu hµnh.
B¾t ®Çu tõ DOS 4.xx, DOS ® më réng sè sector logic tõ 16 bit lªn 32 bit vµ vÉn t−¬ng thÝch
hoµn toµn víi c¸c version tr−íc ®ã. Sù t−¬ng thÝch nµy nh− sau: nÕu CX=-1: sè sector lín nhÊt
cña DOS, d¹ng thøc cña DOS 4.xx sÏ ®−îc ¸p dông. Lóc nµy, DS:BX sÏ lµ gi¸ trÞ cña Control
Package, mét cÊu tróc gåm 10 byte - chøa c¸c th«ng tin vÒ sector ban ®Çu, sè sector cÇn ®äc
....... CÊu tróc cña Control Package nh− sau:
Offset KÝch th−íc Néi dung
0 4 Sè sector logic ban ®Çu
4 2 Sè sector cÇn ®äc/ghi
6 4 §Þa chØ cña buffer d÷ liÖu
Lçi cña chøc n¨ng më réng nµy t−¬ng tù nh− c¸c version tr−íc. Tuy vËy, nÕu b¹n kh«ng dïng
cÊu tróc 32 bit nh− trªn ®Ó truy xuÊt nh÷ng partition cã h¬n 65535 sector còng bÞ gÆp lçi. Lçi
tr¶ vÒ cã thÓ lµ 2 (Bad address mark) hay 7 (Unknow Media).
LÏ dÜ nhiªn DOS ® t¹o thuËn tiÖn cho ng−êi sö dông nh−ng Ýt ai chÞu tháa mn nh÷ng yªu
cÇu cña m×nh. Râ rµng, khi truy xuÊt ®Üa ta ph¶i biÕt lo¹i cña nã, mÆt kh¸c, lµm sao ta cã ®−îc
nh÷ng th«ng tin quan träng vÒ ®Üa, xem FAT cña nã gåm bao nhiªu sector, Root Dir b¾t ®Çu tõ
®©u ch¼ng h¹n.Toµn nh÷ng th«ng tin quan träng. Thùc tÕ, còng ® nhiÒu ng−ßi tù lµm b»ng
c¸ch ®äc boot sector lªn vµ sö dông phÇn BPB ®Ó tÝnh to¸n. Song c¸ch nµy ®em l¹i nhiÒu phøc
t¹p trong vÊn ®Ò tÝnh to¸n, ®ã lµ ch−a kÓ nh÷ng ®Üa mµ boot sector chøa ‘r¸c’ thay cho d÷ liÖu
ta cÇn. DOS còng kh«ng cã mét tµi liÖu c«ng bè chÝnh thøc nµo ®Ò cËp ®Õn vÊn ®Ò nµy. Tuy
nhiªn, trong qu¸ tr×nh nghiªn cøu, nh÷ng ng−êi th¶o ch−¬ng viªn giµu kinh nghiÖm ph¸t hiÖn
mét chøc n¨ng cña DOS (ng¾t 21h) cho phÐp lÊy nh÷ng th«ng tin nµy.
Tõ ®©y trë ®i, nh÷ng chøc n¨ng tù ng−êi sö dông ph¸t hiÖn ®−îc sÏ gäi lµ Undocumented (tµi
liÖu kh«ng ®−îc c«ng bè chÝnh thøc). Chøc n¨ng nµy lµ:
Vµo: AH=32h
DL=®Üa (0=ngÇm ®Þnh, 1=A....)
Ra: AL=0 nÕu ®Üa hîp lÖ
0FFh nÕu ®Üa kh«ng hîp lÖ
DS:BX lµ ®Þa chØ cña b¶ng tham sè ®Üa cña ®Üa ®−îc chØ ®Þnh.
CÊu tróc cña b¶ng tham sè ®Üa nh− sau:
Offset Size Néi dung
+0 1 Sè hiÖu ®Üa (0=A, 1=B ....)
+1 1 Sè hiÖu con tõ Device Driver
+2 2 Sè byte trong mét sector
+4 1 Sè sector trong mét cluster
+5 1 Cluster to sector shift (cluster lµ 2 mò sè sector) +6
2 BootSiz: Sè sector dµnh riªng
+8 1 Sè b¶ng FAT.
+9 2 MaxDir: sè ®Çu vµo tèi ®a trong Root
+0B 2 Sè sector øng víi cluster #2
+0D 2 Tæng sè cluster + 2
+0F 1 Sè sector cÇn cho 1 b¶ng FAT.
+10 2 Sector b¾t ®Çu Root.
+12 4 Off Seg: ®Þa chØ cña device header
+16 1 Byte media descriptor
+17 1 Cê access: 0 nÕu ®Üa ® truy xuÊt.
+18 4 Off Seg: ®Þa chØ cña b¶ng tham sè kÕ
19
cuèi b¶ng nÕu lµ FFFFh
Tuy vËy, còng cÇn chó ý mét ®iÒu: DOS sÏ kh«ng chÞu tr¸ch nhiÖm vÒ nh÷ng ®iÒu m×nh kh«ng
c«ng bè vµ do ®ã, nÕu ch−¬ng tr×nh cña b¹n cã sö dông ®Õn chøc n¨ng nµo g©y thiÖt h¹i ®¸ng
kÓ cho ®Üa cña b¹n th× ®ã lµ lçi cña b¹n! MÆt kh¸c, cÊu tróc nµy cã thÓ thay ®æi trong t−¬ng lai
khi mét version míi ra ®êi. Thùc tÕ ® chøng minh ®iÒu nµy: b¶ng tham sè ®Üa trªn ® cã mét
sù thay ®æi nhá trong cÊu tróc (tuy vËy, còng ® lµm ‘Run time error’ cho mét sè ch−¬ng
tr×nh). Do nhu cÇu më réng kh¶ n¨ng qu¶n lÝ ®Üa, sè sector dµnh cho mét b¶ng FAT cã thÓ
v−ît qu¸ giíi h¹n 255 sector vµ do ®ã gi¸ trÞ sector dµnh cho mét b¶ng FAT t¨ng tõ mét byte
lªn mét word.
3/ C¸c gi¶i thuËt chuyÓn ®æi - ®Þnh vÞ:
a. ChuyÓn ®æi: Sù tån t¹i 2 c¸ch truy xuÊt theo c¸c yÕu tè vËt lÝ hoÆc logic theo DOS lµm ph¸t
sinh vÉn ®Ò: sector a trªn head b track c sÏ t−¬ng øng víi sector logic bao nhiªu vµ ng−îc l¹i,
tõ sector logic x nµo ®ã lµm sao t×m ®−îc to¹ ®é vËt lÝ cña nã? ViÖc ®¸nh sè cña c¶ hai c¸ch
®Òu ®−îc kh¶o s¸t, do ®ã, còng kh«ng phøc t¹p l¾m ®Ó lµm mét c«ng thøc thay ®æi tõ hÖ nµy
sang hÖ kia vµ ng−îc l¹i.
Sector_logic=(sect-1)+Hd*SecTrk+Cyl*SecTrk*HdNo
Trong ®ã:
Sect : sè sector hiÖn thêi theo BIOS
SecTrk : sè sector trªn mét track
Cyl : sè Cylinder hiÖn thêi
Hd : sè head hiÖn thêi theo BIOS
HdNo : sè ®Çu ®äc cña ®Üa
Chó ý lµ c«ng thøc trªn chØ ®óng nÕu Boot sector cïng n»m ngay t¹i track 0, head 0 vµ sector
1, nghÜa lµ viÖc ®¸nh sè cña c¶ hai ph¶i b¾t ®Çu cïng mét gèc. NÕu trªn partition, ph¶i chó ý
®Õn gi¸ trÞ cña c¸c sector dÊu mÆt (hidden sector).
§Ó tiÕn hµnh chuyÓn ®æi ng−îc l¹i, ta còng cã c«ng thøc:
Sect=SecLog mod SecTrk+1
Dh=(SecLog/SecTrk) mod HdNo
Cyl=SecLog/(SecTrk*HdNo)
Trong ®ã:
Sect= sector tÝnh theo BIOS
HD= head tÝnh theo BIOS
Cyl= Cylinder tÝnh theo BIOS
SegLog= sè sector logic
HdNo= sè ®Çu ®äc cña ®Üa
Ba tham sè cña ng¾t 13 còng ®−îc chuyÓn ®æi, tuy nhiªn, vÉn ph¶i b¶o ®¶m ®¸nh sè cïng gèc
vµ ®iÒu chØnh l¹i nÕu kh«ng cïng gèc.
ViÖc chuyÓn ®æi kh«ng chØ x¶y ra gi÷a BIOS vµ DOS mµ cßn x¶y ra ngay chÝnh trong DOS.
ChÝnh v× qu¸ nhiÒu kh¸i niÖm ®−a ra lµm cho nã v« cïng phøc t¹p vµ ®«i lóc còng lµm n¶n
lßng nh÷ng ng−êi muèn tù m×nh lµm viÖc qu¶n lÝ ®Üa thay cho DOS. Dï ® ®−a ra kh¸i niÖm
sector logic ®Ó tiÖn truy xuÊt, DOS l¹i ®−a ra kh¸i niÖm cluster ®Ó tiÖn viÖc qu¶n lÝ. ViÖc
chuyÓn ®æi gi÷a hai kh¸i niÖm nµy còng lµ ®iÒu nªn biÕt. ViÖc chuyÓn tõ cluster sang sector
logic ®ßi hái ph¶i biÕt ®−îc sè sector logic ®Çu tiªn cña vïng data. NghÜa lµ ph¶i biÕt sè sector
dµnh cho tõng phÇn: FAT vµ Root Dir (cã lÏ ta kh«ng nªn ®Ò cËp ®Õn sè sector dµnh cho Boot
sector). Ngoµi ra, cßn ph¶i quan t©m ®Õn c¸c sector dµnh riªng (kÓ c¶ boot).
Sè sector dµnh cho Root Dir:
RootSec=(RootSize*32)/SecSize
Trong ®ã :
20