Показать сообщение отдельно
Старый 28.08.2011, 23:17   #100
Mi81
Вступаю в Клуб
 
Имя: Сергей
Авто: Peugeot 4007 2.4 CVT
Сообщений: 9
По умолчанию Re: Исследование механизма работы ПО MMCS

Ну вообще-то, эксперимент, который я описал выше касался лишь установления факта наличия/присутствия контрольных сумм, потому что на практике не каждый регион пакуется отдельно. На самом деле один блок прошивки может включать неколько регионов. Именно этот случай, видимо, вы имеете с S0002. Т.е. заголовок есть, но он где-то выше. Если знакомы с программированием, то написать утилиту, которая вычислит смещения всех заголовков блоков и принадлежащих им блоков данных дело 15-20 минут. Думаю, справитесь ? Если нет, воспользуетесь готовой - viewbin.exe из комплекта Platform Builder'а. Должны получить это:

список боков

D:\>viewbin -r nk_04.bin
ViewBin... nk_04.bin
Image Start = 0x8DA00000, length = 0x010E9960
Record [ 0] : Start = 0x8DA00000, Length = 0x00000010, Chksum = 0x000002E1
Record [ 1] : Start = 0x8DA00040, Length = 0x00000008, Chksum = 0x0000035B
Record [ 2] : Start = 0x8DA01000, Length = 0x00033F8C, Chksum = 0x011956E8
Record [ 3] : Start = 0x8DA35000, Length = 0x00001FFC, Chksum = 0x000AA7BA
Record [ 4] : Start = 0x8DA37000, Length = 0x000496D8, Chksum = 0x01A41F8F
Record [ 5] : Start = 0x8DA806D8, Length = 0x00001910, Chksum = 0x0006B023
Record [ 6] : Start = 0x8DA82000, Length = 0x00018FA8, Chksum = 0x00885154
Record [ 7] : Start = 0x8DA9B000, Length = 0x00013F40, Chksum = 0x006707E5
Record [ 8] : Start = 0x8DAAF000, Length = 0x00013E98, Chksum = 0x00728952
Record [ 9] : Start = 0x8DAC3000, Length = 0x00016FE8, Chksum = 0x006BAF3E
Record [ 10] : Start = 0x8DADA000, Length = 0x0001AF9C, Chksum = 0x00960AEA
Record [ 11] : Start = 0x8DAF5000, Length = 0x0001BFBC, Chksum = 0x009477BB
Record [ 12] : Start = 0x8DB11000, Length = 0x00014FF0, Chksum = 0x0079D043
Record [ 13] : Start = 0x8DB26000, Length = 0x00002D6C, Chksum = 0x0010060B
Record [ 14] : Start = 0x8DB29000, Length = 0x00009E58, Chksum = 0x00376A3D
Record [ 15] : Start = 0x8DB33000, Length = 0x0003F000, Chksum = 0x01627928
Record [ 16] : Start = 0x8DB72000, Length = 0x0003DE2C, Chksum = 0x016580B6
Record [ 17] : Start = 0x8DBB0000, Length = 0x0000C994, Chksum = 0x0048D131
Record [ 18] : Start = 0x8DBBD000, Length = 0x00000994, Chksum = 0x00047B78
Record [ 19] : Start = 0x8DBBE000, Length = 0x0002DFF0, Chksum = 0x010CD2FB
Record [ 20] : Start = 0x8DBEC000, Length = 0x00001CE0, Chksum = 0x000850F4
Record [ 21] : Start = 0x8DBEE000, Length = 0x0000FB3C, Chksum = 0x0043FDD6
Record [ 22] : Start = 0x8DBFE000, Length = 0x0002DD78, Chksum = 0x00FEE97B
Record [ 23] : Start = 0x8DC2C000, Length = 0x00028FFC, Chksum = 0x00E467D0
Record [ 24] : Start = 0x8DC55000, Length = 0x00025FF8, Chksum = 0x00DF4E45
Record [ 25] : Start = 0x8DC7B000, Length = 0x00028D80, Chksum = 0x00D234AC
Record [ 26] : Start = 0x8DCA4000, Length = 0x00057548, Chksum = 0x01FA43C1
Record [ 27] : Start = 0x8DCFB548, Length = 0x00019A9C, Chksum = 0x007AEC34
Record [ 28] : Start = 0x8DD15000, Length = 0x00043104, Chksum = 0x017B0913
Record [ 29] : Start = 0x8DD58104, Length = 0x00000898, Chksum = 0x0003E4F9
Record [ 30] : Start = 0x8DD59000, Length = 0x0003AF0C, Chksum = 0x013650EA
Record [ 31] : Start = 0x8DD94000, Length = 0x00025F88, Chksum = 0x00CD0208
Record [ 32] : Start = 0x8DDBA000, Length = 0x00004FEC, Chksum = 0x001AC818
Record [ 33] : Start = 0x8DDBF000, Length = 0x00023A0C, Chksum = 0x00C40481
Record [ 34] : Start = 0x8DDE3000, Length = 0x00004F5C, Chksum = 0x001A685C
Record [ 35] : Start = 0x8DDE8000, Length = 0x0001BD4C, Chksum = 0x00A6F0E9
Record [ 36] : Start = 0x8DE04000, Length = 0x00030D80, Chksum = 0x0105BDF1
Record [ 37] : Start = 0x8DE35000, Length = 0x00000FFC, Chksum = 0x0006CB20
Record [ 38] : Start = 0x8DE36000, Length = 0x0005BF44, Chksum = 0x0200A4EB
Record [ 39] : Start = 0x8DE91F44, Length = 0x0001A0BC, Chksum = 0x00755EDA
Record [ 40] : Start = 0x8DEAC000, Length = 0x00037FC8, Chksum = 0x012DBBAA
Record [ 41] : Start = 0x8DEE4000, Length = 0x00018FFC, Chksum = 0x0072FE38
Record [ 42] : Start = 0x8DEFD000, Length = 0x0016D518, Chksum = 0x07C1A4B3
Record [ 43] : Start = 0x8E06A518, Length = 0x00000AE8, Chksum = 0x000489F4
Record [ 44] : Start = 0x8E06B000, Length = 0x0005599C, Chksum = 0x018A87FE
Record [ 45] : Start = 0x8E0C099C, Length = 0x0003D660, Chksum = 0x014059EC
Record [ 46] : Start = 0x8E0FE000, Length = 0x00047C10, Chksum = 0x017FB32D
Record [ 47] : Start = 0x8E145C10, Length = 0x000323C8, Chksum = 0x00FD1265
Record [ 48] : Start = 0x8E178000, Length = 0x0053B81C, Chksum = 0x1D5A00E5
Record [ 49] : Start = 0x8E6B381C, Length = 0x000007E4, Chksum = 0x0003B4AA
Record [ 50] : Start = 0x8E6B4000, Length = 0x00101B94, Chksum = 0x039BDBA5
Record [ 51] : Start = 0x8E7B5B94, Length = 0x0001544C, Chksum = 0x00679C03
Record [ 52] : Start = 0x8E7CB000, Length = 0x00032000, Chksum = 0x00EC9E33
Record [ 53] : Start = 0x8E7FD000, Length = 0x00018E34, Chksum = 0x00798556
Record [ 54] : Start = 0x8E816000, Length = 0x00009FD4, Chksum = 0x0032ECD3
Record [ 55] : Start = 0x8E820000, Length = 0x00000EF4, Chksum = 0x0007237D
Record [ 56] : Start = 0x8E821000, Length = 0x00005F54, Chksum = 0x001D7BB7
Record [ 57] : Start = 0x8E827000, Length = 0x00004EF0, Chksum = 0x00170D1C
Record [ 58] : Start = 0x8E82C000, Length = 0x0003EFFC, Chksum = 0x0188EB68
Record [ 59] : Start = 0x8E86B000, Length = 0x00027114, Chksum = 0x0125236A
Record [ 60] : Start = 0x8E892114, Length = 0x00019C64, Chksum = 0x00C5AF2F
Record [ 61] : Start = 0x8E8ABD78, Length = 0x0003F9C4, Chksum = 0x016B97F0
Record [ 62] : Start = 0x8E8EB73C, Length = 0x0003E6D8, Chksum = 0x01E9F0BE
Record [ 63] : Start = 0x8E929E14, Length = 0x00031BAC, Chksum = 0x01895AAB
Record [ 64] : Start = 0x8E95B9C0, Length = 0x000708D4, Chksum = 0x037310AA
Record [ 65] : Start = 0x8E9CC294, Length = 0x0003DFBC, Chksum = 0x01EA0548
Record [ 66] : Start = 0x8EA0A250, Length = 0x0003D258, Chksum = 0x01E37A36
Record [ 67] : Start = 0x8EA474A8, Length = 0x000391E0, Chksum = 0x017FEEB2
Record [ 68] : Start = 0x8EA80688, Length = 0x0006750C, Chksum = 0x031B1242
Record [ 69] : Start = 0x8EAE7B94, Length = 0x00000054, Chksum = 0x00000D9C
Record [ 70] : Start = 0x8EAE7BE8, Length = 0x00001D78, Chksum = 0x000A8F82
Record [ 71] : Start = 0x00000000, Length = 0x8DA00004, Chksum = 0x00000000
Start address = 0x8DA00004
Checking record #69 for potential TOC (ROMOFFSET = 0x00000000)
Found pTOC = 0x8eae7b94
ROMOFFSET = 0x00000000
Done.
[свернуть]
толлько учтите, что это физические адреса самой прошивки, следовательно 0x8DA00000 это 0x00000000 в самой прошивке.

