Jump to content
Old Phone Forum
  • Login

    You are currently not logged in to the forum.

    To comment, upload files, subscribe to answers - you need to login.

EvgeniyZ

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

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites

проще никак не сделаешь. только так, как я описал :)

  • Like 1

Share this post


Link to post
Share on other sites

Дизассемблировал патч "Настройка времени информационных окон" для 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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Edited by sashaqwe

Share this post


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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

  • Like 1

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

Share this post


Link to post
Share on other sites

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

DCD 0x30016D90

DCD 0x30469738

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

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

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

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

Share this post


Link to post
Share on other sites
Дизкомпилировал патч "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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

 

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

 

 

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

 

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

Share this post


Link to post
Share on other sites

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

 


.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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

sashaqwe

1.

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

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

 

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

Share this post


Link to post
Share on other sites
Для чего через Мастер патч вызывать MP3_ON_FLASH_TASK?
для формирования плейлиста для плеера.

 

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

 

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

  • Like 1

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

  • Like 1

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

Share this post


Link to post
Share on other sites

Я не мог найти смещение

0x90A5F6 и 0x94FDCC (C3322XXNA1) C3322XWLG1 прошивки портирована theme_Name_Fix_v22

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

SantaX спасибо теперь я немного понимаю.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...