Ðåôåðàò: Ñåìàíòè÷åñêèé àíàëèç ñòðóêòóðû EXE ôàéëà è äèñàññåìáëåð (ñ ïðèìåðàìè è èñõîäíèêàìè), âèðóñîëîãèÿ
DOS, ôóíêöèÿ 15h
Ïîñëåäîâàòåëüíàÿ çàïèñü â ôàéë ÷åðåç FCB
DOS, ôóíêöèÿ 17h
Ïåðåèìåíîâàòü ôàéë ÷åðåç FCB
DOS, ôóíêöèÿ 22h
Ïèñàòü ïðîèçâîëüíóþ çàïèñü ôàéëà
DOS, ôóíêöèÿ 26h
Ñîçäàòü íîâûé PSP
DOS, ôóíêöèÿ 27h
×èòàòü ïðîèçâîëüíûé áëîê ôàéëà
DOS, ôóíêöèÿ 28h
Ïèñàòü ïðîèçâîëüíûé áëîê ôàéëà
DOS, ôóíêöèÿ 31h
Çàâåðøèòüñÿ è îñòàòüñÿ ðåçèäåíòíûì
DOS, ôóíêöèÿ 3Ah
Óäàëèòü îãëàâëåíèå
DOS, ôóíêöèÿ 41h
Óäàëèòü ôàéë
DOS, ôóíêöèÿ 43h
Óñòàíîâèòü/îïðîñèòü àòðèáóòû ôàéëà
DOS, ôóíêöèÿ 44h
Óïðàâëåíèå óñòðîéñòâîì ââîäà/âûâîäà
DOS, ôóíêöèÿ 4Bh
Âûïîëíèòü èëè çàãðóçèòü ïðîãðàììó
DOS, ôóíêöèÿ 4Ch
Çàâåðøèòü ïðîãðàììó
DOS, ôóíêöèÿ 57h
Óñòàíîâèòü/îïðîñèòü äàòó/âðåìÿ ôàéëà
DOS, ôóíêöèÿ 5Ah
Ñîçäàòü óíèêàëüíûé âðåìåííûé ôàéë
DOS, ôóíêöèÿ 68h
Çàâåðøèòü ôàéë.
Ñïèñîê íàèáîëåå ÷àñòî èñïîëüçóåìûõ ôóíêöèé DOS.(àññåìáëåð ïðèìåð)
[AK] Âîò ñïèñîê ôóíêöèé, êîòîðûå âàæíî ïîìíèòü ïðè ðàçðàáîòêå âèðóñîâ:
Óñòàíîâèòü àäðåñ DTA.
~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 1Ah
ds:dx = àäðåñ
âûõîä:
íåò
Ïîëó÷èòü àäðåñ DTA.
~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 2Fh
âûõîä:
es:bx = òåêóùèé àäðåñ
Create - Ñîçäàòü ôàéë.
~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 3Ch
cx = àòðèáóòû ôàéëà (òàá 1)
ds:dx = ïóòü è èìÿ ôàéëà â ôîðìàòå asciz
âûõîä:
if CF=0 then
ax = äåñêðèïòîð ôàéëà
else
ax = êîä îøèáêè (3,4,5) (òàá 2)
Open - Îòêðûòü ñóùåñòâóþùèé ôàéë
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 3Dh
al = ðåæèì äîñòóïà (òàá 2)
cx = àòðèáóòû
ds:dx = èìÿ
âûõîä:
if CF=0 then
ax = äåñêðèïòîð ôàéëà
else
ax = êîä îøèáêè (1,2,3,4,5,0C)
Close - Çàêðûòü ôàéë
~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 3Eh
bx = äåñêðèïòîð
ds:dx = èìÿ
âûõîä:
if CF=0 then
ax =
else
ax = êîä îøèáêè (6)
Read - ×òåíèå èç ôàéëà
~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 3Fh
bx = äåñêðèïòîð
cx = ÷èñëî áàéò
ds:dx = áóôåð äëÿ ÷òåíèÿ
âûõîä:
if CF=0 then
ax = ÷èñëî ïðî÷èòàííûõ áàéò
Ýòî çíà÷åíèå ìîæåò áûòü ìåíüøå CX.
Íàïðèìåð ïîòîìó, ÷òî ïðåâûñèëè äëèíó ôàéëà.
else
ax = êîä îøèáêè (5,6)
Write - Çàïèñàòü â ôàéë
~~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 40h
bx = äåñêðèïòîð
cx = ÷èñëî áàéò
ds:dx = äàííûå äëÿ çàïèñè
âûõîä:
if CF=0 then
ax = ÷èñëî çàïèñàííûõ áàéò
else
ax = êîä îøèáêè (5,6)
Unlink - Óäàëèòü ôàéë
~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 41h
cx = àòðèáóòû
ds:dx = èìÿ
âûõîä:
if CF=0 then
ax =
else
ax = êîä îøèáêè (2,3,5)
LSeek - Óñòàíîâèòü óêàçàòåëü â ôàéëå
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 42h
al = òî÷êà îòñ÷åòà óêàçàòåëÿ:
0 - îò íà÷àëà ôàéëà
1 - îò òåêóùåãî ïîëîæåíèÿ
2 - îò êîíöà
bx = äåñêðèïòîð
cx:dx = ñìåùåíèå (cx=ñòàðøèå 16 áèò, dx=ìëàäøèå)
âûõîä:
if CF=0 then
dx:ax = íîâîå ïîëîæåíèå óêàçàòåëÿ îòíîñèòåëüíî íà÷àëà
else
ax = êîä îøèáêè (1,6)
Ïîëó÷èòü àòðèáóòû ôàéëà
~~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ax = 4300h
ds:dx = èìÿ
âûõîä:
if CF=0 then
cx = àòðèáóòû
else
ax = êîä îøèáêè (1,2,3,5)
Chmod - Óñòàíîâèòü àòðèáóòû ôàéëà
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ax = 4301h
cx = íîâûå àòðèáóòû
ds:dx = èìÿ
âûõîä:
if CF=0 then
ax =
else
ax = êîä îøèáêè (1,2,3,5)
Âûäåëèòü áëîê ïàìÿòè
~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 48h
bx = ðàçìåð áëîêà â ïàðàãðàôàõ
âûõîä:
if CF=0 then
ax = ñåãìåíò áëîêà
else
ax = êîä îøèáêè (7,8)
bx = ðàçìåð íàèáîëüøåãî äîñòóïíîãî áëîêà
Îñâîáîäèòü ïàìÿòü
~~~~~~~~~~~~~~~~~
âõîä:
ah = 49h
es = ñåãìåíò áëîêà
âûõîä:
if CF=0 then
ax =
else
ax = êîä îøèáêè (7,9)
Èçìåíèòü ðàçìåð áëîêà ïàìÿòè
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 4Ah
bx = íîâûé ðàçìåð
es = ñåãìåíò
âûõîä:
if CF=0 then
ax =
else
ax = êîä îøèáêè (7,8,9)
bx = ðàçìåð íàèáîëüøåãî äîñòóïíîãî áëîêà
Exec - çàãðóçèòü èëè âûïîëíèòü ïðîãðàììó.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
âõîä:
ah = 4Bh
al = òèï çàãðóçêè:
Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17