Относительно S0003. То ли в WinCE 4.2, но скорее всего - в прошиках SH4 наблюдается некоторое перекрытие модулей (до 4-х байт), возможно дело в этом. Сегодня от нечего делать поставил Platform Builder 4.2 и попробовал сгенерить несколько прошивок под SH4, во всех наблюдал такие перекрытия. Вохможно это просто связано с округлением до разрядности процессора, т.е. до 4-х байт. Полагаю, это ни на что не влияет.
И еще вам нужно разобраться со структурами e32 и о32, которые тоже нужно будет маленько поправить после того, как регионы станут на свои места. Ничего сложного там нет, визуально их можно увидеть в imageinfo.txt для каждого модуля, там же где лежат его S000x. Найти эти структуры в прошивке поможет ее карта, которую так же выдает Remaker.

---------- Добавлено в 22:54 ---------- Предыдущее сообщение было написано в 22:17 ----------

Что касается S002, то он лежит в 59-м блоке на самом его дне.

---------- Добавлено в 23:07 ---------- Предыдущее сообщение было написано в 22:17 ----------

Что бы найти начало 59-го блока в файле формата bin можно воспользоваться информацией о ней, полученной от viewbin. Для этого достаточно найти сам заголовок блока, только, учитывая то, что байты в DWORD читаются ноборот, искать нужно последовательность 00B0868E147102006A232501

