OSDev
http://osdev.su/

Два вопроса
http://osdev.su/viewtopic.php?f=6&t=462
Страница 1 из 2

Автор:  Bargest [ 31 окт 2011, 18:27 ]
Заголовок сообщения:  Два вопроса

1) Если система загрузилась с HDD\Floopy\CD, как определить номер этого устройства на шине ATA (Master\Slave и контроллер)?
2) По Long-mode:
Цитирую официальную документацию на AMD64.
Цитата:
Long mode allows an IRET to pop a null selector into SS from the stack under the following conditions:
• The target mode is 64-bit mode.
• The target CPL<3.

То есть загрузка нулевого селектора при возврате в 3е кольцо не работает. При этом загрузка любого НЕ нулевого селектора в SS у меня приводит к исключению #GP, в коде ошибки - этот самый селектор. Пробовал загружать селекторы дескрипторов данных и даже пустых дескрипторов и дескрипторов кода, все безрезультатно.
Какие значения для SS являются рабочими?

Автор:  pavia [ 31 окт 2011, 19:09 ]
Заголовок сообщения:  Re: Два вопроса

1) Поищи на wasm.ru неоднократно обсуждалось.
а) EDD int 13h функция 48h.
б) сигнатурный поиск.
с) Детерминистически, адрес/путь прописан в загрузочной записи.
2) Возьми второй том от intel найди инструкцию iret и посмотри в каких случаях будет генерироваться #GP.

Автор:  phantom-84 [ 31 окт 2011, 19:11 ]
Заголовок сообщения:  Re: Два вопроса

1) сначала из dl берешь номер загрузочного диска BIOS, а потом с помощью информационных функций BIOS или какими-либо экспериментальными методами определяешь местоположение этого диска.
2) я не большой спец. по длинному режиму, но думаю, обычный селектор сегмента данных для чтения/записи с RPL=3 может использоваться в качестве значения SS.

Автор:  phantom-84 [ 31 окт 2011, 19:18 ]
Заголовок сообщения:  Re: Два вопроса

pavia, б и с (в?) не надежны. Можно давать команды устройству посредством BIOS, а затем анализировать регистры соответствующих контроллеров.

Автор:  pavia [ 31 окт 2011, 19:40 ]
Заголовок сообщения:  Re: Два вопроса

По чему не надёжно. Берём время из биоса записываем во второй сектор при помощи int. Ищем эту консонанту при помощи портов. Потом записываем новое время и повторный поиск тем самым мы удалили ложные срабатывания. Недостаток запись может быть не реализована.
по поводу анализа регистров ихмо это ещё более не надёжно.
Может тогда проще автоматический реверс биоса сделать?

Автор:  Bargest [ 31 окт 2011, 19:56 ]
Заголовок сообщения:  Re: Два вопроса

По поводу диска - значит я правильно предполагал, чего-нибудь записать и считать. Спасибо.
По поводу SS - я пробовал юзать дескриптор данных. В LM в таковом можно менять только два бита - P и S (по крайней мере так написано в доках). DPL там вообще игнорируется, но я пробовал и его менять. И RPL селектора стека пробовал ставить в 3. Ничего не помогает.

Автор:  phantom-84 [ 31 окт 2011, 20:12 ]
Заголовок сообщения:  Re: Два вопроса

pavia, я исключаю любой метод детекта, где нужно что-то писать, тем более многократно. Почему ненадежен анализ регистров, не понимаю - объясни.

Bargest, для номеров дисков 80h+ первоочередной способ детекта - это функция 48h.

Автор:  pavia [ 31 окт 2011, 20:18 ]
Заголовок сообщения:  Re: Два вопроса

1) Анализ регистров после операции
2) Анализ регистров во время операции

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

Автор:  Bargest [ 31 окт 2011, 20:19 ]
Заголовок сообщения:  Re: Два вопроса

EDD же может не быть.
А если запись на диск не реализована - то диск меня не интересует.
Насчет категорического "нет" на запись - можно предварительно считать сектор, потом вернуть.

Автор:  pavia [ 31 окт 2011, 20:40 ]
Заголовок сообщения:  Re: Два вопроса

При создании/разметке диска записываем уникальную сигнатуру.
Дальше при загрузке не составит труда загрузиться.
Из проблем вижу только одну - совпадение сигнатур. Когда она может быть? Только при копировании диска один к одному.
Но постойте. Копии идентичны можем загружаться с любой. Поэтому такое поведение можно записать как особенность загрузчика. Для CD копий подходит хорошо.
Смена мастер на слейв проходит не заметно. Копирования диска на другой диск и загрузка со второго будет работать, тоже на ура.
Основная проблема сделали копию что-то в ней поменяли. А сигнатуру не поменяли. Тут решаемо записью на диск.
Так как такое мало вероятно для CD и более вероятно для HDD.
Для флешек, так как их скорее всего будут копировать один в один, то нужно проверка через запись.

Всё надёжно.

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