Такой вот вопрос возник можно ли поменять местами сегменты памяти (кода данных стека) в лин-м адресном пространстве! Насколько я понял они размещ-ся в области 1 метра! При описании сегмента данных он занос-ся в GDT (глобальную дескр-ную таблицу) размер стека 100h размер сегмента кода 10А размер сегмента данных 78h.Описаны они соответ-но в таком порядке по возрастанию адресов от 0x00000000h .... 100000h. (порядок данные-код-стек). Адреса соответ-но выдаю-ся им ОС. Вот соб-но и вопрос можно ли поменять их местами если да то каким образом и что на это влияет!
Причем тут реальный режим? Линейное адрестное пространство 4ГБ. Поменять можно. Изменяешь базу, делов то.
Freeman Вся проблема в том, что процессор не позволит исполнять сегмент данных, также как и писать в сегмент кода. Единственный вариант это замена двух дескрипторов в GDT, тоесть сегмент кода становится сегментом данных и наоборот.
Так мужики вы считаете что достаточно изменить расположение дескрипторов данных,кода,стека в GDT соотвт-но перезаписав их селекторы. ( и это изменит расположение их сегментов в ОП)? (Ну логично вопрос стал бы таким образом соответ-но они располога-ся у меня в 1 мег-те (от 0x00....0h -100000h) снизу вверх data(GDT)-code-stack значит ли это что такое расположение обуслав-ся расположением их дескр-ров в GDT?
Не расположение(это не имеет значения, только определяет значение селектора, который и индексирует дескриптор) их, а тип. Не совсем понятна задача.
Не значит. Расположение задается базой в дескрипторе плюс предел плюс флаги G и E. Сегменты могут и перекрываться.
Вот посм-те на картинку вопрос поставлю иначе с чем связ-но такое расположение сегментов (соотв-но пустоты я там не рисовал не выравнивал по параграфам)
Можно как угодно определить расположение, дескриптор всё задаёт, сегмент стека и данных это одно и тоже, просто в разных регистрах селекторы находятся. http://sasm.narod.ru/docs/pm/pm_in/chap_4.htm