А что интересует-то? Вроде, формат достаточно очевиден.
Спасибо за интерес к поднятому вопросу .
Интересует формат заголовка и входящих в него структур: таблицы сегментов и релокейшенов, смещения и т. п.
Насколько я понял, формат элемента таблицы сегментов
выглядит как , где
(24 бита) представлен в виде - младший байт старшего слова , - младшее слово;
- C string (null terminated).
Т.е. элемент таблицы сегментов вида
02 4С 00 'INTERFACE_CSEG' 00
следует читать как
начало сегмента 'INTERFACE_CSEG' по смещению 0002004С
от начала блока (файла) ?
Нужно блок дизасемблировать корректно .
Если есть информация, прошу поделиться ...
[code:1]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
[/code:1]
Спасибо ещё раз ...
А формат самого m1b_header известен ?
Меня интересует именно это. Всё, что расположено до смещения 0400
(начало первого сегмента RUN_CSEG).
Хочу скрипт для ИДы написать.
Ого, за 0400h строк скрипт - ...........
Ого, за 0400h строк скрипт - ...........
А в чём здесь "ого" ? Есть скрипт ami.idc. Предназначен для дизасcемблирования "снятого" образа биос. Мне же нужен скрипт для дизасеблирования блока, распакованого из *.rom. Блок имеет заголовок, описывающий его структуру, сегменты, смещения и т.п. Описание структур этого заголовка мне и нужны. По-моему всё понятно.
Первые 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
Информация от сюда http://sites.google.com/site/pinczakko/pinczakko-s-guide-to-ami-bios-reverse-engineering-1
раздел 4.5. POST (Power-On Self-Test) Preparation
А где этот скрипт найти? ami.idc, в сети вроде не встречал...
Киньте ссылочку :-)
скрипт раскладки SLAB-а по первому мегабайту?
у вас с этим трудности??
ami.idc не встречал (да и не искал никогда)
у меня он называется start_slab.idc вроде.... или slab_start.idc..
да нет трудностей нет - я ж не знаю что в скрпите есть, поэтому и не знаю что он делает :)
Интересует формат заголовка и входящих в него структур: таблицы сегментов и релокейшенов, смещения и т. п.
Насколько я понял, формат элемента таблицы сегментов
выглядит как , где
(24 бита) представлен в виде - младший байт старшего слова , - младшее слово;
- C string (null terminated).
Т.е. элемент таблицы сегментов вида
02 4С 00 'INTERFACE_CSEG' 00
следует читать как
начало сегмента 'INTERFACE_CSEG' по смещению 0002004С
от начала блока (файла) ?
Нужно блок дизасемблировать корректно .
Если есть информация, прошу поделиться ...
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
[/code:1]
А формат самого m1b_header известен ?
Меня интересует именно это. Всё, что расположено до смещения 0400
(начало первого сегмента RUN_CSEG).
Хочу скрипт для ИДы написать.
А в чём здесь "ого" ? Есть скрипт ami.idc. Предназначен для дизасcемблирования "снятого" образа биос. Мне же нужен скрипт для дизасеблирования блока, распакованого из *.rom. Блок имеет заголовок, описывающий его структуру, сегменты, смещения и т.п. Описание структур этого заголовка мне и нужны. По-моему всё понятно.
Вторые 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Информация от сюда http://sites.google.com/site/pinczakko/pinczakko-s-guide-to-ami-bios-reverse-engineering-1
раздел 4.5. POST (Power-On Self-Test) Preparation
Киньте ссылочку :-)
у вас с этим трудности??
ami.idc не встречал (да и не искал никогда)
у меня он называется start_slab.idc вроде.... или slab_start.idc..