cbrom 1.95 и гигабайтовский биос

Есть БИОС на базе Award для гигабайтовской материнской платы и есть желание его поредактировать.
Но видимо есть какие-то особенности подсчета контрольных сум, которые не учитываются cbrom 1.95 - Q-Flash ругается на собранный образ "Invalid BIOS Image".

Был проведен следующий эксперимент.
Взят оригинальный биос:
gigabyte.com.tw/Support/Motherboard/BIOS_DownloadFile.aspx?FileType=BIOS&F...


(файл MA78GUD3.F4 запакованый 7zip).

Вот "листинг" этого файла:

>CBROM195.exe MA78GUD3.F4 /D
CBROM195.exe V1.95 [12/14/07] (C)Phoenix Technologies 2001-2007

              ********  MA78GUD3.F4 BIOS component ********

 No. Item-Name         Original-Size   Compressed-Size Original-File-Name
================================================================================
  0. System BIOS       20000h(128.00K)  12B9Bh(74.90K)  MA78GUD3.BIN
  1. XGROUP CODE       0E3E0h(56.97K)   09D4Dh(39.33K)  awardext.rom
  2. ACPI table        069E8h(26.48K)   030BEh(12.19K)  ACPITBL.BIN
  3. EPA LOGO          0168Ch(5.64K)    0030Dh(0.76K)   AwardBmp.bmp
  4. GROUP ROM[18]     041C0h(16.44K)   02C40h(11.06K)  ggroup.bin
  5. GROUP ROM[20]     02640h(9.56K)    01BE4h(6.97K)   ffgroup.bin
  6. YGROUP ROM        0B950h(46.33K)   06005h(24.00K)  awardeyt.rom
  7. GROUP ROM[22]     0F630h(61.55K)   008B5h(2.18K)   tgroup.bin
  8. GROUP ROM[23]     0F630h(61.55K)   0015Bh(0.34K)   t1group.bin
  9. GROUP ROM[24]     0F630h(61.55K)   0015Ch(0.34K)   t2group.bin
 10. GROUP ROM[ 0]     073B0h(28.92K)   02E72h(11.61K)  _EN_CODE.BIN
 11. VGA ROM[1]        0EA00h(58.50K)   094CFh(37.20K)  VGA_DVI.BIN
 12. OEM6 CODE         0EA00h(58.50K)   094D0h(37.20K)  VGA_HDMI.BIN
 13. OEM1 CODE         0C800h(50.00K)   07BDBh(30.96K)  UI.BIN
 14. PCI ROM[A]        0FC00h(63.00K)   09CBDh(39.18K)  SATARAID.BIN
 15. PCI ROM[B]        03600h(13.50K)   02427h(9.04K)   ahci.BIN
 16. OEM3 CODE         0C000h(48.00K)   0704Ch(28.07K)  ahci.DLL
 17. PCI ROM[C]        0C800h(50.00K)   079FDh(30.50K)  rtegrom.lom
 18. LOGO1 ROM         00B64h(2.85K)    00520h(1.28K)   DBIOS.BMP
 19. OEM0 CODE         03006h(12.01K)   022A6h(8.66K)   SBF.BIN
 20. GV3                08E73h(35.61K)  02FF0h(11.98K)  AGESACPU.ROM
 21. MINIT             19801h(102.00K)  1982Bh(102.04K) MEMINIT.BIN
 22. HTINIT             05011h(20.02K)  05040h(20.06K)  HT.DLL
 23. 2 PE32 in MB       00550h(1.33K)   005CFh(1.45K)   HT32GATE.BIN
 24. LOGO BitMap       4B30Ch(300.76K)  0EA1Dh(58.53K)  UD3_D.bmp
(SP) NCPUCODE          05800h(22.00K)   05800h(22.00K)  NCPUCODE.BIN

  Total compress code space  = E2000h(904.00K)
  Total compressed code size = 9B78Eh(621.89K)
  Remain compress code space = 46892h(282.14K)

                          ** Micro Code Information **
    Bridge ID                          |     Bridge ID
 North    South      Update ID  CPUID  |  North    South      Update ID  CPUID
---------------------------------------+----------------------------------------
     C0012102     0401                  |       1000002     0|

С помощью cbrom 1.95 были сначал extract-нуты, а потом release-нуты модуль MEMINIT.BIN и все идущие после него (MEMINIT.BIN, HT.DLL, HT32GATE.BIN, UD3_D.bmp)
Потом все эти модули были добавлены назад в том же порядке.
Листинг результирующего файла оказался точно таким же как и у изначального.

Потом были сделаны дампы обоих файлов и сравнены.
Оказалось, что есть определенные различия.
Причем похоже они в полях, где хранятся LHA контрольные суммы.
А также есть разница в выравнивании содержимого модуля HT32GATE.BIN - если CBROM195 выровнял начало к ближайшему адресу кратному 16, то у изначального файла выравнивание было 4K.

Измененный файл можно найти здесь:
icyb.net.ua/~avg/MA78GUD3.F41

Вот начальная часть diff-а между дампами:

