Рис.2. Ищем подстроку -lh. | Рис.3. Первой найдется в начале "original.bin". | Рис.4. Второй - в начале awardext.rom. | Рис.5. Перебираем, пока не находим нужный нам модуль (видно его название). |
Рис.6. Выделяем модуль - его начало левей подстроки -lh на два байта. Кто не знает, для выделения в hiew используется '*'. | Рис.7. Ищем начало следующего модуля... | Рис.8. ...не "закрывая" выделяемую область... | Рис.9. ...и сдвигаемся на три байта влево (это должен быть нулевой байт). Модуль выделен! |
Рис.10. Сохраняем "как есть" (As Is). | Рис.11. И теперь его можно распаковать любым архиватором. | Рис.12. Всё вышеописанное можно было сделать с помощью команды cbrom f8.bin /pci extract. Но ученье - свет! :) | Рис.13. Для добавления используем строчку: cbrom f8.bin /pci edit_i8.ttt |
Редактирование "original.bin"
Извлечение "original.bin"
Но главным вариантом в редактировании биосов является, конечно же, изменение "original.bin". Способов для извлечения "original.bin" известно превеликое множество:
- запустив модбин и переключившись в другое окно скопировать себе временный одноименный файл, который он (модбин) создает в процессе работы с биосом.
- тьма всевозможных утилит, работающих с Award BIOS - имеет возможность распаковки любого модуля
- наконец, просто архиватором (или даже TotalCommaner-ом), который "видит" как lzh-архив с одним файлом внутри - "original.bin"
Однако, у всех (и других подобных) есть существенный недостаток - зависимость от вышеописанных утилит и различных модификаций Award BIOS (оставаясь при этом v.6.00PG). Например, (не специально, но получилось удачно :) ) выбранный файл:
- не открывается модбином
- "несъедобен" для многих утилит
- не определяется архиватором, как LZH-архив.
Вот тут и пригодится опыт, полученный в предыдущем разделе. :)
Рис.14. Аналогично сначала ищем начало "original.bin" по подстроке -lh. | Рис.15. Для Award BIOS v.6.00PG (р озлива этого тысячелетия) - он есть всегда первый модуль в биосе, в нашем случае он располагается по адресу 90000h. | Рис.16. Выделяем, начиная с начала... | Рис.17. ...и ищем его конец... |
Рис.18. ...следующий модуль - awardext.rom. | Рис.19. Сдвигаемся левей на три байта - в отличие от "простых" модулей в конце у "original.bin" есть еще и байт CRC(FF в нашем случае), который нам для распаковки ни к чему (хотя с ним тоже прекрасно распакуется - как на рисунке). | Рис.20. Сохраняем в файл... | Рис.21. ...и распаковываем. "original.bin" к редактированию готов! |
Замена "original.bin" отредактированным вариантом
Вариантов добавления новой (отредактированной) версии "original.bin" в биос также есть несколько и эти варианты во многом аналогичны его распаковке с их недостатками. Потому не будем отвлекаться на "мишуру" и постараемся сделать максимально "правильно".
-
Рис.22. После редактирования упаковываем "original.bin" с помощью старенького lha. | Рис.23. Уже хорошо знакомой процедурой поиска в исходном биосе по подстроке -lh... | Рис.24. ... ищем конец модуля "original.bin". | Рис.25. Сдвигаемся на три байта влево - захватив байт CRC - выделяем область... |
Рис.26. ...которая продлится до самого конца. Конец упакованных модулей проще всего найти по FFFFFF... | Рис.27. Обычно конец находится с первой попытки (удачный пример - с "трудностям" :) ), но сейчас "по дороге" попался незапакованный модуль, в котором тоже есть искомые "эфэфки". Пропускаем эту область и ищем дальше. | | Рис.29. Для "запаса" (на всякий случай) захватим кусочек FF в конце (ведь размер упакованного "original.bin" может отличаться от начального) и сохраняем в файл. |
Рис.30. Далее следует "хитрая" процедура - копируем в конец ранее созданного "1.lzh" полученный "хвост" биоса ("ost.tmp" - состоящий из всех упакованных модулей кроме "original.tmp"). | Рис.31. В результате полученный "слепок" (из "модульной начинки" в виде запакованного "original.bin" + 1 байт CRC + остальные модули биоса) записываем в файл. | Рис.32. Как мы отмечали, "original.bin", который является началом модульной начинки" - был обнаружен по адресу 90000 - туда и вставляем весь полученный файл. | Рис.33. Итак, собрать - собрали и cbrom уже даже может корректно подтвердить этот факт. Однако контрольные суммы-то не пересчитаны - ни байт в конце "original.bin", ни "общая" CRC всех модулей, которая лежит сразу же перед BootBlock-ом. |
Пересчет CRC
Итак, теперь нам еще предстоит пересчитать контрольные суммы:
- Контрольную сумму модуля "original.bin", которая располагается сразу после него, перед всеми остальными запакованными модулями.
- "Общую" контрольную сумму всех модулей, которая располагается в самом конце используемого ими (модулями) пространства биоса, сразу перед началом бутблока.
Правило следующее:
- CRC модуля "original.bin" пересчитывает modbin
- "Общую" CRC пересчитывает cbrom
Один "не трогает" контрольные суммы "другого", поэтому для пересчёта обеих контрольных сумм обязательны два этапа.
Отправить комментарий