16.05.2015 Views

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

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.

hex) wykorzystuje DOS i Basic.<br />

Wektor to w samej rzeczy pełny adres początku procedury<br />

obsługującej przerywanie o danym numerze<br />

UWAGA:<br />

Wektor zapisywany jest w pamięci w odwrotnej kolejności:<br />

Adres pamięci: 0000:0000 [OFFSET Wekt. int 0]<br />

0000:0002 [SEGMENT int 0]<br />

0000:0004 [OFFSET Wekt. int 1]<br />

0000:0006 [SEGMENT int 1]<br />

0000:0008 [OFFSET int 2]<br />

.... ....<br />

Procesory 80X86 zamieniają jeszcze dodatkowo starszy bajt z<br />

młodszym.<br />

Posługując się systemowym debuggerem DEBUG możesz łatwo<br />

przejrzeć tablicę wektorów przerywań własnego komputera. Jeśli<br />

wydasz rozkaz:<br />

C:\DOS\DEBUG<br />

-D 0:0<br />

zobaczysz zawartość pierwszych 32 wektorów int #0...int#31,<br />

czyli pierwsze 128 bajtów pamięci:<br />

-d 0:0<br />

0000:0000 FB 91 32 00 F4 06 70 00-78 F8 00 F0 F4 06 70 00<br />

0000:0010 F4 06 70 00 54 FF 00 F0-53 FF 00 F0 53 FF 00 F0<br />

0000:0020 A5 FE 00 F0 87 E9 00 F0-23 FF 00 F0 23 FF 00 F0<br />

0000:0030 23 FF 00 F0 CE 02 00 C8-57 EF 00 F0 F4 06 70 00<br />

0000:0040 D1 0C BD 1B 4D F8 00 F0-41 F8 00 F0 74 07 70 00<br />

0000:0050 39 E7 00 F0 4A 08 70 00-2E E8 00 F0 D2 EF 00 F0<br />

0000:0060 00 00 FF FF FB 07 70 00-5D 0C 00 CA 9F 01 BD 1B<br />

0000:0070 53 FF 00 F0 A0 7C 00 C0-22 05 00 00 2F 58 00 C0<br />

Po zdeszyfrowaniu okaże się, że pierwszy wektor (przerywanie 0)<br />

wskazuje na adres startowy: 0032:91FB (adres absolutny 0951B).<br />

Generalnie możliwe są cztery sytuacje. Wektor może wskazywać:<br />

* adres startowy procedur ROM-BIOS: blok F - Fxxx:xxxx,<br />

* adres funkcji DOS,<br />

* adres funkcji działającego właśnie debuggera (DEBUG przejmuje<br />

obsługę niektórych przerywań), lub innego programu rezydującego<br />

w pamięci - np. NC.EXE,<br />

* wektor może być pusty - 00 00:00 00 jeśli dane przerywanie nie<br />

jest obsługiwane.<br />

Jeśli zechcesz sprawdzić, jak obsługiwane jest dane przerywanie<br />

możesz znów zastosować debugger, wydając mu rozkaz<br />

zdezasamblowania zawartości pamięci począwszy od wskazanego<br />

adresu:<br />

- 181-

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

Saved successfully!

Ooh no, something went wrong!