--- MA78GUD3.F4.hd       2009-09-03 19:53:43.316258641 +0300
+++ MA78GUD3.F41.hd      2009-09-04 11:52:47.820313604 +0300
@@ -26727,9 +26727,9 @@
 000686e0  86 b1 f9 39 f4 da a2 14  c4 b9 59 d2 2d d8 ac 02  |...9......Y.-...|
 000686f0  74 7a 8e de eb 29 b5 f2  dd 25 c6 6f 64 be 11 1b  |tz...)...%.od...|
 00068700  04 b9 ca 25 c6 6b e4 65  27 ed da fd d9 77 81 71  |...%.k.e'....w.q|
-00068710  37 24 5c bb ca b0 00 24  4c 2d 6c 68 30 2d 04 98  |7$\....$L-lh0-..|
+00068710  37 24 5c bb ca b0 00 24  f9 2d 6c 68 30 2d 04 98  |7$\....$.-lh0-..|
 00068720  01 00 01 98 01 00 00 00  69 40 20 01 0b 4d 45 4d  |........i@ ..MEM|
-00068730  49 4e 49 54 2e 42 49 4e  18 8d 20 03 00 00 00 00  |INIT.BIN.. .....|
+00068730  49 4e 49 54 2e 42 49 4e  34 1e 20 03 00 00 00 00  |INIT.BIN4. .....|
 00068740  4d 5a 2e 00 76 00 00 00  20 00 00 00 ff ff 00 00  |MZ..v... .......|
 00068750  00 00 1a 2c 00 00 00 00  1e 00 00 00 01 00 00 00  |...,............|
 00068760  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
@@ -33202,8 +33202,8 @@
 00081f10  1c 30 24 30 2c 30 34 30  3c 30 4c 32 50 32 58 32  |.0$0,040<0L2P2X2|
 00081f20  64 32 70 32 7c 32 88 32  94 32 00 00 00 00 00 00  |d2p2|2.2.2......|
 00081f30  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00081f40  60 ff 1f 5c 2d 6c 68 30  2d 1e 50 00 00 11 50 00  |`..\-lh0-.P...P.|
-00081f50  00 00 00 7a 40 20 01 06  48 54 2e 44 4c 4c 06 75  |...z@ ..HT.DLL.u|
+00081f40  60 ff 1f cc 2d 6c 68 30  2d 1e 50 00 00 11 50 00  |`...-lh0-.P...P.|
+00081f50  00 00 00 7a 40 20 01 06  48 54 2e 44 4c 4c ea 01  |...z@ ..HT.DLL..|
 00081f60  20 0d 00 00 00 00 00 00  00 00 00 00 00 00 00 00  | ...............|
 00081f70  4d 5a 90 00 03 00 00 00  04 00 00 00 ff ff 00 00  |MZ..............|
 00081f80  b8 00 00 00 00 00 00 00  40 00 00 00 00 00 00 00  |........@.......|
@@ -34483,3818 +34483,3816 @@
 00086f40  d7 33 de 33 e5 33 ec 33  f3 33 fa 33 01 34 08 34  |.3.3.3.3.3.3.4.4|
 00086f50  0f 34 16 34 1d 34 24 34  2b 34 32 34 39 34 40 34  |.4.4.4$4+42494@4|
 00086f60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00086f80  9c ff 25 b3 2d 6c 68 30  2d a7 05 00 00 50 05 00  |..%.-lh0-....P..|
+00086f70  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 7f  |................|
+00086f80  1d ff 25 13 2d 6c 68 30  2d 57 05 00 00 50 05 00  |..%.-lh0-W...P..|
 00086f90  00 00 00 7c 40 20 01 0c  48 54 33 32 47 41 54 45  |...|@ ..HT32GATE|
-00086fa0  2e 42 49 4e fe cd 20 57  00 00 00 00 00 00 00 00  |.BIN.. W........|
-00086fb0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00087000  4d 5a 4f 01 03 00 00 00  20 00 01 00 ff ff 00 00  |MZO..... .......|
-00087010  00 00 97 13 00 00 00 00  1e 00 00 00 01 00 00 00  |................|
-00087020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00087030  00 00 00 00 00 70 f8 ff  00 00 00 00 00 00 00 00  |.....p..........|
-00087040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
+00086fa0  2e 42 49 4e 0b c0 20 07  00 00 00 00 00 00 00 00  |.BIN.. .........|
+00086fb0  4d 5a 4f 01 03 00 00 00  20 00 01 00 ff ff 00 00  |MZO..... .......|
+00086fc0  00 00 97 13 00 00 00 00  1e 00 00 00 01 00 00 00  |................|
+00086fd0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
+00086fe0  00 00 00 00 b0 6f f8 ff  00 00 00 00 00 00 00 00  |.....o..........|
+00086ff0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|

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

попробуйте старый добрый cbrom220 или cbrom207 только экстрактить придётся типа так
CBROM220.EXE ORIGINAL.ROM /OTHER 4078:0000 EXTRACT SLPKEY.BIN
цифры 4078 могут отличаться. может и вообще не увидеть каких-то модулей.

Дрессируем коров :)

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

