Дизассемблирование AMIBIOS 8. Как собрать единый файл из распакованных модулей?

Всем доброго дня! Ребят, заинтересовался исследованием 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 на себя (т.е. зацикливание), в чем прикол?

binaryshadow писал(-а):
если идти от F000:FFF0, то натыкаюсь на бесконечный цикл!
Это очень радует:D.
Чем-то напоминает высказывание "Иду по какой-то улице и постоянно натыкаюсь на одни и те же достопримечательности, неизвестные широкой общественности".

Аватар пользователя Root

Цитата:
Прыгая в 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 ; ---------------------------------------------------------------------------

Аватар пользователя savely

Ждем прерывания... Почитайте про 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 ; ---------------------------------------------------------------------------

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей