Автор: dicabor , 26 мая 2010
Всем доброго дня! Ребят, заинтересовался исследованием BIOS, почитал разную литературу, но так и не смог найти ответ на свой вопрос :(.
Вопрос вот в чем:
Экспериментирую с прошивкой (AMIBIOS 8) для материнской платы MSI G31TM-P35. Поскольку часть прошивки хранится в сжатом виде, то для распаковки использую MMTOOL. Получил 22 модуля. Можно дизассемблировать каждый модуль по отдельности, но тогда не понятно как они друг с другом взаимодействуют. Вот и встал вопрос, как собрать все модули в один файл, чтобы его можно было бы загрузить в Иду и проанализировать? Знаю, что надо создавать новые сегменты и грузить в них код, но возникает новый вопрос: по каким адресам загружать каждый из модулей?
Чувствую, что вопросы не новы, но, к сожалению, поиск решений не увенчался успехом.
Что посоветуете?
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

dicabor

15 лет 8 месяцев назад

Мужики, ну что не поможите? Хоть в каком направлении двигаться? Как вы решаете подобные задачи?

maco

15 лет 8 месяцев назад

[off]За прошедшее время от начала темы можно было не торопясь раскопать bootblock до модуля декомпрессии :).
Pinczakko здесь давал ссылку на разбор AMI.[/off]

sush (не проверено)

15 лет 8 месяцев назад

в иду (если хота всё и сразу) грузится только SLAB - первый мегабайт ОЗУ по сегментам
остальное разбирается обычно отдельно

остальные модули подключаются/откключаются на разных этапах

а вообще, если идти от F000:FFF0, то вся логика BIOS поддаётся пониманию (будь то Award, Ami, Efi и прочее)

а когда логика и структура понятна, то утилиту сборки/разборки биоса из модулей или слаба из сегментов написать почти элементарно!

дерзайте! чего там бояться)) я пишу и всё работает!

dicabor

15 лет 8 месяцев назад

Спасибо за советы, буду разбираться дальше)
если идти от F000:FFF0, то натыкаюсь на бесконечный цикл!
Ну а как связать название сегментов из SLAB с модулями - непонятно совсем.

Из другой темы (удалено):
Прыгая в BB от FFFF FFF0h натыкаюсь на jmp на себя (т.е. зацикливание), в чем прикол?

maco

15 лет 8 месяцев назад

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

Root

15 лет 8 месяцев назад

Прыгая в BB от FFFF FFF0h натыкаюсь на jmp на себя (т.е. зацикливание), в чем прикол?

конкретный листинг плз. Возможно это защитный цикл (напр., тест оборудования не сработал как надо), срабатывающий по какому-то условию. И, соответственно, система начинает его крутить только когда какие-то неполадки. А другая ветвь выполнения Вы просто проглядели...
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 [color=red]seg000:16BD loc_16BD: ; CODE XREF: seg000:loc_16BDj seg000:16BD jmp short loc_16BD[/color] seg000:16BF ; ---------------------------------------------------------------------------

savely

15 лет 8 месяцев назад

Ждем прерывания... Почитайте про 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 [color=red]seg000:1A38 jmp di ; di, 1A51h seg000:1A38 ; di, 1A76h seg000:1A38 ; di, 1A7Fh seg000:1A38 ; [/color]seg000:1A3A ; ---------------------------------------------------------------------------