Всем доброго дня! Ребят, заинтересовался исследованием BIOS, почитал разную литературу, но так и не смог найти ответ на свой вопрос.
Вопрос вот в чем:
Экспериментирую с прошивкой (AMIBIOS 8) для материнской платы MSI G31TM-P35. Поскольку часть прошивки хранится в сжатом виде, то для распаковки использую MMTOOL. Получил 22 модуля. Можно дизассемблировать каждый модуль по отдельности, но тогда не понятно как они друг с другом взаимодействуют. Вот и встал вопрос, как собрать все модули в один файл, чтобы его можно было бы загрузить в Иду и проанализировать? Знаю, что надо создавать новые сегменты и грузить в них код, но возникает новый вопрос: по каким адресам загружать каждый из модулей?
Чувствую, что вопросы не новы, но, к сожалению, поиск решений не увенчался успехом.
Что посоветуете?
Мужики, ну что не поможите? Хоть в каком направлении двигаться? Как вы решаете подобные задачи?
За прошедшее время от начала темы можно было не торопясь раскопать bootblock до модуля декомпрессии.
Pinczakko здесь давал ссылку на разбор AMI.
в иду (если хота всё и сразу) грузится только SLAB - первый мегабайт ОЗУ по сегментам
остальное разбирается обычно отдельно
остальные модули подключаются/откключаются на разных этапах
а вообще, если идти от F000:FFF0, то вся логика BIOS поддаётся пониманию (будь то Award, Ami, Efi и прочее)
а когда логика и структура понятна, то утилиту сборки/разборки биоса из модулей или слаба из сегментов написать почти элементарно!
дерзайте! чего там бояться)) я пишу и всё работает!
Спасибо за советы, буду разбираться дальше)
если идти от F000:FFF0, то натыкаюсь на бесконечный цикл!
Ну а как связать название сегментов из SLAB с модулями - непонятно совсем.
Из другой темы (удалено):
Прыгая в BB от FFFF FFF0h натыкаюсь на jmp на себя (т.е. зацикливание), в чем прикол?
Чем-то напоминает высказывание "Иду по какой-то улице и постоянно натыкаюсь на одни и те же достопримечательности, неизвестные широкой общественности".
конкретный листинг плз. Возможно это защитный цикл (напр., тест оборудования не сработал как надо), срабатывающий по какому-то условию. И, соответственно, система начинает его крутить только когда какие-то неполадки. А другая ветвь выполнения Вы просто проглядели...
Аццкий ромбовод {:€
Я пока не волшебник - я только учусь! :-P
AMI 8.0
seg000:167D ; --------------------------------------------------------------------------- seg000:167D seg000:167D loc_167D: ; CODE XREF: seg000:loc_119j seg000:167D mov ecx, 1Bh seg000:1683 rdmsr seg000:1685 btr ax, 8 seg000:1689 wrmsr seg000:168B and eax, 0FFFFF000h seg000:1691 mov edi, eax seg000:1694 mov eax, [edi+20h] seg000:1699 mov [edi+310h], eax seg000:16A1 mov eax, [edi+300h] seg000:16A9 and eax, 0FFF33000h seg000:16AF or eax, 4500h seg000:16B5 mov [edi+300h], eax seg000:16BD seg000:16BD loc_16BD: ; CODE XREF: seg000:loc_16BDj seg000:16BD jmp short loc_16BD seg000:16BF ; ---------------------------------------------------------------------------
Ждем прерывания... Почитайте про MSR 1Bh, он же IA32_APIC_BASE и что там в памяти APIC лежит по соотв. адресам типа 300h
А кому счас легко...
savely, спасибо за подсказку, буду копать в этом направлении.
А как в IDA более грамотно или даже проще для понимания шагать по джампам?
Мне ничего в голову лучшего не пришло, чем вот это (отмечено красным):
seg000:1A1C ; --------------------------------------------------------------------------- seg000:1A1C seg000:1A1C loc_1A1C: ; CODE XREF: seg000:1A4Fj seg000:1A1C ; seg000:1A74j ... seg000:1A1C or al, 80h seg000:1A1E out 70h, al ; CMOS Memory: seg000:1A1E ; seg000:1A20 pause seg000:1A22 pause seg000:1A24 mov al, ah seg000:1A26 out 71h, al ; CMOS Memory: seg000:1A26 ; shutdown status byte seg000:1A28 pause seg000:1A2A pause seg000:1A2C seg000:1A2C loc_1A2C: ; CODE XREF: seg000:1A36j seg000:1A2C mov al, 0 seg000:1A2E in al, 71h ; CMOS Memory seg000:1A30 pause seg000:1A32 pause seg000:1A34 cmp al, ah seg000:1A36 jnz short loc_1A2C seg000:1A38 jmp di ; di, 1A51h seg000:1A38 ; di, 1A76h seg000:1A38 ; di, 1A7Fh seg000:1A38 ; seg000:1A3A ; ---------------------------------------------------------------------------
Отправить комментарий