Здравствуйте, вопрос такой: Занимался тут экспериментами над системой, перехватывая управление в точке 0:7С00(используя регистры dr0-dr7). И передавал его на свой код. Мой код забирал себе 1 ядро (и делал его недоступным для системы) и работал с ним, а основное ядро должно был вернуть управление загрузчику и запустить систему, но система не грузится. Падает после возвращения управления, где я понять не могу. Привезли мне тут игрушку Arium ECM-XDP3, пытался посмотреть ей. Забранное мной ядро выполняет мой код, а основное доходит до возврата управления и где то дальше уже умирает. К сожалению точную точку падения я обнаружить не смог( Поэтому вопрос, какие могут быть причины падения? я грешу на некорректную очистку регистров, но уверенности нет, где можно посмотреть какие они должны быть перед передачей управления? Загрузчик принадлежит системе Win 7 pro 32 bit. Сразу отмечу, мой код лежит в памяти и никто его не трогает кроме меня. И ковыряясь с помощью эмулятора 1 раз заставил появиться надпись: BOOTMGR is missing. Но с чистым биосом система грузится нормально. И еще 1 вопрос может кто сталкивался, Arium ECM-XDP3 не ловит начальную точку биос, машина hp, при включенном Ariume, просто пищит спикером и не грузится(пищит также как если нет биоса вообще), а если он отключен, то спокойно грузится. Мат. плата hp dc 7700, на какой то интеловской плате та же проблема(помню что чипсет 945й, но модель точно не помню). Я извиняюсь за поток сознания, но более осмысленно написать не могу. По ходу могу ответить на все вопросы.
Надеюсь, значения регистров соответствуют реальному режиму и стек проинициализирован корректно. Также надеюсь, что отладочное исключение происходит по выполнению команды в указанной точке и отлаживаемая программа уже находится в памяти. Непонятно, что мешает сохранить состояние по крайней мере основных регистров, а потом восстановить это состояние и вернуться в исходную точку. Первичный загрузчик Win 7 использует значение в регистре dl, транслируемое от BIOS через MBR-загрузчик.
насколько я знаю у каждого ядра свои регистры. в том числе и отладочные. такчто невлезая в загрузочное ядро проследить работу не получиться.
да влезать то придется, но как то хочется обойтись малой кровью, Arium глюковат маленько, и давать после него гарантии сложно.
А можно это поподробнее? Это сто пудово, смотрел и ариумом, и проверял пост платой. Надо будет проверить, спасибо за информацию
Поразбирался я с загрузчиком, трассировка позволила выяснить что исполнение сворачивает в боковую ветку, которая посылает Code (Text): mov dx, 64h mov al, 0feh out dx, al и на этом все, посмотрел в нете это команда ребута процессора . Поставил на машину XP, все работает как надо. В общем это зхагрузчик что то проверяет и решает убить машину. У кого нибудь идеи есть что он проверяет? Буду используя отладчик разбираться теперь
Насколько я знаю нет, чип биос закрывает сам себя используя BIOS_CNTL регистр конфигурационного пространства PCI. Да и тот кусолк кода что тя просмотрел с портами особо не работал.
В общем исследование вопроса я не останавливал и новые результат описал в ветке: http://wasm.ru/forum/viewtopic.php?pid=452038#p452038