áúðчðть - Xakep Online
áúðчðть - Xakep Online
áúðчðть - Xakep Online
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
[XÀÊÅÐ 11 [83] 05 > ÊÎÄÈÍÃ 114]<br />
[Debug API] ß äóìàþ, òû óæå ïîíÿë, ÷òî Debug API — ýòî íàáîð ñèñòåìíûõ<br />
ôóíêöèé, ðåàëèçóþùèõ òå èëè èíûå îòëàäî÷íûå ìåõàíèçìû.<br />
Ýòè ôóíêöèè óäîáíû â ïðèìåíåíèè, íî, ê ñîæàëåíèþ, íå ïîçâîëÿþò îòâîò<br />
òàê âîò âûãëÿäÿò èñõîäíè÷êè òðåéñåðà<br />
9 òðàññèðóåìàÿ êîìàíäà ïèøåò â int1 descriptor<br />
0 òðàññèðóåìàÿ ïðîãðàììà âûïîëíÿåò sidt (...)<br />
A òðàññèðóåìàÿ ïðîãðàììà âûïîëíÿåò lidt<br />
B òðàññèðóåìàÿ êîìàíäà ïèøåò â dr6 (èñïîëüçóåò äëÿ õðàíåíèÿ ÷èñåë/ïðîâåðêè)<br />
C âàðèàöèè: òðàññèðóåìàÿ ïðîãðàììà ñòàâèò ñâîé îáðàáîò÷èê INT1/3,<br />
íà÷èíàåò òðàññèðîâàòü ñåáÿ, ñòàâèò hardware-breakpoint'û íà ÷òåíèå/çàïèñü/âûïîëíåíèå,<br />
èñïîëüçóåò èñêëþ÷åíèÿ äëÿ ñâîèõ íóæä è âñå ýòî ðàáîòàåò<br />
îäíîâðåìåííî, ïðè÷åì ïðèîðèòåò âûïîëíåíèÿ èãðàåò ðîëü.<br />
Èç âñåãî ýòîãî ìîæíî ñäåëàòü âûâîä, ÷òî íàïèñàòü õîðîøèé òðåéñåð íå<br />
òàê óæ è ïðîñòî, òåì áîëåå, ÷òî ñëîæíûå ïðîòåêòîðû ÷àñòî èñïîëüçóþò<br />
åùå áîëåå äèêèå ïðèåìû, ÷åì ÿ çäåñü îïèñàë.<br />
[÷òî åùå íóæíî äëÿ îòëàä÷èêà]  áîëüøèíñòâå ñëó÷àåâ äëÿ íàïèñàíèÿ<br />
äàæå ïðîñòîãî òðåéñåðà, íåñóùåãî êàêóþ-òî ïîëåçíóþ íàãðóçêó,<br />
íàì ïîíàäîáèòñÿ íå òîëüêî âîçìîæíîñòü îáðàáàòûâàòü áðåêïîèíòû è<br />
òðàññèðîâêó, íî è àíàëèçèðîâàòü èñïîëíÿåìûé êîä. À äëÿ ýòîãî íàì íóæåí<br />
äèçàññåìáëåð. Ñêîðåå âñåãî, ïîëíîöåííûé äèçàññåìáëåð íàì íå<br />
ïîíàäîáèòñÿ, à äîñòàòî÷íî áóäåò ïðîñòîãî äèçàññåìáëåðà äëèí, èíîãäà<br />
íàì ìîæåò ïîíàäîáèòüñÿ âûâîä òåêñòà (äèçàñì ëèñòèíãà êîäà). Äàâàé<br />
ñôîðìóëèðóåì òðåáîâàíèÿ, êîòîðûì äîëæåí óäîâëåòâîðÿòü äèçàññåìáëåð,<br />
ïðèìåíÿåìûé â îòëàä÷èêå:<br />
1 Íåçàâèñèìîñòü îò îïåðàöèîííîé ñèñòåìû. Ýòî íåîáõîäèìî äëÿ îáåñïå÷åíèÿ<br />
óíèâåðñàëüíîñòè äèçàññåìáëåðà è äëÿ ðàáîòû åãî â ëþáûõ<br />
óñëîâèÿõ (â òîì ÷èñëå äàæå áåç çàãðóæåííîãî â ïàìÿòü ÿäðà ñèñòåìû).<br />
2 Âûâîä òåêñòà ÿâëÿåòñÿ âòîðîñòåïåííîé è íåîáÿçàòåëüíîé ôóíêöèåé,<br />
äèçàññåìáëåð äîëæåí îáÿçàòåëüíî óìåòü ðàçáèðàòü êîìàíäû íà<br />
èõ ñîñòàâëÿþùèå è ôîðìèðîâàòü ñòðóêòóðó åäèíîãî ôîðìàòà, êîòîðàÿ<br />
îïèñûâàåò äèçàññåìáëèðóåìóþ êîìàíäó. Ýòî âñå íåîáõîäèìî<br />
ÝÌÓËßÖÈß<br />
Ýìóëÿöèÿ ïðîöåññîðà — î÷åíü ìîùíûé<br />
ìåòîä îòëàäêè, íå íàêëàäûâàþùèé<br />
âîîáùå íèêàêèõ îãðàíè÷åíèé íà<br />
âîçìîæíîñòè îòëàä÷èêà, îäíàêî<br />
îáëàäàþùèé îäíèì íåïðèÿòíûì íåäîñòàòêîì<br />
— äëÿ èñïîëüçîâàíèÿ íà<br />
ðåàëüíûõ ïðîãðàììàõ åìó íåîáõîäèìî<br />
ýìóëèðîâàòü íå òîëüêî ïðîöåññîð,<br />
íî è âñå îáîðóäîâàíèå êîìïüþòåðà.<br />
Ïîäîáíûì ýìóëÿòîðîì ÿâëÿåòñÿ<br />
âèðòóàëüíàÿ ìàøèíà BOCHS. Ýòî<br />
â íàñòîÿùåå âðåìÿ åäèíñòâåííûé îòëàä÷èê-ýìóëÿòîð,<br />
ïðèãîäíûé äëÿ<br />
äëÿ àíàëèçà èñïîëíÿåìîãî êîäà.<br />
3 Î÷åíü âàæíà êîððåêòíîñòü äèçàññåìáëèðîâàíèÿ<br />
íåñòàíäàðòíûõ<br />
îïêîäîâ (ñîäåðæàùèõ ìíîãîêðàòíûå<br />
ïðåôèêñû, íåäîïóñòèìûå çíà-<br />
÷åíèÿ áàéòà Mod R/M èëè SIB), òàê<br />
êàê òàêèå êîìàíäû ëþáÿò ïðèìåíÿòü<br />
â çàùèòàõ äëÿ îáìàíà äèçàññåìáëåðîâ<br />
è ýìóëÿòîðîâ.<br />
4 Äèçàññåìáëåð äîëæåí ðàáîòàòü<br />
ñ êîäîì ïîêîìàíäíî, òî åñòü ðàáîòàòü<br />
ñ îòäåëüíî âçÿòîé êîìàíäîé,<br />
íå îïèðàÿñü ïðè ýòîì íà îêðóæàþùèé<br />
êîíòåêñò. Óñòàíàâëèâàòü<br />
ñâÿçü ìåæäó êîìàíäàìè — ýòî çàäà÷à<br />
êîäîàíàëèçàòîðà, êîòîðûé<br />
ìîæåò ïðè íåîáõîäèìîñòè ïðèñóòñòâîâàòü<br />
â îòëàä÷èêå.<br />
5 Æåëàòåëåí (íî íå îáÿçàòåëåí)<br />
ìàëûé ðàçìåð äèçàññåìáëåðà è<br />
âîçìîæíîñòü åãî èñïîëüçîâàíèÿ â<br />
ïðîãðàììàõ, íàïèñàííûõ íà ðàçëè÷íûõ<br />
ÿçûêàõ ïðîãðàììèðîâàíèÿ<br />
(Ñ++, Delphi etc).<br />
6 Îòêðûòûé èñõîäíûé êîä (òàê<br />
êàê òåáå ìîæåò ïîíàäîáèòüñÿ<br />
÷òî-ëèáî èçìåíèòü â äèçàññåìáëåðå).<br />
Åñëè äëÿ ðåøåíèÿ òâîåé çàäà÷è íóæåí ïîëíîöåííûé äèçàññåìáëåð, óäîâëåòâîðÿþùèé<br />
âñåì âûøåïðèâåäåííûì òðåáîâàíèÿì, òî òû ìîæåøü èñïîëüçîâàòü<br />
ìîé CADt (Code Analization and Disassemblibg Tool), âûïîëíåííûé<br />
â âèäå áèáëèîòåêè, êîòîðóþ ìîæíî èñïîëüçîâàòü â ëþáûõ ñâîèõ<br />
ïðîãðàììàõ. Îí ïîääåðæèâàåò ïîëíûé íàáîð êîìàíä ïðîöåññîðà Pentium<br />
3 (386, MMX, SSE) è ïðåäíàçíà÷åí ñïåöèàëüíî äëÿ èñïîëüçîâàíèÿ â<br />
îòëàä÷èêàõ è êîäîàíàëèçàòîðàõ. Îí ïîëíîñòüþ íåçàâèñèì îò ñèñòåìû è<br />
ìîæåò èñïîëüçîâàòüñÿ êàê è â ïðîãðàììàõ, ðàáîòàþùèõ â òðåòüåì êîëüöå,<br />
òàê è â îòëàä÷èêàõ óðîâíÿ ÿäðà.  äèñòðèáóòèâ äèçàññåìáëåðà âõîäèò<br />
äâå âåðñèè DLL (îäíà ïðåäíàçíà÷åíà äëÿ ring3, äðóãàÿ — äëÿ äðàéâåðîâ),<br />
îáúåêòíûå ôàéëû äëÿ ñòàòè÷åñêîé ëèíêîâêè, çàãîëîâî÷íûå ôàéëû äëÿ<br />
Borland Delphi è MS Visual C++, èñõîäíûé êîä äèçàññåìáëåðà íà ïàñêàëå<br />
(êîìïèëèðóåòñÿ âî âñåõ âåðñèÿõ Delphi, íà÷èíàÿ c òðåòüåé) è ïðèìåðû<br />
ïðèìåíåíèÿ äèçàññåìáëåðà â ïðîãðàììàõ. Ðàçìåð ñêîìïèëèðîâàííîé<br />
áèáëèîòåêè — 18 êá, à òî òû, íàâåðíî, óæå èñïóãàëñÿ, äóìàÿ, ÷òî äèçàññåìáëåð<br />
íà Delphi áóäåò âåñèòü íå ìåíüøå ìåãàáàéòà.<br />
Åñëè æå òåáå áóäåò äîñòàòî÷íî äèçàññåìáëåðà äëèí, òî ìîæåøü èñïîëüçîâàòü<br />
ìîþ áèáëèîòåêó LDasm. Îíà ïîääåðæèâàåò âñå ñóùåñòâóþùèå íàáîðû<br />
èíñòðóêöèé äëÿ 32-áèòíûõ x86 ñîâìåñòèìûõ ïðîöåññîðîâ (386,<br />
MMX, SSE, SSE2, SSE3, 3DNow) è ðàñïðîñòðàíÿåòñÿ â èñõîäíûõ òåêñòàõ.<br />
Íåñîìíåííî, òåáÿ ïîðàäóåò òî, ÷òî èñõîäíèêè ýòîãî äèçàññåìáëåðà äîñòóïíû<br />
â âåðñèÿõ íà C++, Delphi, Visual Basic è íà àññåìáëåðå, — âûáèðàé,<br />
÷òî òåáå ïî âêóñó. Îáà äèçàññåìáëåðà òû ìîæåøü íàéòè íà äèñêå ñ æóðíàëîì,<br />
ëèáî ñêà÷àòü ñ ìîåãî ñàéòà ms-rem.dot-link.net. Åñëè òû íàéäåøü â<br />
íèõ êàêóþ-íèáóäü îøèáêó, òî îáÿçàòåëüíî ñîîáùè ìíå íà ìûëî, è ÿ åå<br />
òîò÷àñ æå ëèêâèäèðóþ.<br />
ïðàêòè÷åñêèõ öåëåé. Îí îáû÷íî èñïîëüçóåòñÿ<br />
äëÿ îòëàäêè çàãðóç÷èêîâ<br />
ÎÑ, êîäà BIOS è äðóãèõ ñïåöèôè÷åñêèõ<br />
ñëó÷àåâ, íåäîñòóïíûõ äëÿ îòëàäêè<br />
îáû÷íûìè ñðåäñòâàìè. Äëÿ<br />
çàùèùåííûõ ïðîãðàìì îí, ê ñîæàëåíèþ,<br />
íåïðèãîäåí, òàê êàê íå âñåãäà<br />
êîððåêòíî ýìóëèðóåò ñïåöèàëüíî ñîñòàâëåííûå<br />
íåñòàíäàðòíûå êîìàíäû,<br />
äà è, íàäî çàìåòèòü, ñóùåñòâóþùèé<br />
íàáîð êîìàíä 386 ýìóëèðóåò íå ïîëíîñòüþ.<br />
Ê òîìó æå, ïîäîáíûå ýìóëÿòîðû<br />
ëåãêî îáíàðóæèòü ïî ñïåöèôè-<br />
÷åñêîìó íàáîðó ýìóëèðóåìîãî îáîðóäîâàíèÿ.<br />
Ïî ìîåìó ìíåíèþ, ñîçäàòü<br />
íåîáíàðóæàåìûé îòëàä÷èê-ýìóëÿòîð<br />
ïðàêòè÷åñêè íåâîçìîæíî, òàê<br />
êàê â ýìóëÿöèè ïðîöåññîðà è îáîðóäîâàíèÿ<br />
åñòü ìíîæåñòâî ìåëêèõ íåäîêóìåíòèðîâàííûõ<br />
òîíêîñòåé, êîòîðûå<br />
íå âàæíû äëÿ ðàáîòû îáû÷íûõ<br />
ïðîãðàìì, à ëþáîå íåñîîòâåòñòâèå<br />
ïîâåäåíèÿ ýìóëèðóåìîãî îáîðóäîâàíèÿ<br />
ðåàëüíîìó ìîæåò áûòü èñïîëüçîâàíî<br />
çàùèòîé äëÿ îáíàðóæåíèÿ îòëàä÷èêà.<br />
Íî äëÿ îòëàäêè îïåðàöèîííûõ<br />
ñèñòåì ïîäîáíûå ýìóëèðóþùèå<br />
äåáàããåðû íåçàìåíèìû.