---------- Добавлено в 23:10 ---------- Предыдущее сообщение было написано в 22:17 ----------

где 00B0868E - первернутый адрес загрузки;
14710200 - длина;
6A232501 - чексумма.
В вашем bin этот заголовок находится по смещению 0x00E665FF

---------- Добавлено в 23:25 ---------- Предыдущее сообщение было написано в 22:17 ----------

Цитата:
Сообщение от Ёжик Пых Посмотреть сообщение
смещения даю от полного LOADING.KWI не разделенного на части
Вообще, удобнее работать с вырезанной прошивкой.
Чтобы быстро ее вырезать, воспользуйтесь следующим приемом:
1. Откройте KWI в LoadingView и перейдите на часть, соотвествующую образу OS. В вашем случае часть 00000111 это загрузчик, за ней следует OS, далее - образ нандфлеш. Если вы не умеете находить начало прошивки, то вы можете увидеть его дамп в провой панели. Перепишите первые 16 байт.
2. Перейдите на часть следующую за образом OS (в данном случае - образ флеши. Перепишите бйты.
3. Откройте KWI в WinHex'е. Найдите (Search -> Find Hex Values...) начало прошивки (B000FF...) и начало следующей части, выделите блок между ними и сохраните в отдельный файл. Это и есть ваш nk.bin.
Mi81 вне форума   Вверх Ответить с цитированием
Пользователь сказал cпасибо: