Хочется немного с БИОСом разобраться. То, что похожий топик уже есть, я знаю, но у меня немного другой вопрос. Допустим, у меня есть прошивка, и я знаю смещение в ней, с которого начинается небольшой участок неиспользуемой информации (этот участок забит FFh). Туда нужно записать сигнатуру, по какой буду проверять (все из той же ПЗУ сетевой карты) та ли прошивка находится в ПЗУ БИОСа. Затем затереть те участки флешки, по которым прошивальшик определяет тип микросхемы, и подправить контрольную суму. Вот. Теперь чего у меня не получается: Так, например, здесь http://www.wasm.ru/article.php?article=ab_flashbios_i описан метод выведения из тени для моего чипсета (VX430) и используется смещение 4Сh. Но в даташите на мой южный мост это смещение (X-Bus Chip Select) равное 4Eh. Там это все еще на PCI to ISA Bridge находится. Почему так? В этом http://forum.rom.by/viewtopic.php?t=12425 топике в UNIFLASH (где про размапливание южных мостов) используется также 4Сh, но там также используется маска не 44h, а 440000h (получается 4Eh). Также в некоторых источниках говорится, что после открытия доступа к флеш, можно обращаться к ней как к обычной памяти. Вот, например, с Кряклаба: Я сдампил первые 32К начиная с FFFE0000h (128K, и в UNIFLASHе отображается как базовый адрес), но они не совпадают с дампом UNIFLASHа. А записывать таким способом тоже можно? Еще, как я понял, можно осуществлять чтение/запись с помощью специфичных для разных ПЗУ команд (после 0AA55h). Правда тогда не получится изменить несколько байт кода (нужно будет прочитать весь сектор(main 112Kb), изменить его, а затем записать обратно). А куда эти команды нужно посылать? А если что-то получится, так можно будет около сигнатуры и небольшой ключ записывать. Будет что то вроде БИОСовского пассворда, но поинтересней. От нечего делать всякие бредовые идеи появляются
Уже во всем разобрался, но чет не выходит ни чего Может подскажите где грабли в этом коде (должет сектор стереть на W29EE011) И еще. Объясните, зачем перед каждой командой ставить 66h (и 67h перед адресом), если можно просто написать eax, например, и корректно компилится будет?
lukash При четении/записи в PCI CFG разрешается работать только с двойными словами. 4Ch адресс кратный 4 байтам. В борланд паскале встроенный ассемблер не воспринемает eax. Вот и приходиться кодами описывать. Ты перенес код из паскаля в асм. Так что можешь смело заменить. Насчет коментария это очистка всего чипа. mov addr,ROMBase+5555h mov data,10h ;Chip Erase До конца код еще не просмотрел.
Pavia Спасибо. Подправил, и теперь все, как в UNIFLASHe (4ch и остальные значения тоже оттуда(при трассировке)), но очистка не происходит. Буду все с начала проверять Вот подправленый код
Получилось стереть флэш, и вроде как прочитать/записать ее (не правильно выводил ее из тени). Теперь вот что неясно: 1 После записи можно править CRC в любом месте заархивированного модуля, или в начале модуля (перед lh5)? 2 Каждый модуль является архивом. Если я изменю несколько байт в нем, он корректно разархивируется BootBlockом, или нужно распаковать, поправить, запаковать, и затем уже перезаписать весь модуль?
Все, сделал! Теперь прям пароль на вход в машину, да еще и энергонезависимый. Правда зачем он пока не знаю, но все равно весело Этот пароль разместил на 93 Кб флэши (между всеми модулями и BootBlockом) и даже CRC править не нужно!