Witam.
Spotkałem się z bardzo dziwacznym problemem ;-(
Tworze wątek, eip ma wpisany adres procedurki(od początku pamięci), proces korzysta z LDT i wszystko ok(przywilej 3).
W procesie są 2 wpisy LDT(od segmentu kodu i danych).
Problem pojawia się, gdy w LDT(danych) zmienię adres początku(Base), w tedy wszystko się psuje.
Wyglądałoby, że tak ma być, lecz ja w procesie nie odwołuję się do danych!
void test_ldt(){
for(;;);
}
Gdy w LDT(kodu) ustawie adres eip, a samo zaś eip wyzeruje to działa dobrze - i tak ma być, lecz LDT(danych) musi być zawsze adresowany 0, bo inaczej różne błędy się dzieją w zależności gdzie jest adresowany.
Ustawienia w tss
//Index * 8 + 7
cs = 7;
es = 15;
ss = 15;
ds = 15;
fs = 15;
gs = 15;