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

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

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

Задаем вопросы по теме "Портирование патчей, для начинающих"


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

Можно было просто попросить исходник, а по нему уже разбираться. Если, конечно, ты не решил научиться портировать патчи без исходника... :)

Конечно, там же еще несколько функций внутри вызывается и оперативка читается. Адреса все другие будут.

Спасибо. Так все таки как дизассемблировать патч - применить к прошивке потом посмотреть в БинЭдите? результат смотреть на вкладке "код" или "МСС"? или можна както попроще типа того как компилируется патч из исходника?

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

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

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

Дизассемблировал патч "Настройка времени информационных окон" для C5212iXEJH3, вроде разобрался только непонятно

1)для чего в патче данный код

.start 0x207DA0D8

PUSH {R0,R1}

LDR R0, =0x20F74135

STR R0, [sP, #0x4]

POP {R0,PC}

DCD 0x20F74135

в исходнике перехода на данный адрес нигде нет, то есть он не используется?

 

2)Также попробовал с исходника скомпилировать патч и в данном коде получился такой результат:

03B40148019001BD3541F72003B40148019001BD15000000

в два раза длинее чем в первоначальном патче:

03B40148019001BD3541F720

почему так произходит я ж с Бинэдита в точности перенес команды, не больше.?

Самое главное если одельно только данный код компилирую то все нормально не больше.

 

3)Также при компиляции кода

BL 20F74134

в патче один разряд(байт) отличается, почему? может я что то не так делаю?

 

дизасемблированый мною исходник прилагаю

_____________________________________.rar

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

1.

См. инструкцию по BinEdit. BL-переход сделать на большое расстояние нельзя, но если сделать надо - то BinEdit автоматом делает такую штуку для дальнего перехода.

Иначе ты сам должен что-то такое делать вручную (на самом деле BinEdit делает функцию универсально и громоздко - самому можно просто LDR и BX)

А в дизассемблере ты можешь не видеть этого перехода кстати - он может автоподменять дальние переходы через BLX, см настройки

 

3.

Это нормально. Устанавливается младший бит - признак перехода в режиме Thumb. См. документации по ARM процессорам и Thumb-режим.

Кстати в прошивке есть и функции где нужен ARM-режим - на них делается переход по BLX и там адрес будет неизменным.

  • Like 1

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

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

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

Пробую портировать патч "MP3 Player на карте памяти" на C5212iXEKD1, взял исходник у VVYura для C5212XEIB5, поменял адреса переходов, оперативки, скомпелировал патч, - результат - при запуске с карты памяти МП3 телефон тухнет и ни на что не реагирует. Адреса перепроверил три раза, вроде все нормально, может в чем то другом? по идее должно работать.

мой исходник MP3PlayerOnFlash.rar

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

Адреса перепроверил три раза, вроде все нормально, может в чем то другом?
Мне интересно как ты проверял например __my0_5task_Table…

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

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

Мне интересно как ты проверял например __my0_5task_Table…

Я подумал что так как стоит на пустом месте то можно и поставить в любое пустое место, хотя заметил что в исходнике нигде данный адрес не используется, подумал что я что то недопонимаю. Тогда если можно объясните где используется данный адрес или как? возможно тогда смогу поставить необходимый адрес для своей прошивки.

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

Это адрес TASK-таблицы мастерпатча. Необходимо сначала портировать мастерпатч.

 

Ксктати команда MCC_TASK 0x18 вызывает функцию через эту таблицу, и на разных прошивках цифры в MCC_TASK будут разные (но у C5212 и C5212i вроде одинаково).

  • Like 1

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

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

Дизкомпилировал патч "CKeyRevival" прошивки C5212iXEJH3, далее решил проверить на правильность созданного исходника, скомпилировал с него патч; в моем патче в отличие от оригинала добавилось

DCD 0x30016D90

DCD 0x30469738

я так понимаю DCD это типа как в обычном языке программирования объявление константы то есть ячейки памяти оперативки, но почему в первоначальном патче этого нет? наверное я должен знать символьное название этой ячейки и объявить через ".equ", если так то как я смогу узнать эти названия, функций, ..и т.д....

Причем в прошивке объявление этих адресов уже есть, почему компилятор не понимает этого?

Для данного патча это важно, потому что в двух местах заменяемый код увеличивается на 4 байта и затрагивает в прошивке 2 байта которые нужны.

И дайте ссылку на простое описание команд ассемблера, а то в инете нахожу какое то сложное описание

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

Дизкомпилировал патч "CKeyRevival" прошивки C5212iXEJH3, далее решил проверить на правильность созданного исходника, скомпилировал с него патч; в моем патче в отличие от оригинала добавилось
Показывай чего получилось…

 

наверное я должен знать символьное название этой ячейки и объявить через ".equ", если так то как я смогу узнать эти названия, функций, ..и т.д....
Смотреть в файлах elf/sym… только для наших прошивок их не добыли. Есть только для прошивки C5212DDIB4, там искать аналогичные функции/места, и смотреть что как называеться…

 

