31.12.2014 Views

Скачать - Xakep Online

Скачать - Xakep Online

Скачать - Xakep Online

SHOW MORE
SHOW LESS

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 />

äåáàããåðû íåçàìåíèìû.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!