Перейти к содержанию
Old Phone Forum
  • Вход

    Вы сейчас не залогинены на форуме.

    Для возможности комментариев, загрузки файлов, подписок на ответы - вам надо войти.

Портирование патчей на Agere-модели


Рекомендуемые сообщения

Здрасте. Пытаюсь открыть BinEdit-ом прошивку E840XEHB1, на полпути программа выдает сообщение такого рода - "Не удалось определить тип прошивки". В чем проблема?

 

Все получилось при второй попытке. А есть SYM-файл для E840XEHB1 и для D830XEGA1?

увы нету... пользуйся калбеком

----------------------------------------------------------------------------------------------------------------------------------

[Патчи на Agere (ГУМИ) телефоны] [Все патчи для SGH-E210]

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 71
  • Создана
  • Последний ответ

Топ авторов темы

Уж извините за такой вопрос. Что значит калбек?

 

По HEX коду в разных прошивках обычно совпадают только те команды, которые не содержат в себе адреса или смещения. Команды, которые в операндах содержат адрес (переходы, вызовы функций BL и др.) или смещение (например, LDR R0,[R1,смещение]) имеют различный HEX код. Дальше мы это учтём, а сейчас нам нужно скопировать HEX-код начала нашей функции до команды BL. Почему до команды BL? ну просто это оптимальный вариант, и такой последовательности байт хватит, чтобы найти функцию в U300. Чтобы выделить, запоминаем HEX-код той команды, до которой нам нужно выделить. В нашем случае это команда BL UHVibrator, которая имеет код 52F41CFA. Запомните визуально этот код и перейдите на вкладку Hex. Теперь нам нужно выделить байты до 52F41CFA, т.е. 70B5041C394D07D001202860 (выделяем мышкой). Теперь нажимаем Ctrl + C, чтобы скопировать.

 

Немогу разобраться.

1. Невижу команды BL.

2. Значения у меня совсем другие.

 

Во что у меня получается в BinEdit-е (открыта прошивка U600XEGG2)

 

uhActivateVibrator:

205703EA: 0000 NOP ;Пустая команда. LSL R0,R0,0

205703EC: 5170 STR R0, [R6, R5] ;слово по адресу [R6 + R5] = R0

205703EE: 0030 LSL R0, R6, #0 ;R0 = R6 << 0

205703F0: 12F2 ASR R2, R6, #11 ;R2 = R6 >> 11 ' биты не восстанавливаются

205703F2: 0000 NOP ;Пустая команда. LSL R0,R0,0

205703F4: B800 ADD SP, SP ;SP = SP

205703F6: 0004 LSL R4, R0, #0 ;R4 = R0 << 0

205703F8: A000 ADR R0, =0x205703FC ;R0 = PC + #0 = "ПЕ0"

205703FA: 0004 LSL R4, R0, #0 ;R4 = R0 << 0

205703FC: 18CFC530 DCB ".ПЕ0" ;Данные для команды по адресу 0x205703F8

20570400: 0022 LSL R2, R4, #0 ;R2 = R4 << 0

20570402: 0021 LSL R1, R4, #0 ;R1 = R4 << 0

20570404: 0898 LSR R0, R3, #2 ;R0 = R3 >> 2

20570406: ABF7 ADD R3, SP, #0x3DC ;R3 = SP + #988

20570408: DFFB SWI 251 ;Программное прерывание № 251

2057040A: 05E0 LSL R0, R4, #23 ;R0 = R4 << 23

2057040C: FA48 ;Скорее всего это AMR режим процессора или данные

2057040E: 0278 LSL R0, R7, #9 ;R0 = R7 << 9

loc_20570410: ; Переход с адреса 0x20570416

20570410: 0021 LSL R1, R4, #0 ;R1 = R4 << 0

20570412: 0898 LSR R0, R3, #2 ;R0 = R3 >> 2

20570414: ABF7 ADD R3, SP, #0x3DC ;R3 = SP + #988

20570416: D8FB BHI loc_20570410 ;если больше (С и not Z) то переход на адрес 0x20570410

 

 

ker_GetFlipState: как я понимаю это уже другая функция и дальше смотреть нету смысла.

Изменено пользователем zexter
Ссылка на комментарий
Поделиться на другие сайты

zexter,

колбеки - это специальные функции, которые обрабатывают различные события. Если бинедит находит их, их список можно увидеть на вкладке Callback справа.

Ссылка на комментарий
Поделиться на другие сайты

Мммм... Можна уточнить, то ли я нашел? Или это можно определить тока во время тестирования?

 

Вот команды в прошивке E840XEHB1 начиная с кода 204FDE9E (функция uhActivateVibrator

) до комманды BL (код взят из патча MainMenuVib для Е840)

 

204FDE9E:	70B5	PUSH	{R4-R6,LR}	;Сохранить регистры R4-R6,LR
204FDEA0:	041C	MOV	R4, R0	;R4 = R0
204FDEA2:	394D	LDR	R5, =0x300080F0	;R5 = значение по адресу (PC + 228)=[0x204FDF88]= 0x300080F0
204FDEA4:	07D0	BEQ	loc_204FDEB6	;если равно (Z) то переход на адрес 0x204FDEB6
204FDEA6:	0120	MOV	R0, #0x1	;R0 = 1
204FDEA8:	2860	STR 	R0, [R5]	;слово по адресу [R5] = R0
204FDEAA:	CAF4E7F8	BL	off_201C807C	;Переход по адресу 0x201C807C с сохранением адреса возврата

 

А вот что удалось найти в прошивке D830XEGA1

 

Дело в том что вовремя поиска у меня получилось 2 значения первое 20794CD2 а второе 2196CD64

 

1.

20794CD2:	70B5	PUSH	{R4-R6,LR}	;Сохранить регистры R4-R6,LR
20794CD4:	041C	MOV	R4, R0	;R4 = R0 = 0x0 (0)
20794CD6:	0D1C	MOV	R5, R1	;R5 = R1 = 0x1 (1)
20794CD8:	0028	CMP	R0, #0x0	;Сравнить R0 и 0
20794CDA:	01D1	BNE	loc_20794CE0	;если не равно (not Z) то переход на адрес 0x20794CE0
20794CDC:	2860	STR 	R0, [R5]	;слово по адресу [R5] = R0
20794CDE:	07E0	B	loc_20794CF0	;Переход по адресу 0x20794CF0
	loc_20794CE0:	; Переход с адреса 0x20794CDA
20794CE0:	201C	MOV	R0, R4	;R0 = R4 = 0x0 (0)
20794CE2:	26F7C8FC	BL	off_206BB676	;Переход по адресу 0x206BB676 с сохранением адреса возврата

 

2.

2196CD64:	70B5	PUSH	{R4-R6,LR}	;Сохранить регистры R4-R6,LR
2196CD66:	041C	MOV	R4, R0	;R4 = R0 = 0x0 (0)
2196CD68:	0D1C	MOV	R5, R1	;R5 = R1
2196CD6A:	0020	MOV	R0, #0x0	;R0 = 0
2196CD6C:	C043	MVN	R0, R0	;R0 = R0 NOT R0
2196CD6E:	2860	STR 	R0, [R5]	;слово по адресу [R5] = R0
2196CD70:	0223	MOV	R3, #0x2	;R3 = 2
2196CD72:	E05E	LDSH	R0, [R4, R3]	;R0 = 16 по адресу [R4 + R3] ' биты 16-31 устанавливаются как 15 бит
2196CD74:	0028	CMP	R0, #0x0	;Сравнить R0 и 0
2196CD76:	02DB	BLT	loc_2196CD7E	;если меньше чем (N и not V или not N и V) то переход на адрес 0x2196CD7E
2196CD78:	E05E	LDSH	R0, [R4, R3]	;R0 = 16 по адресу [R4 + R3] ' биты 16-31 устанавливаются как 15 бит
2196CD7A:	0228	CMP	R0, #0x2	;Сравнить R0 и 2
2196CD7C:	04DD	BLE	loc_2196CD88	;если меньше чем или равно (Z и (N и not V или not N и V)) то переход на адрес 0x2196CD88
	loc_2196CD7E:	; Переход с адреса 0x2196CD76