Для данного патча это важно, потому что в двух местах заменяемый код увеличивается на 4 байта и затрагивает в прошивке 2 байта которые нужны.
Для некоторых команд (LDR, ADR) критичен align по 4. В зависимости от этого команда может занимать на 2 байта больше… Если это недопустимо - то надо думать над способами оптимизации этого. Может там B-переход поставить например…

 

И дайте ссылку на простое описание команд ассемблера, а то в инете нахожу какое то сложное описание
Например вот - патчи в основном пишутся под ARM7TDMI в режиме THUMB. Впрочем знать режим ARM тоже надо.
  • Like 1

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

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

В прошивке объявление этих адресов ведь уже есть, можна в ручную из патча поудалять их? тем самым уменьшить код.

 

Дизкомпелированный исходник и созданный из него патчCKeyRevival.rar

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

 

Если это недопустимо - то надо думать над способами оптимизации этого. Может там B-переход поставить например…

 

 

В моем случае не получается заменить на В, так как я не досмотрел в исходнике еще один адрес через BX, а он оказался дальний и в патч еще добавило две команды для перехода, то есть еще 4 байта, как голову не ламал ни чего не придумал.

 

CKeyRevival.rarисходник для C5212iXEKD1

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

Ну как-то так получается:

 


.patchname "CKeyRevival"
.group "Интерфейс"
.ver 1

; ©
;  <author nickname="VVYura" fullname="Юра Гаев" status="Автор" email="vvyura@tut.by" www="WMZ - Z239397930516; WMR - R105904671876" icq="" donate="" />
;  <author nickname="f2065" fullname="Евгений" status="Портировал на C5212iXEKD1" email="f2065@hotbox.ru" www="http://2065.nm.ru" icq="35078112" donate="WMR423659161693 WMZ353562470676 WMB345287516040 WME196738023957 WMU418816711242 Yandex-41001369386504" />

.patchinfo "Патч эмулирует отсутствующую клавишу 'С'.
.patchinfo "Теперь можно быстро удалять файлы и СМС-сообщения удержанием цифры 0.

.little
.thumb
.binid C5212iXEKD1

;----------------------------------

; C5212iXEKD1
.equ mcc_sms_case_in_back 0x207E547C
.equ p_mes 0x30016D90
.equ APPI_EDP_KEY_INFO_IND 0x3a53
.equ gv_DigitValue 0x3041D229
.equ gs_look 0x30469738

;----------------------------------

; подмена перехода в конце mcc_sms_delete_sure_return_menu
.start 0x2164C190+8
.word mcc_sms_case_in_back

;-------------

; врезка в lk1_0dispatch
.start 0x20B06982
BL fn_CKeyRevival_check ; тут был вызов lk1_2menu_edit_fsm, потом он в патче будет компенсирован

;-------------
; далеко переход сделать нельзя (места не хватит), поэтому находим рядом ненужную трассировку.
; это условно пустое место...

.start 0x20B069F4
B 0x20B06A26 ; удаляем трассировку

