[ASM] GDT

0

Witam,
mam do napisania program w asemblerze, pod takim tam OSem, ktora ma wyswietlac zawartosc tablicy GDT. To co ten OS robi to tylko przejscie w tryb chroniony, niczego tam wiecej nie ma.

problem polega na tym,ze o ile bez problemu pobieram zawartosc rejestru GDTR to nie moge sie dostac do tablicy GDT w zaden sposob, ciagle wyrzuca mi GP.
Zatem w jaki sposob mozna sie dostac do wpisow w GDT, tak, zeby odczytac ich zawartosci, nie wybierajac przy tym selektorow... ktos z was juz cos takiego robil?
Z gory dzieki za rady...
mnie juz powoli krew zalewa ;P

Zleceniodawca uznal, ze aplikacja jest prosta, i prosil, zebym mu ja napisal dzisiaj [rotfl]

0

Ktos tam gdzies napisal, ze powinienem sobie stworzyc segment flat, ktory pozwoli mi na dostep do pamieci calkowicie, i wpisac go do GDT, a potem korzystajac z niego odczytac sobie zawartosc tabeli GDT...
moze i to by pomoglo, a czy zna ktos inne sposoby?

0

czyzby nikt nic nie wiedzial?
;(

0

dobra a ktos moze wie jak stworzyc "flat" segment? to jest taki ktory zaczyna sie na poczatku pamieci a konczy na koncu z odpowiednimi uprawnieniam tak abym mial dostep liniowy do 4GB?

0

Chcesz stworzyc nowy segment, zeby miec dostep do GDT, z tym, ze zeby stworzyc nowy segment musisz miec dostep do GDT :P

Powiedz w jakis sposob odczytujesz rejestr gdt? Czy masz dla niego stworzona odpowiednia strukture?

0

wiesz no mam kody tego systemu, wiec nie byloby strasznego problemu...
nie mam stworzonej do tego struktury...
tworze pole pamieci o rozmiarze 6ciu bajtow (dp), np zaw_gdtr dp ?
pozniej: sgdt zaw_gdtr

i 32-bitowy adres znajduje sie na pozycji zaw_gdtr+2, wystarczy teraz tylko
np mov bx, OFFSET zaw_gdtr+2
mov edi, dword ptr [bx]

i w tym momencie w edi mam 32-bitowy adres, w globalnej pamieci, pozycji GDT...

wlasnie w ten sposob to robie :P

0

ale pozniej nie moge sie dostac do zawartosci GDT poniewaz segment kodu systemowego, w ktorym pisze, jest niewielki i nie obejmuje tablicy, dlatego kazda proba odwolania konczy sie smiercia aplikacji i GP,
co za tym idzie takze zwiecha, poniewaz tablica przerwan jest pozmieniana...

0

Dobra dzieki, udalo mi sie to ominac, wiem ze ten topic to raczej jak monolog, ale jesli znacie jakies inne sposoby dostepu do GDT to prosze napiszcie, fajnie sie dowiadywac nowych rzeczy.
Dla tych, ktorych interesuje dostep do calej pamieci 'tzw. kernel-mode' w windowsach NT polecam zapoznanie sie z programowym przerwaniem 2e (int 2e, furtka systemowa)

Jak to ominalem? Mianowicie dopisalem, niestety , do systemu deskryptor segmentu typu flat, ktory pozwolil mi na dostep do wszystkich komorek pamiec 0-4GB... i tyle...

1 użytkowników online, w tym zalogowanych: 0, gości: 1