Модули AMI Bios
Хочу добавить совй код как модуль либо код в уже существующий модуль AMI BIOS.
Мат. Плата EliteGroup Via-P6 P4VVM2 (FC-478) Bios Date 01/24/03
e030123s.rom
(ecs.com.tw/ECSWeb/Downloads/ProductsDetail_Download.aspx?CategoryID=1&...(3.1)&MenuID=35&LanID=6)
Для просмотра содержимого биоса пользуюсь программой amibcp.exe 7.51.03 (554336Byte)
Я искал место куда могу вставить свой кусок кода. Для моих нужд самым приемлимым вариантом будет вставка кода как раз перед передачей управления на MBR(0000:7C00). Распаковав каждый модуль (c помощью amibcp) и порывшись я нашёл что считывание MBR происходит в модуле runtime.
И тут у меня возникает несколько вопросов:
0) Какой порядок исполнения модулей в AMI Bios.
1) может ли мой код повлиять/испортить выполнение BIOS(учитывая что я пользуюсь 4kb буфеом в памяти и могу ли я вообще использовать память на момент исполнения моего кода)
как мне стоить добавить этот модуль в файл прошивки (с помощью amibcp)
как dynamic либо с фиксированным адресом ка например у runtime.
Какой указывать адрес в случае выбора фиксированного участка загрузки чтобы выполнение моего кода не повлияло на работу других модулей.
2) Нужно ли придерживаться определённой структуры для написания своих модулей для ami (имя заголовок CRC и т д )
ну и часть репорта(amibcp) может кому что-нибуудь подскажет что делать в этом случае
AMIBIOS ROM Information Report Name:VIA_P6 ROM File:E030123S.ROM File:repo2.dat Thu Mar 24 18:39:38 2005 BIOS MODULES ------------ (those marked '>' are compressed module) BIOS Version : 0700 BIOS Date : 01/24/03 BIOS Tag : P4VMM2 BIOS Size : 256 Kb Module ID/Name RomLoc SourceSize SizeInRom %% RunLoc INIT F000:C000 04000(016384) 04000(016384) 00.00 ---- ---- NVRAM/ESCD F000:8000 04000(016384) 04000(016384) 00.00 ---- ---- AMD SIP ROM F000:7E00 00200(000512) 00200(000512) 00.00 ---- ---- >02 Runtime F090:0006 0A3E0(041952) 074E2(029922) 28.68 F000:5C20 08 Interface F01E:000C 00706(001798) 0071A(001818) 00.00 Dynamic >00 POST EB92:000E 05BD6(023510) 048BE(018622) 20.79 F000:0000 >03 DIM E831:0004 04E18(019992) 0361A(013850) 30.72 E000:B1E0 >04 Setup Client E5F2:0004 03898(014488) 023F0(009200) 36.50 Dynamic >01 Setup Server E3EF:000D 02F12(012050) 02027(008231) 31.69 F000:0000 06 DMI Data E3C0:0002 002E7(000743) 002FB(000763) 00.00 Dynamic >09 MP E385:0005 0048A(001162) 003AD(000941) 19.02 Dynamic >0A Notebook D9B4:000A 10000(065536) 09D0B(040203) 38.66 Dynamic >0D Int-13 D498:0009 06C95(027797) 051C1(020929) 24.71 Dynamic >0F ACPI Table D45E:0006 0988E(039054) 003A3(000931) 97.62 Dynamic >10 ACPI AML D31A:0002 02E31(011825) 01444(005188) 56.13 Dynamic >12 Configuration D289:0007 00A6A(002666) 0090B(002315) 13.17 Dynamic >13 DMI Code D1F2:000A 00BBA(003002) 0096D(002413) 19.62 Dynamic 11 P6 Micro Code CD70:000E 04808(018440) 0481C(018460) 00.00 Dynamic >3C UserDefined CD2B:0002 0059C(001436) 0045C(001116) 22.28 Dynamic >32 Image Dsiplay Code CD0B:000E 002FF(000767) 001F4(000500) 34.81 Dynamic >31 EPA / OEM Logo CC85:000A 011B1(004529) 00864(002148) 52.57 Dynamic 0C ROM-ID CC83:000E 00008(000008) 0001C(000028) 00.00 Dynamic >60 ASCII Font CC2F:0000 01000(004096) 0054E(001358) 66.85 Dynamic >52 Language 2 CB29:0008 0246A(009322) 01058(004184) 55.12 Dynamic >20 PCI AddOn ROM C467:000B 0C000(049152) 06C1D(027677) 43.69 8D04:5333 >20 PCI AddOn ROM C1B6:000B 04000(016384) 02B10(011024) 32.71 3065:1106 50 Default Language C1B2:0003 00034(000052) 00048(000072) 00.00 Dynamic 51 Language 1 C1AD:0005 0003A(000058) 0004E(000078) 00.00 Dynamic >2A UserDefined C15A:0003 0073F(001855) 00532(001330) 28.30 5000:0000 Bytes Used 03EA65 ( 256613) Bytes Free 00159B ( 5531)
P.S. Попутно собираю базу прошивок AMI , Phoenix и ASUS(преимущественно ноутбуков) для выковыривания оттуда заводских паролей(если таковые имеются).
C уважением Виктор.
Забыл.
Возможно кто-то знает, как добавлять код в модуля, которые amibcp изменять не даёт.
С уважением Виктор.
P.S. Сорри за кривой репорт (перед постом смотрел - было всё Ok )
Виктор X
Можно разработать PCI AddOn ROM. Т.е. если, скажем, есть сетевуха без бутрома, то можно сделать такой модуль, что он якобы будет этим самым Бутромом и при вшитии в БИОС будет получать управление.
Минус такого метода - необходимо наличие карточки в компе, в противном случае "бутром" не получит управления.
Можете прочитать про данную методику (и не только) на сайте Pinczakko
Репорт подправил. Для таких случаев полезно использовать код [code]
Аццкий ромбовод {:€
Я пока не волшебник - я только учусь! :-P
Спасибо. Я в курсе предложенной ссылки. Помниться мне всё что было там описано, описано применительно к Award'am(пример как минимум), а меня интересует специфика работы с модулями AMI. А код написать и вставить я уже сумею.
C уважением Виктор.
Root
Спасибо за то что подправили репорт. За ссылку тоже спасибо. Добавлять возможность загрузки с сетевой мне не нужно(я сделал себе роутер из старого P 166 но изменял я не прошивку материнки а прошивку SCSI контроллера, потому что не было у меня сетевой с ROM чипом а биос материнки из-за добавлений настолько вырос что вставить туда что-либо без изменения алгоритма паковки не было возможности)
Всё что я понаходил за время изучения биосов в основном касалось AWARD'ов. Я надеюсь кого нибудь есть и документация на AMI касательно модулей.
Cудя по Вашему ответу, мои нужды не были поняты.
Уточняю:
> Я искал место куда могу вставить свой кусок кода. Для моих нужд самым приемлимым вариантом будет вставка кода как раз перед передачей управления на MBR(0000:7C00).
Я выбрал это место исходя из простых соображений. Если на этом этапе BIOS считывает сектора с HDD в память (почему-то не сразу передавая туда управление) то и я могу сделать тоже перед этим вызовом int 13h который считывет MBR в 0000:7C00.
amibcp править этот модуль не даёт. Ну и ладно. Я сделаю свой модуль. Но мои опасения насчёт того, что мои считывания HDD в память могут испортить уже имеющиеся в ней данные. (Я не знаю какие модуля какие области используют и не знаю порядка выполнения модулей на текущий момент) Скажем так я не знаю повлияет ли моя работа на прежнее фукционирование модулей. К примеру я тоже захотел использовать область 0000:7C00 для своих нужд и это могло бы привести к непредсказуемым результататм загрузки если runtime отрабатывается перед запуском моего модуля считав туда MBR(и ожидая выполнения всех остальных модулей чтобы потом передать управление на 0000:7C00 ибо он не сразу передаёт туда выполнение) , который я наверняка затру своими данными. Поэтому для меня порядок работы модулей критичен и критичны области памяти ими используемые.
С уважением Виктор.
Решил я воспользоваться для работы с модулями программой mmtool (Windows). Программа периодически сбоит, однако если не перемещаться по меню а сразу делать необходимые действия то можно добиться необходимых результатов. В моём случае я запустил прогу выбрал replace модулю runtime, и изменения прошли успешно(в отличие от amibcp которая не даёт это делать). Потом я решил проверить не испортила ли эта не стабильная программа сам ROM файл. Для проверки распаковывал каждый модуль под DOS с помощью amibcp и проверял с уже распаковваными эталонными вариантами. Как результат изменения были только в модуле runtime которыя я собственно и менял.
Поэтому вопрос о алгоритме паковки модулей стал для меня менее насущным(это не значит что меня он не интересует, но как я понял у многих необходимость трассировать вручную биос для выковыривания и описания алгоритмов вызывает полный и тотальный обломс )
C уважением Виктор.
P.S. Кто нибудь отзовитесь у кого есть таблица или любая информация о регистре edx который инициализируется при включении питания. Меня интересуют значения этого регистра в зависимости от модели процессора.
Не знаю, как насчет при включении, но при передаче управления BIOS'ом на загруженный boot(MBR) - в dl - номер диска.
А кому счас легко...
Да, да так и есть если загрузка идёт с винта
перед вызовом int 13h в ah=02( считывание),al=количество считываемых секторов dh=side , cx для сектора и цилиндра(младшие 6 байт для секора оставшиеся 2 байта уходят как старшие для цилиндра в ch), dl=80h(если загрузка с первого винта) 81h второго и т д. es:bx место куда считываем.
Но я не про это спрашивал
К примеру опишу несколько первых команд в биосе который я упоминал выше
итак первая команда по адресу F000:FFF0 в памяти, если посмотреть e030123s.rom с помощью hiew.exe это будет адрес 3FFF0 (если кому не ясно смотрите geocities.com/mamanzip/Articles/Award_Bios_RE/Award_Bios_RE_guide.html пункт 8.1.4)
итак имеем первую инструкцию
EACDFF00F0 jmp 0F000:0FFCD
смотрим далее тем же hiew адрес в файле 3FFCD имеем
E932C0 jmp 3C002 (это адресация в hiew) имеем
cli
cld
mov ax,cs
mov ss,ax
mov ebp,edx
nop
mov sp,0C012
jmp 3C715
(если не понятно куда передаётся управление читайте ссылку приведённую выше)
не знаю кого на сколько таких jmp'ов хватит но в конце концов обнаружиться инструкция по сравнению dx с каким либо числовым значением (не так чтобы это сильно мешало дальнейшему трассированию но хотелось бы знать какое значение dx в зависимости от модели процессора)
Пробегала через мои глаза какая-то англоязычная тех документация и в моей памяти смутно зацепилось что при инициализации ...... читайте пункт 8.1.4 вышеприведённой ссылки, ... бла бла бла и регистр edx получает значение модели ппроцессора(цитирую не дословно)
Просьба к тем кто кто знает как оно на самом деле объяснить что будет в регистре edx при включении питания.
С уважением Виктор.
Нет, к int 13h отношения не имеет (разве что нумерация та же). Когда начинается выполнение Boot-сектора (переходом из BIOS по 7С00) - dl номер диска. А насчет EDX - а смысл? Даже если там по PW-ON и есть что-то полезное, то шанс им попользоваться невелик. К тому времени, пока до тебя дойдет управление - там уже ничего не будет, скорее всего.
Поиск рулит, кстати. Яндекс, запрос "состояние процессора после включения питания", первая же ссылка
lib.rin.ru/cgi-bin/load/docs.pl?open=112400.txt&view=104698
А кому счас легко...
хм... метод неточный.
История такая:
пропатчил АМИ БИОС. Распаковал модули оригинального и пропатченного: выглядять один в один (почти). Но при этом полбиоса превратилось в массив из FFок :-o
Лехко.. Есть такая книжка Гука "Процессоры Pentium II, Pentium Pro и просто Pentium" (СПб, изд. Питер, 1999 год)
Раздел "8.3. Идентификация процессоров"
BIOS может получить информацию о типе 32-разрядного процессора, считав содержимое регистра DX непосредственно после сигнала RESET. Расшифровка полей регистра DX для процессоров 486 и старше приводится в таблл. 8.2. Для младших процессоров регистр DH содержит идентификатор процессора (03 - 80386), DL - номер модели.
Поле "тип" (биты 13:12) различает процессоры ОЕМ-версий (00), OverDrive (01) и Dual (10); значение 11 зарезервировано. Более интересная информация содержится в полях "семейство" (биты 11:8) и "модель" (биты 7:3). Поле степпинга (биты 3:0) несет дополнительную информацию, которую, к сожалению, без таблиц изготовителя не расшифровать. Процессоры 80386 имели несколько иное назначение бит: поле "семейство" совпадает, поле "модель" занимает биты 15:11, биты 7:0 отводятся под степпинг.
Таблица 8.2. Коды идентификации процессоров
Аццкий ромбовод {:€
Я пока не волшебник - я только учусь! :-P
А теперь мой комментарий к тексту - короче, в EDX находится нечто вроде CPUIDа, если не он сам...
Да, и про сжатие - в Фениксах используется LZARI, в Авардах - LHA. В АМИ вроде тоже LZARI, хотя не уверен...
MmM, blood
я же просил сделать моноширинный русский и англицкий одинакового размера
Аццкий ромбовод {:€
Я пока не волшебник - я только учусь! :-P
Отправить комментарий