fn_CKeyRevival_check:
PUSH	{LR}
;LDR	R0, =p_mes
LDR	R0, 0x20B06C4C ; для экономии места используем имеющейся адрес где лежит p_mes
LDR 	R0, [R0]
LDRH	R2, [R0, #4]

LDR	R1, =APPI_EDP_KEY_INFO_IND ; проверка что это сообщение от клавы
CMP	R2, R1
BNE	_skip1

LDRB	R1, [R0, #0xA] ; сканкоды группы
CMP	R1, 3 ; 3 = цифровые кнопки
BNE	_skip1
LDRB	R1, [R0, #0xB] ; сканкоды цифры
CMP	R1, 10 ; 10 = "0"
BNE	_skip1
LDRB	R1, [R0, #0xC] ; флаг долгого нажатия
CMP	R1, 1
BNE	_skip1

BL	fn_CKeyRevival_OK ; тут места уже не хватает, поэтому ещё трассировку выкинем где-то...

_skip1:
BLX	0x209E0D48 ; компенсация врезки - переход на lk1_2menu_edit_fsm
POP	{PC}

.data ; размещение использованных адресов

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

;-------------

.start 0x20B06A30
B 0x20B06A62 ; тоже удаляем трассировку

fn_CKeyRevival_OK:

; этот код неоптимален, потому что [gs_look+0x18] и так уже лежит в R4
;LDR	R2, =gs_look
;LDRB	R2, [R2, #0x18]
;CMP	R2, #0x5A
;BEQ	loc_201BB896
;CMP	R2, #0x60
;BEQ	loc_201BB896
;CMP	R2, #0x69
;BNE	loc_201BB8AC
;loc_201BB896:

; напишем более эффективно:
CMP	R4, #0x5A ; это проверка кодов меню в которых разрешена обработка виртуальной кнопки?
BEQ	_ok1
CMP	R4, #0x60
BEQ	_ok1
CMP	R4, #0x69
BNE	_skip2
_ok1:

LDR	R2, =gv_DigitValue
; в R0 указатель принятого p_mes-сообщения, пропишем сканкоды как будто это была 'C'-кнопка
MOV	R1, 0
STRB	R1, [R0, #0xB] ; сбросим сканкод цифры
STRB	R1, [R0, #0xC] ; сбросим флаг долгого нажатия

STRB	R1, [R2]
STRB	R1, [R2, #0x4]
STRB	R1, [R2, #0x3]

MOV	R1, 2 ; 2 = сканкод 'C'-кнопки
STRB	R1, [R0, #0xA] ; сканкод
STRB	R1, [R2, #0x1]
STRB	R1, [R2, #0x2]

_skip2:
BX	LR
.data ; размещение использованных адресов

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

;----------------------------------

  • Like 1

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

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

Спасибо за помощь и описание исходника. Нужный код после трассировки не затерает. Проверил на телефоне все работает. Можешь выкладывать в соответствующей ветке.

скомпилированный патч CKeyRevival.rar

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

1.Просмотрел еще раз исходник MP3PlayerOnFlash. Непонятно как вызывается MP3_ON_FLASH_TASK, в исходнике перехода на данную подпрограмму(MP3_ON_FLASH_TASK) нет, только в зарезервированной памяти под Мастер патч прописан ее адрес(DCD MP3_ON_FLASH_TASK+1), но ссылки кроме этой на Мастер патч нет. Можете в кратце объяснить взаимодействие MP3PlayerOnFlash с Мастер патчем и как вызывается MP3_ON_FLASH_TASK?

исходник MP3PlayerOnFlash_C5212iXEKD1.rar

2.Взял карту прошивки C5212iXEJH3 по удалял все ресурсы заменил в начале на C5212iXEKD1 и на размер своей прошивки. При открытии ресманом своей прошивки он предлагает чтоб карту прошивки(мною созданную) я выбрал из списка. Что там не так что он ее не определяет автоматом? В принципе работает но хотелось чтоб было так как надо.

карта прошивки C5212iXEKD1.rar

3.Что за память увеличивает патч Java Heap Size? я всегда думал что то типа оперативки(используемую память во время работы), но при портировании его мне показалось что не так, да и игрушка need_for_speed_undercover все равно не запустилась. Мой переводчик говорит что - свалка.

исходник Java_Heap_Size.rar

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

sashaqwe

1.

Функция вызывается через MCC_TASK 0x18 2 0

0x18 вызывает мастерпатч, который делает так:

PUSH {R4-R7,LR}

SUB SP, SP, #0x100

MOV R4, R0 ; указатель на строку MCC

MOV R6, 0 ; это просто для оптимизации патчей, 0 и 1 готовые

MOV R7, 1

LDRH R0, [R4, 2] ; это 2 аргумент в TASK

LDR R1, =__my0_5task_Table

LSL R0, R0, 2

LDR R0, [R0, R1] ; а там адрес твоей функции будет

BX R0

 

2.

должно быть так

генерировать чистую карту не по подобию, и пустую…

 

3.

проверь в MiniCommander - он показывает размер ОЗУ, должно стать 1.9 или 2.0, вместо 1.4

  • Like 1

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

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

sashaqwe

1.

Функция вызывается через MCC_TASK 0x18 2 0

0x18 вызывает мастерпатч...

 

Для чего через Мастер патч вызывать MP3_ON_FLASH_TASK? поставить обычный MCC переход. Или если мы вставили свой адрес(DCD MCC_MP3_ON_FLASH_PLAY) вместо адреса МСС функции которая раньше запускала Мр3 то должна и быть такая же МСС функция? или...?

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

Для чего через Мастер патч вызывать MP3_ON_FLASH_TASK?
для формирования плейлиста для плеера.

 

поставить обычный MCC переход.
так нет в мобиле MCC-функции которая бы строила плейлист по каталогу.

 

см. патч на B5722, там есть немного коментариев в исходнике

  • Like 1

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

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

я имел ввиду поставить обычный MCC переход на адрес MP3_ON_FLASH_TASK которая находится в патче, то есть вызывать ее не через Мастер патч, а на прямую МСС переходом на ее адрес Если я правильно понимаю Мастер патч нужен для того чтоб данную функцию(MP3_ON_FLASH_TASK) или другую какую то потом использовать в других патчах

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

MCC - это скрипты, и напрямую она переходит только на другие такие же скрипты.

Для вызова ассемблерного кода - надо сначала создать соответствующую функцию (это и делается при помощи мастерпатча).

 

вот кстати про них написано - http://OldPh.one/index.php?showtopic=45200

  • Like 1

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

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

  • 2 года спустя...

 road day, а ты переходишь на адрес 0x90A8FDCC или 0x94FDCC? не забывай прибавлять к смещению базовый адрес 0x90140000.

Обожаю свою жену Анюточку! =)

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

  • 5 лет спустя...

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

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

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

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

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

Войти

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

Войти



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