OSDev
http://osdev.su/

Stack overflow?
http://osdev.su/viewtopic.php?f=5&t=671
Страница 1 из 4

Автор:  DJ PhoeniX [ 07 янв 2013, 07:54 ]
Заголовок сообщения:  Stack overflow?

Уважаемые знатоки, внимание, чёрный ящик!
Есть ОС. Её код расположен в 0x00000000 00401000. На этот же адрес устанавливается RSP при загрузке.
Внимание, вопрос: как обрабатывать ситуацию, когда rsp опускается ниже 0x00000000 00100000? Этакий Stack Overflow?
Гугл не спас...

Автор:  SII [ 07 янв 2013, 08:01 ]
Заголовок сообщения:  Re: Stack overflow?

Защитой памяти. Сразу под нижней границей стека разместить страницу, доступ к которой запрещён.

Автор:  DJ PhoeniX [ 07 янв 2013, 09:55 ]
Заголовок сообщения:  Re: Stack overflow?

SII писал(а):
Защитой памяти. Сразу под нижней границей стека разместить страницу, доступ к которой запрещён.

А какой именно флаг поставить? Из PML4E ессно...
Первый бит снять, видимо?
И, да, ничего что эта страница будет 0x000FF000 (код BIOS)?

Вложения:
pml4e.png
pml4e.png [ 12.2 КБ | Просмотров: 13189 ]

Автор:  SII [ 07 янв 2013, 10:00 ]
Заголовок сообщения:  Re: Stack overflow?

DJ PhoeniX писал(а):
А какой именно флаг поставить? Из PML4E ессно...
Первый бит снять, видимо?


Документацию смотреть надо. Я с ИА-32 уже давно не работаю...

Цитата:
И, да, ничего что эта страница будет 0x000FF000 (код BIOS)?


А вот это может стать проблемой. Гарантии, что там нет кода 32/64-разрядного режима, дать никто не может: где что размещать, является личным делом разработчиков БИОСа. Хотя, с другой стороны, если Вы никак БИОС не вызываете, то он может вызываться "самопроизвольно" только в режиме управления системой (SMM), а ему глубоко без разницы, в каком процессор был режиме, как настроена защита и т.д.

Автор:  DJ PhoeniX [ 07 янв 2013, 10:02 ]
Заголовок сообщения:  Re: Stack overflow?

Это AMD-64 (IA-64?)... После груба сразу прыгаю в лонгмод, и биос не трогаю.
Да, мне кажется, что грабель не возникнет, но, всё же, интересно знать правильное решение.

Автор:  pavia [ 07 янв 2013, 10:09 ]
Заголовок сообщения:  Re: Stack overflow?

Цитата:
А вот это может стать проблемой. Гарантии, что там нет кода 32/64-разрядного режима, дать никто не может

SII, а если подумать? Какой нормальный разработчик ОС будет запихивать БИОС туда где у него стек кончается?
Я могу дать для своей ОС гарантии там биоса нет и небудет.

Автор:  SII [ 07 янв 2013, 10:16 ]
Заголовок сообщения:  Re: Stack overflow?

DJ PhoeniX писал(а):
Это AMD-64 (IA-64?)... После груба сразу прыгаю в лонгмод, и биос не трогаю.
Да, мне кажется, что грабель не возникнет, но, всё же, интересно знать правильное решение.


BIOS, скорей всего, неоднократно придётся дёргать в процессе инициализации системы -- ведь до тех пор, пока не будут загружены и инициализированы свои драйверы, кто-то должен работать как минимум с диском... В общем, так поступать рискованно.

Кстати говоря, IA-64 ни малейшего отношения к IA-32 не имеет. Это абсолютно другая архитектура, которая известна как Itanium. Само же название архитектуры для привычных ПКшных процов Интел не поменяла -- IA-32 так и осталась. Когда им надо подчеркнуть, что речь о процессорах, способных выполнять 64-разрядный код, они пишут Intel 64 -- но никак не IA-64.

Автор:  DJ PhoeniX [ 07 янв 2013, 10:18 ]
Заголовок сообщения:  Re: Stack overflow?

SII писал(а):
BIOS, скорей всего, неоднократно придётся дёргать в процессе инициализации системы -- ведь до тех пор, пока не будут загружены и инициализированы свои драйверы, кто-то должен работать как минимум с диском... В общем, так поступать рискованно.
Не-не, все необходимые для загрузки дрова будут в initrd (или built-in).

Автор:  418ImATeapot [ 07 янв 2013, 11:18 ]
Заголовок сообщения:  Re: Stack overflow?

Очистить флаг номер ноль. (Presented)

Автор:  418ImATeapot [ 07 янв 2013, 11:24 ]
Заголовок сообщения:  Re: Stack overflow?

DJ PhoeniX писал(а):
Это AMD-64 (IA-64?)... После груба сразу прыгаю в лонгмод, и биос не трогаю.
Да, мне кажется, что грабель не возникнет, но, всё же, интересно знать правильное решение.

Не путайте IA-64 и AMD-64. IA-64 он же Itaniun - провальный VLIW/EPIC, не совместимый с IA-32. AMD-64 - он же x86-64 он же EM64T он же IA-32e он же Intel 64 - расширение i386, с ним совместимое.

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/