2196CD7E:	0020	MOV	R0, #0x0	;R0 = 0
2196CD80:	C043	MVN	R0, R0	;R0 = R0 NOT R0
	loc_2196CD82:	; Переход с адреса 0x2196CDA6
2196CD82:	70BC	POP	{R4-R6}	;Загрузить регистры R4-R6
2196CD84:	08BC	POP	{R3}	;Загрузить регистры R3
2196CD86:	1847	BX	R3	;переход по адресу в R3
	loc_2196CD88:	; Переход с адреса 0x2196CD7C
2196CD88:	0223	MOV	R3, #0x2	;R3 = 2
2196CD8A:	E05E	LDSH	R0, [R4, R3]	;R0 = 16 по адресу [R4 + R3] ' биты 16-31 устанавливаются как 15 бит
2196CD8C:	2860	STR 	R0, [R5]	;слово по адресу [R5] = R0
2196CD8E:	2088	LDRH	R0, [R4, #0]	;R0 = слово по адресу [R4 + 0] ' биты 16-31 приравниваются 0
2196CD90:	0028	CMP	R0, #0x0	;Сравнить R0 и 0
2196CD92:	01D0	BEQ	loc_2196CD98	;если равно (Z) то переход на адрес 0x2196CD98
2196CD94:	A068	LDR 	R0, [R4, #0x8]	;R0 = слово по адресу [R4 + 8 байт]
2196CD96:	01E0	B	loc_2196CD9C	;Переход по адресу 0x2196CD9C
	loc_2196CD98:	; Переход с адреса 0x2196CD92
2196CD98:	E7F7C7FB	BL	off_2195452A	;Переход по адресу 0x2195452A с сохранением адреса возврата

Изменено пользователем zexter
Ссылка на комментарий
Поделиться на другие сайты

Аналогично найдём адрес функции GSMStartTimer, перейдём по её адресу: 0x2062F40C в U600 и видим, что у нас есть достаточно большой кусок без адресов и констант до команды BL. Смотрим на код команды BL (FFF766FF), запоминаем его, открываем вкладку Hex, выделяем и копируем в буфер код до FFF766FF, т.е. 10B582B0141C00220092221C. Ищем такой код в прошивке U300 и находим единственный вариант - 0x2057D54C, это и есть адрес функции GSMStartTimer в U300. Это тот самый лёгкий вариант поиска, о котором я говорил, т.е. когда мы имеем большой кусок в начале функции без адресов, BL, констант и др.

 

В прошивке Е840XEHB1 нашелся код значения практически такие же, но при попытке найти что то похожее в прошивке D830XEGA1 ничего. Только при таком зачении 10B5????????????0092221C получаю результат, но до 15 значений.

 

Вот более менее похожиq результат:

1. E840

205714D8:	10B5	PUSH	{R4,LR}	;Сохранить регистры R4,LR
205714DA:	82B0	SUB	SP, SP, #0x8	;SP = SP - 8
205714DC:	141C	MOV	R4, R2	;R4 = R2
205714DE:	0022	MOV	R2, #0x0	;R2 = 0
205714E0:	0092	STR	R2, [sP]	;слово по адресу [sP] = R2
205714E2:	221C	MOV	R2, R4	;R2 = R4
205714E4:	FFF766FF	BL	off_205713B4	;Переход по адресу 0x205713B4 с сохранением адреса возврата

 

2. D830

20689FD4:	10B5	PUSH	{R4,LR}	;Сохранить регистры R4,LR
20689FD6:	141C	MOV	R4, R2	;R4 = R2 = 0xFFFFFFFF (-1)
20689FD8:	0022	MOV	R2, #0x0	;R2 = 0
20689FDA:	82B0	SUB	SP, SP, #0x8	;SP = SP - 8
20689FDC:	0092	STR	R2, [sP]	;слово по адресу [sP] = R2
20689FDE:	221C	MOV	R2, R4	;R2 = R4 = 0xFFFFFFFF (-1)
20689FE0:	FFF775FF	BL	off_20689ECE	;Переход по адресу 0x20689ECE с сохранением адреса возврата

 

Но уверености нету. Есть ли другой вариант поиска?

 

 

 

При поиске эквивалента адреса врезки в прошивке D830, мне ничего найти не удается.

Изменено пользователем zexter
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Подскажите как быть есле в патче hex данные:

0x20F808C0:

.hex 00F0020000000BF018000100000005F000000300D40B01C000000A0108F0270014C028CB08F0260014C028CB08F0630414C028CB08F0E50110C028CB08F06C0414C028CB08F0510414C028CB0CF0840126F0

как это портировать? :)

Ссылка на комментарий
Поделиться на другие сайты

ВалерBR,

читай тему сначала, это сценарий.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Приобрел я тут недавно е900,и сразу вопросы об портинге возникли.Как узнать идентификатор строки из ленгпака?.Он ведь 16-ти ричный?И как функции в прошивке исп. эти идентификаторы,те как искать их использование? Тотже самый у меня вопрос по поводу графики.Допустим в проге(Read_Pict_e900) показывается их hex значение.Теперь чтоб найти где они исп,надо это значение перевернуть и добавить 0000 ? Заранее спасибо.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

А где тут языковые ресурсы вообще в принципе ?

 

Смотрю в нескольких прошивках (s3) - например слово «Контакты» - текстовый поиск в BinEdit его не находит (ANSI, UTF8, Unicode, Unicode Left).

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

А где тут языковые ресурсы вообще в принципе ?

 

Смотрю в нескольких прошивках (s3) - например слово «Контакты» - текстовый поиск в BinEdit его не находит (ANSI, UTF8, Unicode, Unicode Left).

тут очень интересный способ упаковки UTF8 :( буквы кирилицы заменены похожими буквами латиницы.

 

Попробуй поискать Koнтakты или Koнтaкты

  • Like 3

Одна из последних версий binedit здесь.

AlexeyK.gif

Ссылка на комментарий
Поделиться на другие сайты

А далее какой принцип хранения ресурсов ?

Вот для простоты смотрю на английские ресурсы C3110PDIC2. Строки вижу, к примеру «Earphone not connected» в 20E6DA54. Однако ни одного места использования этого адреса - не находится. Да и любые другие строки - тоже, строки вижу, но ссылок на них нету.

 

Вобщем что-то тут отличается от Swift… В swift есть таблицы адресов строк, а тут я их не нахожу. Или тут они как-то динамически вычисляются ?

Вообще в BinEdit можно приделать показ ресурсов Agere ?

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

f2065,

тут дело обстоит так:

Есть 3 главные таблицы:

1. Таблица строк меню

2. Таблица строк сообщений

3. Таблица строк подписей к софт-клавишам

 

1 и 2 представляют собой такой формат: 4 байта - адрес таблицы конкретного языка, 4 байта - кол-во элементов в ней. Потом могут быть нули или ещё что-нибудь, и т.д.

Адреса таблиц идут в том порядке, в каком языки перечислены в меню телефона.

 

Таблица конкретного языка - перечисление подряд указателей на строки.

 

3 таблица представляет собой просто перечисление адресов таблиц для конкретного языка, найти не так просто, как остальные.

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

dаs,

А адреса в таблицах тут какие-то относительные ?

Или почему я не могу в BinEdit найти использование адреса ни одной строки ?

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

А как скомпилировать патч для Agere в SMP ?

 

К примеру вот:

.little

.thumb

.binid C3110PDIC2

.start 0x216017DC

B 0x216017EA

 

Получается:

 

и ресман его не применяет т.к. не совпадают данные (потому что адрес какой-то неправильный).

руками редактирую:

 

теперь ресман вообще пишет что патч уже установлен!!!

хотя это не так, я внимательно проверил - в s3-файле по 0x216017DC лежит 05D0

вообще пишу - всё равно ресман пишет что он установлен.

похоже у ресмана тоже глюки с поддержкой s3-прошивок

 

 

а S3-патчи BinEdit делать отказывается.

Пишет что Файл Cancel_H:\samsung\p\1.s3 уже существует

и в любом случае файл отмены не создаёт

 

и в чём разница между s3 и sre ?

в патчах s3 адреса с нуля, а в sre - с 0x20000000

однако в s3-прошивках адреса с 0x20000000

вобщем не понятно, что делать в патчах

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

f2065,

адреса, как водится в Agere, в Little Endian - т.е. перевёрнутые побайтно. Может ты загрузил прошивку неправильно? т.е. так, что адресация у тебя неверная вообще, и поэтому ты не можешь найти использование ни одного адреса.

 

Компиляция в S3 у меня не работает, я компилирую в sre и руками изменяю расширение. Отмены не создаётся, её делаю тоже руками. Разница между s3 и sre только в расширении - формат один и тот же.

Ссылка на комментарий
Поделиться на другие сайты

AlexeyK,

Неа, это подозреваю баг BinEdit - он не умеет вообще почти ничего находить в S3-прошивках :idea:

К примеру - «Наушники» - это hex D09DD0B0D183D188D0BDD0B8D0BAD0B8 - никакой упаковки нету, этот hex находится. А вот слово «Наушники» - не находится никак.

 

С поиском адресов - тоже поиск работает неадекватно, «поиск всех возможных адресов использования функции или адреса» не находит явного указания в коде адреса. Причём не всегда! А ручной поиск по перевёрнутому hex - находит… Может у BinEdit проблема с разделением прошивки на регионы…

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

AlexeyK,

Неа, это подозреваю баг BinEdit - он не умеет вообще почти ничего находить в S3-прошивках :59:

К примеру - «Наушники» - это hex D09DD0B0D183D188D0BDD0B8D0BAD0B8 - никакой упаковки нету, этот hex находится. А вот слово «Наушники» - не находится никак.

попробуй поискать в версии, в которой для преобразования UTF8-ANSII не использовалось API, похоже в конце строки сейчас добавляется куча нулей. по этому и не ищет. Поправлю в выходные.

За одно и сохранение Cancel_ поправлю

С поиском адресов - тоже поиск работает неадекватно, «поиск всех возможных адресов использования функции или адреса» не находит явного указания в коде адреса. Причём не всегда! А ручной поиск по перевёрнутому hex - находит… Может у BinEdit проблема с разделением прошивки на регионы…

Может тип прошивки не правильно определился? вместо little endian как big

  • Like 3

Одна из последних версий binedit здесь.

AlexeyK.gif

Ссылка на комментарий
Поделиться на другие сайты

А как скомпилировать патч для Agere в SMP ?

 

К примеру вот:

.little

.thumb

.binid C3110PDIC2

.start 0x216017DC

B 0x216017EA

 

Получается:

<nord offset="0x1425974" from="05D0" to="05E0" />

 

и ресман его не применяет т.к. не совпадают данные (потому что адрес какой-то неправильный).

руками редактирую:

<nord offset="0x216017DC" from="05D0" to="05E0" />

 

В настройках компилятора, специально для компиляции патчей S3 есть настройка - "При компиляции S3 не подменять реальные адреса". Если выбрать этот пункт, то в S3 патчах будут сохраняться реальные адреса, а не смещение от начала прошивки как в патчах smp и других. Для smp такой настройки нет, но если надо можно добавить.

  • Like 1

Одна из последних версий binedit здесь.

AlexeyK.gif

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Имеются ELF и SYM файлы на C3110 и прочие Agere…

Или уже никто Agere не патчит ?

http://OldPh.one/ipb.html?s=&showto...st&p=459829

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Имеются ELF и SYM файлы на C3110 и прочие Agere…

Или уже никто Agere не патчит ?

http://OldPh.one/ipb.html?s=&showto...st&p=459829

по данному адресу ничего нет

titmih

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти



×
×
  • Создать...