CBROM V2.20 (C)Phoenix Technologies, Ltd 2001 All Rights Reserved.

******** ORIGINAL.ROM BIOS component ********

No. Item-Name Original-Size Compressed-Size Original-File-Name
===============================================================================
0. System BIOS 20000h(128.00K) 12B9Bh(74.90K) MA78GUD3.BIN
1. XGROUP CODE 0E3E0h(56.97K) 09D4Dh(39.33K) awardext.rom
2. ACPI table 069E8h(26.48K) 030BEh(12.19K) ACPITBL.BIN
3. EPA LOGO 0168Ch(5.64K) 0030Dh(0.76K) AwardBmp.bmp
4. GROUP ROM[18] 041C0h(16.44K) 02C40h(11.06K) ggroup.bin
5. GROUP ROM[20] 02640h(9.56K) 01BE4h(6.97K) ffgroup.bin
6. YGROUP ROM 0B950h(46.33K) 06005h(24.00K) awardeyt.rom
7. GROUP ROM[22] 0F630h(61.55K) 008B5h(2.18K) tgroup.bin
8. GROUP ROM[23] 0F630h(61.55K) 0015Bh(0.34K) t1group.bin


9. GROUP ROM[24] 0F630h(61.55K) 0015Ch(0.34K) t2group.bin
10. GROUP ROM[ 0] 073B0h(28.92K) 02E72h(11.61K) _EN_CODE.BIN
11. VGA ROM[1] 0EA00h(58.50K) 094CFh(37.20K) VGA_DVI.BIN
12. OEM6 CODE 0EA00h(58.50K) 094D0h(37.20K) VGA_HDMI.BIN
13. OEM1 CODE 0C800h(50.00K) 07BDBh(30.96K) UI.BIN
14. PCI ROM[A] 0FC00h(63.00K) 09CBDh(39.18K) SATARAID.BIN
15. PCI ROM[B] 03600h(13.50K) 02427h(9.04K) ahci.BIN
16. OEM3 CODE 0C000h(48.00K) 0704Ch(28.07K) ahci.DLL
17. PCI ROM[C] 0C800h(50.00K)079FDh(30.50K)rtegrom.lom
18. LOGO1 ROM 00B64h(2.85K)00520h(1.28K)DBIOS.BMP
19. OEM0 CODE 03006h(12.01K)022A6h(8.66K)SBF.BIN
20. Other(4067:0000) 08E73h(35.61K)02FF0h(11.98K)AGESACPU.ROM
21. Other(4069:0000) 19801h(102.00K)1982Bh(102.04K)MEMINIT.BIN
22. Other(407A:0000) 05011h(20.02K)05040h(20.06K)HT.DLL
23. Other(407C:0000) 00550h(1.33K)005CFh(1.45K)HT32GATE.BIN
24. LOGO BitMap 4B30Ch(300.76K)0EA1Dh(58.53K)UD3_D.bmp
Соответственно
MEMINIT.BIN 4069:0000
HT.DLL 407A:0000
HT32GATE.BIN 407C:0000
ну, а лого уже понятно.

Дрессируем коров :)

В том и проблема, что не понимает.
Например MEMINIT.BIN обязан быть в несжатом виде (lh0), а cbrom220 сжимает...
Вообще интересно - изначально в LH заголовке модуля meminit CRC-16 было 8D18, cbrom 195 посчитал 1E34, а lha говорит, что должно быть 3634. Где тут собака порылась?

Хмм, кажется в этом случае поле CRC-16 в заголовке LHA используется для других целей.
Эксперимент:
Руками изменил несколько байтов в теле MEMINIT.BIN.


После этого с помощью cbrom195 убрал и вернул последний модуль (logo), чтобы пересчитались общие контрольные суммы.
При этом значение в CRC-16 заголовка MEMINIT.BIN естественно не поменялось.
Полученый таким образом образ Q-Flash признал правильным. (Прошивать его я естественно не стал).
Таким образом я прихожу к выводу, что поле CRC-16 для этого модуля выполняет иную функцию.

Попутный вопрос: а что в образе биоса помечено повторяющейся последовательностью fe ff 00 00?
(область около килобайта размером)

Путем дизассемблирования бут-блока биоса были сделаны следующие наблюдения:
1. поле CRC-16 для "ранних" lh0 модулей похоже не играет никакой роли;
2. сумма байтов этих модулей должна быть ноль (только тело, без заголовка), это очень важно;
3. в коде есть метки "MEMINITENTRYPOINT" и "HTINITINENTRYPOINT", сразу после них находятся указатели на тела соответствующих модулей (для meminit прямо на начало MZ заголовка, для ht куда-то внутрь тела);
4. также рядом с HTINITINENTRYPOINT, по смещению F2E9D находится указатель на MZ-начало модуля HT32GATE

Под ранними модулями подразумевались как раз MEMINIT.BIN (4069), HT.DLL (407a), HT32GATE.BIN (407c).

Кстати, на каком-то китайском сайте есть cbrom 1.96.
Скачал, но еще не тестировал.

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

Поищите на оверах 1.98

Дрессируем коров :)

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

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые 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.

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

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