Здравствуйте. В настоящее время разбираю чипсет 945P. Конкретно регистр C0DRTx (Timing register). Разбираю для того, чтобы написать заплатку на биос - изменение таймингов памяти.
Смутил меня такой момент. Timing register располагается в i945 по смещению 114h. Но это его размещение относительно содержимого регистра MCHBAR, который в свою очередь находится по смещению 44h относительно bus:0,dev:0,func:0.
Не знаю, как добраться до него через регистр MCHBAR. В формате обращения к шине PCI под смещение выделено 8 младших бит, отсюда следует, что просто записать по смещению число 114h не удастся (размерность не та).
Пока действия вырисовываются примерно следующие:
1. Получить доступ к MCHBAR (enable-бит в 1 для b:0,d:0,f:0,o:44h)
2. Взять из него базовый адрес и добавить к нему смещение 114h (Timing Register)
А вот что потом делать с этим полученным адресом? Как его использовать, чтобы все же получить доступ к регистру? Вот на этом и остановился.
Даташит на чипсет можно взять здесь:
[url=http://download.intel.com/design/chipsets/datashts/30146705.pdf
]download.intel.com/design/chipsets/datashts/30146705.pdf[/url]
С форума по ссылке Санты похоже работающий код.
Мой прокол - я не ушел во flat-режим. Хотя они там так и не догадались сами, просто пришел наш индонезийский гуру Пинчакко и наставил на путь истинный
Cсылка:
rebelshavenforum.com/sis-bin/ultimatebb.cgi?ubb=get_topic;f=52;t=000069
Скопированный код где-то в середине 4-ой страницы
А кому счас легко...
И еще вопрос. Прочитал статью Криса Касперски.
В частности, там есть момент про "Волшебную" последовательность 55 AA 7x. (в boot-блоке). Сказано, что в момент попадания на нее, предварительная инициализация ПК уже проведена - поэтому можно вставлять свой код.
У меня 8 AMI BIOS. Провел поиск по сигнатуре - и не нашел. Проверил на другой восьмерке, то же самое. После чего оставил только 55 АА, но такая последовательность присутствует только вне boot-блока и соответственно для данных целей не пригодна. Не знаю, почему данный код:
означает, что начальная инициализация завершена (т.е. что означает 0AA55). Но тем не менее, чтобы воспользоваться способом, описанным в статье, мне также надо найти место, когда инициализация процессора(начальная) и памяти завершена.
Из того что по этому поводу сделал:
1. Загрузил прошивку в IDA.
2. Перенес бут-блок из 0x7-го в f000:xxxx сегмент (чтобы заработали переходы)
3. Походил по переходам (начиная с точки входа F000:FFF0), прошел чекпоинт D0(первоначальная инициализация процессора) и попал в место, где по всей видимости происходит тест клавиатуры:
Может, конечно, и ошибаюсь. Но похожее на АА55 не нашел.. Так вот хотелось бы знать сигнатуру (и ее пояснение), наличие которой говорило бы о том, что начальная инициализация уже завершена. Т.е. так, чтобы можно было воспользоваться только hex-редактором.
Если кому интересен биос прикрепил.
savely, спасибо. Буду вникать..
xname, с того же форума pdf-ку почитайте. Вот прямая ссылка: lejabeach.com/sisubb/Practical_BIOS_Editing.pdf
-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам
Спасибо. К сожалению сейчас не могу себе позволить такой объем, т.к. плачу за траффик, но при первой возможности ознакомлюсь.
Отправить комментарий