OSDev

для всех
Текущее время: 22 дек 2024, 04:06

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Переход в userspace
СообщениеДобавлено: 24 май 2019, 19:35 

Зарегистрирован: 26 янв 2019, 14:00
Сообщения: 34
Добрый вечер!

Загрузил в память скомпилированную программу. Проверил все ли заголовки верные. Поместил загрузочный сегмент в 0x02000000. Пытаюсь сделать "скачок". Получаю ошибку страницы с адресом примерно 0x57f00000. Откуда он вообще взялся ума не приложу. location равен 0x02000000. Если указывать адрес тот, где ранее, так скажем, остановился ошибок уже не наблюдаю и переход успешен, ибо вызов системных вызовов проходит.
Код:
   asm volatile(   "mov $0x23, %%ax \n"
            "mov %%ax, %%ds \n"
            "mov %%ax, %%es \n"
            "mov %%ax, %%fs \n"
            "mov %%ax, %%gs \n"
            "mov %%esp, %%eax \n"
            "pushl $0x23 \n"
            "pushl %%esp \n"
            "pushf \n"
            "pushl $0x1B \n"
            "pushl %0 \n"
            "iret \n"
            : : "r"(location));


Заранее благодарю за помощь и советы!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход в userspace
СообщениеДобавлено: 25 май 2019, 03:21 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1426
Особо не посоветую, ибо тонкости IA-32 давным-давно позабыл (работаю-то не с ними). Но помню, что при переключении "колец защиты" (как понимаю, Вы пытаетесь перейти с 0 на 3 -- обычно же их используют для кода ядра и кода пользователя соответственно) участвует TSS; соответственно, она должна быть правильно заполнена, а её адрес загружен в соответствующий регистр. В частности, в TSS лежат значения указателей стеков -- если не для всех четырёх "колец защиты", то, по меньшей мере, для 1-3.

Кроме того, я не уверен, что информация, которая должна быть восстановлена при возврате из "прерывания" с целью перехода с 0 в 3 кольцо (а точней, с любого кольца в любое другое менее привилегированное), должна лежать в стеке, из которого осуществляется переход (именно так обстоит дело в M-профиле процессоров ARM -- там при прерывании кое-какие регистры сохраняются в стеке прерванного кода, а не в стеке ядра, и лишь после их сохранения происходит переключение стеков; соответственно, при возврате из прерывания происходит переключение стеков, а затем уже восстановление регистров). Но это надо читать в документации на IA-32.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход в userspace
СообщениеДобавлено: 25 май 2019, 13:00 

Зарегистрирован: 16 апр 2019, 17:15
Сообщения: 11
Извините, не очень понял, что происходит, но по ассемблерной инструкции iret могу предположить, что это попытка выйти из прерывания? Тогда нужно смотреть откуда вы туда вошли, там должен быть настроен стекфрейм например.
Если Вы находитесь в защищенном режиме и требуется перейти в userspace, то это же делается просто установкой соотвествующих битов в psr?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход в userspace
СообщениеДобавлено: 25 май 2019, 17:31 

Зарегистрирован: 26 янв 2019, 14:00
Сообщения: 34
Спасибо большое за ваши ответы!
Как оказалось я все делал правильно, а результат не получал потому что перепутал номер системного вызова. Крайне глупо. Изначально считал, что переход вовсе не осуществлялся. Однако ошибка страницы никуда не ушла и адрес где то в ядре. Но это совсем другой вопрос. Спасибо еще раз!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход в userspace
СообщениеДобавлено: 06 июн 2019, 21:47 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
abondarev писал(а):
Если Вы находитесь в защищенном режиме и требуется перейти в userspace, то это же делается просто установкой соотвествующих битов в psr?
iret - вполне обычный запуск прикладного кода.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB