Дизассемблирование AMIBIOS8

Предлагаю обсудить тему ...
Есть желающие поучаствовать ?

P.S. На затравку:

Формат блока 1B (Single Link Arch BIOS)

  • Offset Size Type Comment
  • 0 2 word 'Размер таблицы сегментов'

To be continued ... May be ;]

[/]
Аватар пользователя apple_rom

А что интересует-то? Вроде, формат достаточно очевиден.

Спасибо за интерес к поднятому вопросу .

Интересует формат заголовка и входящих в него структур: таблицы сегментов и релокейшенов, смещения и т. п.

Насколько я понял, формат элемента таблицы сегментов
выглядит как , где
(24 бита) представлен в виде - младший байт старшего слова , - младшее слово;
- C string (null terminated).
Т.е. элемент таблицы сегментов вида
02 4С 00 'INTERFACE_CSEG' 00
следует читать как
начало сегмента 'INTERFACE_CSEG' по смещению 0002004С
от начала блока (файла) ?

Нужно блок дизасемблировать корректно .

Если есть информация, прошу поделиться ...

--
With Best Wishes, A. Woland

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

INTERFACE:00A1 Store_m1b_Segs  proc near               ; CODE XREF: RAM_MAP+1Ep
INTERFACE:00A1                 pushad
INTERFACE:00A3                 push    es
INTERFACE:00A4                 push    ds
INTERFACE:00A5                 mov     bp, sp
INTERFACE:00A7                 mov     ax, ds
INTERFACE:00A9                 movzx   eax, ax
INTERFACE:00AD                 shl     eax, 4
INTERFACE:00B1                 add     esi, eax
INTERFACE:00B4                 push    0
INTERFACE:00B6                 pop     ds
INTERFACE:00B7                 movzx   ecx, word ptr [esi+2] ; LEN_m1b_header
INTERFACE:00BD                 mov     edx, ecx
INTERFACE:00C0                 sub     sp, cx
INTERFACE:00C2                 mov     bx, sp
INTERFACE:00C4                 push    ss
INTERFACE:00C5                 pop     es
INTERFACE:00C6                 movzx   edi, sp
INTERFACE:00CA                 push    esi
INTERFACE:00CC                 cld
INTERFACE:00CD                 rep movs byte ptr es:[edi], byte ptr [esi] ; Store m1b_header in stack
INTERFACE:00D0                 pop     esi
INTERFACE:00D2                 push    ds
INTERFACE:00D3                 pop     es
INTERFACE:00D4                 movzx   ecx, word ptr ss:[bx+0] ; Количество сегментов
INTERFACE:00D9                 add     esi, edx        ; ESI =
INTERFACE:00DC
INTERFACE:00DC
INTERFACE:00DC
INTERFACE:00DC loc_135FC:                              ; CODE XREF: Store_m1b_Segs+8Dj
INTERFACE:00DC                 add     bx, 4
INTERFACE:00DF                 push    ecx
INTERFACE:00E1                 mov     edi, ss:[bx+0]
INTERFACE:00E5                 cmp     edi, 0E0000h
INTERFACE:00EC                 jb      short loc_1361C
INTERFACE:00EE                 cmp     edi, cs:dword_13679
INTERFACE:00F4                 jnb     short loc_1361C
INTERFACE:00F6                 mov     cs:dword_13679, edi
INTERFACE:00FC
INTERFACE:00FC loc_1361C:                              ; CODE XREF: Store_m1b_Segs+4Bj
INTERFACE:00FC                                         ; Store_m1b_Segs+53j
INTERFACE:00FC                 add     bx, 4
INTERFACE:00FF                 mov     ecx, ss:[bx+0]
INTERFACE:0103                 test    ecx, 80000000h
INTERFACE:010A                 jz      short skip
INTERFACE:010C                 and     ecx, 7FFFFFFFh
INTERFACE:0113                 mov     edx, ecx
INTERFACE:0116                 shr     ecx, 2
INTERFACE:011A                 jz      short loc_13640
INTERFACE:011C                 rep movs dword ptr es:[edi], dword ptr [esi] ; move dd
INTERFACE:0120
INTERFACE:0120 loc_13640:                              ; CODE XREF: Store_m1b_Segs+79j
INTERFACE:0120                 mov     ecx, edx
INTERFACE:0123                 and     ecx, 3
INTERFACE:0127                 jz      short skip
INTERFACE:0129                 rep movs byte ptr es:[edi], byte ptr [esi] ; move last db
INTERFACE:012C
INTERFACE:012C skip:                                   ; CODE XREF: Store_m1b_Segs+69j
INTERFACE:012C                                         ; Store_m1b_Segs+86j
INTERFACE:012C                 pop     ecx
INTERFACE:012E                 loop    loc_135FC

Спасибо ещё раз ...
А формат самого m1b_header известен ?
Меня интересует именно это. Всё, что расположено до смещения 0400
(начало первого сегмента RUN_CSEG).
Хочу скрипт для ИДы написать.

--
With Best Wishes, A. Woland

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

Ого, за 0400h строк скрипт - ...........

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Santa писал(-а):
Ого, за 0400h строк скрипт - ...........

А в чём здесь "ого" ? Есть скрипт ami.idc. Предназначен для дизасcемблирования "снятого" образа биос. Мне же нужен скрипт для дизасеблирования блока, распакованого из *.rom. Блок имеет заголовок, описывающий его структуру, сегменты, смещения и т.п. Описание структур этого заголовка мне и нужны. По-моему всё понятно.

--
With Best Wishes, A. Woland

Первые 2 байта - кол-во блоков информации.
Вторые 2 байта - размер заголовка.
Далее(в моём случае) (46*8) идут адреса сегментов с размерами, по 4 байта на адрес и размер.


С 198h начинаются блоки (пока не понял какие) вида POST2_CSEG...
seg000:0198                 db  50h ; P
seg000:0199                 db  4Fh ; O
seg000:019A                 db  53h ; S
seg000:019B                 db  54h ; T
seg000:019C                 db  32h ; 2
seg000:019D                 db  5Fh ; _
seg000:019E                 db  43h ; C
seg000:019F                 db  53h ; S
seg000:01A0                 db  45h ; E
seg000:01A1                 db  47h ; G
seg000:01A2                 db    0
seg000:01A3                 db    1
seg000:01A4                 db  0Ch
seg000:01A5                 db    0

Информация от сюда sites.google.com/site/pinczakko/pinczakko-s-guide-to-ami-bios-reverse-engi...
раздел 4.5. POST (Power-On Self-Test) Preparation

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

А где этот скрипт найти? ami.idc, в сети вроде не встречал...

Киньте ссылочку :)

скрипт раскладки SLAB-а по первому мегабайту?
у вас с этим трудности??

ami.idc не встречал (да и не искал никогда)
у меня он называется start_slab.idc вроде.... или slab_start.idc..

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

да нет трудностей нет - я ж не знаю что в скрпите есть, поэтому и не знаю что он делает:)

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

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

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

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