BIOS

Тема в разделе "WASM.ELECTRONICS", создана пользователем lukash, 8 янв 2007.

  1. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Хочется немного с БИОСом разобраться.
    То, что похожий топик уже есть, я знаю, но у меня немного другой вопрос.
    Допустим, у меня есть прошивка, и я знаю смещение в ней, с которого начинается небольшой участок неиспользуемой информации (этот участок забит 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), изменить его, а затем записать обратно). А куда эти команды нужно посылать?

    А если что-то получится, так можно будет около сигнатуры и небольшой ключ записывать. Будет что то вроде БИОСовского пассворда, но поинтересней.
    От нечего делать всякие бредовые идеи появляются :)
     
  2. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Уже во всем разобрался, но чет не выходит ни чего :)
    Может подскажите где грабли в этом коде (должет сектор стереть на W29EE011)

    И еще. Объясните, зачем перед каждой командой ставить 66h (и 67h перед адресом), если можно просто написать eax, например, и корректно компилится будет?
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    lukash
    При четении/записи в PCI CFG разрешается работать только с двойными словами. 4Ch адресс кратный 4 байтам.

    В борланд паскале встроенный ассемблер не воспринемает eax. Вот и приходиться кодами описывать. Ты перенес код из паскаля в асм. Так что можешь смело заменить.

    Насчет коментария это очистка всего чипа.
    mov addr,ROMBase+5555h
    mov data,10h ;Chip Erase

    До конца код еще не просмотрел.
     
  4. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Pavia

    Спасибо. Подправил, и теперь все, как в UNIFLASHe (4ch и остальные значения тоже оттуда(при трассировке)), но очистка не происходит.
    Буду все с начала проверять :dntknw:

    Вот подправленый код
     
  5. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Получилось стереть флэш, и вроде как прочитать/записать ее (не правильно выводил ее из тени).
    Теперь вот что неясно:
    1 После записи можно править CRC в любом месте заархивированного модуля, или в начале модуля (перед lh5)?
    2 Каждый модуль является архивом. Если я изменю несколько байт в нем, он корректно разархивируется BootBlockом, или нужно распаковать, поправить, запаковать, и затем уже перезаписать весь модуль?
     
  6. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Все, сделал!
    Теперь прям пароль на вход в машину, да еще и энергонезависимый. Правда зачем он пока не знаю, но все равно весело :)
    Этот пароль разместил на 93 Кб флэши (между всеми модулями и BootBlockом) и даже CRC править не нужно!