![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
![]()
При прыжке на сегмент состояния задачи (в ГДТ) генерируется исключение страничной адрессации #PF, а в регистр СR2 записывается значение 0xffff0030. Отображение страниц на память - 1:1 (определено 8 таблиц). Задача представляет собой пустой цикл for.
Юзаю gcc и qemu для Винды. Помогите, плз. вот часть исходника.. .... Код:
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. Последний раз редактировалось Stilet; 11.08.2008 в 11:26. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
![]()
Если я правильно понял (непривычная запись), то проблема вот в чем.
после ltr [TSS 0x18] задача, описанная в 0x18 становится текущей. Для нее в TSS устанавливается бит занятости. Повторный вызов той же задачи (jmp 0x18) вызывает исключение. Нужно предварительно очистить бит зщанятости. Что-то вроде: mov bx, [ds:GDTOfs] add bx, TSS_Main // адрес таблицы TSS 0x18 and byte [ds:bx+5], 11111101b А еще проще вместо jmp 0x18 - сделать jmp на другую задачу. Тогда для текущей задачи (TR) (поскольку считается что она уже работает) будет сделано сохранение состояния, контекст переключится на другую и выполнение продолжится до возврата из нее. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
![]()
не-а =)) Это было бы #GP исключение (общей защиты), а так генерится страничное #PF. Все страницы определены как присутствующие, для записи/чтения и доступные пользовательскому коду (биты p, r/w, u/s). В ТСС cr3 записываю тот же, что и был раньше, системный.. В чем причина - не пойму.
![]()
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 07.08.2008
Сообщений: 33
|
![]()
Вопрос снят. Ошибка в джампе на сегмент состояния задачи и не все поля TSS были инициализированы
"... Раньше мы жили завтра, а теперь и сегодня - вчера
Вместо Роллингов - хакеры, вместо Битлов - юзера..." (с) Б.Г. |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разработка ScreenPlayer | Shaitan63 | Софт | 29 | 09.06.2008 12:34 |
РАЗРАБОТКА DLL | Leo | Общие вопросы Delphi | 2 | 26.10.2007 21:35 |
Разработка протокола | OrdJONY | Общие вопросы по программированию, компьютерный форум | 2 | 04.10.2007 13:21 |