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

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

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

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


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

А как выглядит код асемблера который приводит к данному патчу? и если можно объясните почему такой?
Вообще это патч не ассемблерного кода, а MCC-скриптов. Исходный скритп такой там:

211F02D8: MCC_IF 0x1A 0xA 0x1 0 loc_2080A4D4 ;Если x1=26 x2=10 x3=1 то переход на 0x2080A4D4

 

Там был переход на 2080A4D4, где задаётся вопрос о возврате:

2080A4D4: MCC_INIT_RESTORE

2080A4E4: MCC_TASK 0x1A 0x62

2080A4F4: MCC_SET_CONFIRM 0 0x1 0x302

2080A504: MCC_IF 0x8 0x1 0xE 0 loc_211F0208 ; Условие MCC_IF 0x8 0x1 0xE - это нажатие кнопки L-Soft.

 

Патч меняет адрес перехода к вопросу сразу на адрес ответа "да" того вопроса. Такой вот результат:

211F02D8: MCC_IF 0x1A 0xA 0x1 0 loc_211F0208

  • Like 1

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

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

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

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

Условие MCC_IF 0x8 0x1 0xE - это нажатие кнопки L-Soft.

 

А как узнать мне новичку что 0x8 0x1 0xE это условие нажатия L-Soft а не R-Soft или другой кнопки?

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

А как узнать мне новичку что 0x8 0x1 0xE это условие нажатия L-Soft а не R-Soft или другой кнопки?

Ну, проанализировав всё…

IF/ELSEIF aa bb cc dd eeeeeeee ff gg

aa = 8 = условия обработки клавиатуры

bb = вариант нажатия (1=короткое нажатие дополнительных кнопок, 2…5 = разные там длинные, длинные после короткого , нажатия конкретных цифровых и т.д.)

cc = код кнопки. Коды дополнительных кнопок для D780,C5212 и прочих современных моделей такие (значения в hex):

01 - C-удержание

02 - C

03 - Цифровые кнопки клавиатуры

04 - Up

05 - Down

06 - Left

07 - Right

08 - Green

09 - Red

0A - "0"

0B - "*"

0C - "#"

0D - OK

0E - L-Soft

0F - R-Soft

0F - Средняя кнопка (у B5722)

12 - Vol+

13 - Vol-

14 - Foto

18 - Headset

1B - SIM-Select

1D - Foto в полнажатия (у D980)

00 - Средняя кнопка (у D980)

21 - кнопка с нотой (у M3510)

1F - Плеер (у M3510)

1E - Плеер вперёд (у M3510)

1D - Плеер назад (у M3510)

 

dd = 0 просто переход, 1 будет условный MCC_CALL (т.е. по MCC_RETURN вернёмся к продолжению после IF)

 

ee = адрес перехода если условие выполнено.

 

ff,gg = обычно не используются, разве что в мастерпатче для своих MCC_IF можно там ещё дополнительные аргументы передавать.

  • Like 3

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

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

1 Если я правильно понял прошивка состоит из MCC-скриптов и ассемблерного кода?

2 В Бинедите после применения патча Минимальный промежуток для автодозвона v2.1(C5212IXEJH3):

 

20A7CFB6: 45E0 B loc_20A7D044 ;переход по адресу 0x20A7D044

 

какой должен быть код чтоб на выходе ARM-компилятора я получил - 45E0?

у меня - B loc_20A7D044 - выдает E7FE

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

1 Если я правильно понял прошивка состоит из MCC-скриптов и ассемблерного кода?
Правильно. Причём по большей части там ассемблер, как в режиме Thumb так и в режиме ARM. И собственно на ассемблере и интерпретатор MCC-скриптов написан.

 

2 В Бинедите после применения патча Минимальный промежуток для автодозвона v2.1(C5212IXEJH3):

20A7CFB6: 45E0 B loc_20A7D044 ;переход по адресу 0x20A7D044

какой должен быть код чтоб на выходе ARM-компилятора я получил - 45E0?

у меня - B loc_20A7D044 - выдает E7FE

См. описание команд процессора в режиме Thumb

http://www.gaw.ru/html.cgi/txt/doc/micros/...rm_thumb/18.htm

 

А вообще если написать в компиляторе

.little
.thumb
.start 0x20A7CFB6
B 0x20A7D044

то как раз и получается 45E0

 

команды прямых переходов используют относительные адреса, потому их бинарный код зависит от места размещения команды и насколько далеко надо прыгать. Ну и если хочется писать не реальный адрес а loc_-метку - то эту самую метку надо предварительно где-то сопоставить какому-то адресу.

Изменено пользователем f2065
  • Like 1

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

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

А как бы при редактировании строки (MCC_EDIT) начальную позицию курсора задать ?

Или какой-нибудь самсунговский пример где найти ?

 

зы. патч ExtRenameMod иначе на B5722 делает больше вреда чем пользы, поскольку с тачскрина надо переключатся в режим курсора, перемещать курсор, потом обратно переключатся в текстовый ввода… Это всё весьма медленно, вот если бы поставить сразу курсор в нужное место (перед точкой), но как редактору указать стартовую позицию - я не нашёл…

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

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

Пробую перенести с C5212XEIB5 на C5212iXEJH3 патч SortFiles Mod(сортировка файлов будет одинакова для всех папок). Адреса в своей прошивке с которых надо изменять код по находил, но данный патч использует библиотеку мастер-патч и дальше дело не идет. Заметил что в патче который хочу перенести вроде есть переходы на адреса библиотеки(мастер-п.). Объясните простым языком технику работы и использования мастер патча? а также все необходимое для переноса патчей которые используют библеотеки мастер патча.

Прилагаю патч с изменеными адресами

SortFiles_Mod.rar

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

Прилагаю патч с изменеными адресами
А можно прилагать исходник (.asm) какой-нибудь, а не заведомо кривой .smp ?

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

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

А можно прилагать исходник (.asm) какой-нибудь, а не заведомо кривой .smp ?

исходника в ветке не было, сам пытался переделать с .smp - применял патч а далее с помощью бинедита анальзировал

 

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

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

Объясните простым языком технику работы и использования мастер патча? а также все необходимое для переноса патчей которые используют библеотеки мастер патча.
Да вообще про него много надо писать, про MCC_TASK/IF/MENU, и т.д.…

 

Если в патче BL-вызовы в область мастрепатча - то это скорее всего LoadCFG,FreeCFG,SaveCFG - это хранение каких-то настроек создаваемых патчем.

 

BL LoadCFG

Загружает файл конфига и в R0 выдаёт его адрес. Размер файла - 0x400 байт.

Значение R0 надо обязательно сохранить (для последующего FreeCFG/SaveCFG)!!!

например в R7:

MOV R7,R0 ; поскольку обычно системные функции не портят регистры R4-R7.

Из загруженного конфига можно читать или писать свои настройки всякие.

Главное только с остальными патчерами согласовать используемые номера ячейки, иначе патчи начнут глючить.

Например прочитать из 5 ячейки можно так:

LDRB R0, [R7, 5]

А если надо прочитать из ячейки с адресом более 0x1F - то надо делать так (например из ячейки 0x22):

MOV R0, 0x22

LDRB R0, [R7, R0]

 

Так-же можно что-то писать в какую-нибудь ячейку конфига, например пишем 0x55 в ячейку 0x22:

MOV R1, 0x22

MOV R0, 0x55

STRB R0, [R7, R1]

 

Фунции FreeCFG или SaveCFG должны обязательно использоватся после завершения работы с конфигом. Они освобождают память. На входе им надо в R0 указать тот адрес который ранее был получен в LoadCFG.

Например:

MOV R0, R7

BL SaveCFG

Функция SaveCFG сохраняет конфиг и освобождает память, функция FreeCFG просто освобождает память.

  • Like 2

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

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

вариант нажатия (1=короткое нажатие дополнительных кнопок, 2…5 = разные там длинные, длинные после короткого , нажатия конкретных цифровых и т.д.)

А подробней про это можешь? Просто заметил, что когда быстро нажимаешь несколько раз на кнопку, то тел. начинает выполнять действия после последнего нажатия столько раз, сколько было нажатий. Т.е там заложено какое-то ожидание и сохранение комбинации длинных и коротких нажатий? Знать бы куда сохраняется, мне бы не пришлось использовать таймер...
Ссылка на комментарий
Поделиться на другие сайты

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

Попытался перенести патч Momental Backlight OFF v.2 с C5212XEIB5 на C5212iXEJH3, получилось вечный перегруз.

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

Исходники прилагаю.

Momental.rar

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

Попытался перенести патч Momental Backlight OFF v.2 с C5212XEIB5 на C5212iXEJH3, получилось вечный перегруз.

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

Исходники прилагаю.

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

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

SantaX,

ну неправильная опера к ребуту точно не приведет...

 

sashaqwe,

для начала посмотри, не выдаёт ли binedit справа никаких сообщений при компиляции :107:

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

Alex&r прилагаю исходники в zip

 

BinEdit выдает ошибку - неопределена переменная gs_KeyLockInfo, Alex&r я так понимаю ты ее использовал в какомто из своих патчей, возникает вопрос каким значением заменить ее.

Momental.zip

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

 

BinEdit выдает ошибку - неопределена переменная gs_KeyLockInfo, Alex&r я так понимаю ты ее использовал в какомто из своих патчей, возникает вопрос каким значением заменить ее.

Тебе нужно найти значение gs_KeyLockInfo для своей прошивки. Других ошибок пока не вижу. В понедельник буду у компа гляну на твою прошивку.

 

P.S. вставь в исходник строку

.equ gs_KeyLockInfo 0x304A7182

или добавь себе в sym.

Изменено пользователем Alex&r
  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

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

Тебе нужно найти значение gs_KeyLockInfo для своей прошивки. Других ошибок пока не вижу. В понедельник буду у компа гляну на твою прошивку.

 

P.S. вставь в исходник строку

.equ gs_KeyLockInfo 0x304A7182

или добавь себе в sym.

Спасибо за помощь, сегодня скомпилировал все заработало. Теперь такая же проблема с портированием патча Disable Keypad Unlocked Popup v. 1.2 - не определена переменная mcc_lk_idle_screen. Выше пишешь что нужно найти значение для своей прошивки, можно по подробней как его искать? И что такое sym? Прошу прощения возможно за вопросы чайника, может это гдето и писалось ранее но нет времени все перелопатить.

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

Почитай тему [AlaSToR]'а Обучение патчам. В уроке 6 там есть про поиск аналогичного кода в разных прошивках. Да и вообще полезно будет.

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

Почитай тему [AlaSToR]'а Обучение патчам. В уроке 6 там есть про поиск аналогичного кода в разных прошивках. Да и вообще полезно будет.

Прочитал, только из данного урока все равно не понял как мне найти значение переменной mcc_lk_idle_screen которую ты используеш в своем патче(Disable Keypad Unlocked Popup v. 1.2). И что это за переменная если ВЕ её не определяет. Попробывал скомпилировать твой исходник для твоей прошивки, выдает ту же ошибку(не определена переменная mcc_lk_idle_screen). Я так понимаю что это условная переменная введеная тобою, смысл которой понимаешь только ты - тогда как я у себя в прошивке найду её значение если я не понимаю что ищу. Может я чего то не понимаю. Разъясните.

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

И что это за переменная если ВЕ её не определяет.

У каждой функции есть имя и адрес. BE работает с адресами. А имена (при просмотре кода в BE) или адреса (при компиляции исходника, в котором указаны имена функций и др.) подставляет только в том случае, если эти имена сопоставлены с их адресами в прошивке. Сделать это можно двумя способами:

1. Написать в исходнике патча строку вида:

.equ Function_name 0x20000000 (<-здесь адрес функции)

2. Добавить запись об этой функции в sym-файл, который подгружать в BE вместе с прошивкой.

Недостаток первого способа в том, что если одна функция используется во многих патчах, то в каждом патче нужно прописывать такую строку. Но зато есть польза для тех, кто потом использует этот исходник для портирования патча на другую прошивку. Т.е. зная адрес у меня, ты можешь попытаться найти аналогичный код (и тем самым адрес) у себя.

А для второго способа плюсом является то, что не надо в каждом патче прописывать адреса функций (mcc, переменных и т.д.), но зато, тот кто захочет портировать патч, не сможет без sym-файла для моей прошивки найти адрес у себя (если у него нет sym-файла для своей прошивки).

Как ты уже мог догадаться, в данном случае получился второй вариант ;)

Попробывал скомпилировать твой исходник для твоей прошивки, выдает ту же ошибку(не определена переменная mcc_lk_idle_screen).
Потому что у тебя нет sym-файла для моей прошивки (или нет такой записи в нем).
Я так понимаю что это условная переменная введеная тобою, смысл которой понимаешь только ты
Не мною. Корейцами. :) Они же знают ее смысл. Я только в общих чертах - прорисовка экрана в режиме ожидания (примерно с английского).
тогда как я у себя в прошивке найду её значение если я не понимаю что ищу.
Попробуй так поискать эквивалентный адрес: адрес mcc_lk_idle_screen у меня 0x2079E13C.

Т.к. я часто не пишу адреса функций и переменных в исходниках патчей, то можешь обращаться по ICQ (номер есть в профиле) - адрес у себя в прошивке подскажу :)

P.S. Кстати, ты мог бы и сам определить адрес mcc_lk_idle_screen в моей прошивке:

В исходнике:

.start 0x20C1A23C

.insertbin 0x20C1A24C 0x20

.mcc mcc_task 0x9 0x7FC 0 1

.insertbin 0x20C1A27C 0x10

.mcc mcc_transf 0 0 0 0 mcc_lk_idle_screen

т.е. последняя mcc в блоке.

Смотрим smp, блок с <nord offset="0xC1A23C"....... 1A000000000000003CE1792000000000" /> - вот он адрес (выделен жирным) перехода на mcc_lk_idle_screen.

Изменено пользователем Alex&r
  • Like 2
Ссылка на комментарий
Поделиться на другие сайты

Попробуй так поискать эквивалентный адрес: адрес mcc_lk_idle_screen у меня 0x2079E13C.

Спасибо за помощь. А если бы я не знал адрес функции в твоей прошивке, для нахождения соответствия в своей, как тогда мне найти адрес mcc_lk_idle_screen? В 6 уроке я не встретил нахождение адреса по названию функции, там также автор знает изначально необходимые адреса по которым и ищет в прошивке. Также в ВЕ я не нашел в вкладке ММС(функции) такого названия как mcc_lk_idle_screen. Также по адресу который я нашел в своей прошивке 0x2079A160(эквивалентный твоему) также нет никакого упоминания о mcc_lk_idle_screen, а набор разных mcc-функций. Объясните как мне тогда производить поиск по названию mcc_lk_idle_screen?

 

Раскажи также что за переменная gs_KeyLockInfo используемая в твоем исходнике Momental Backlight OFF v.2? Условная тобой задана или Корейцами? и как мне её искать если бы я также не знал адреса в твоей прошивке?

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

Спасибо за помощь. А если бы я не знал адрес функции в твоей прошивке, для нахождения соответствия в своей, как тогда мне найти адрес mcc_lk_idle_screen? В 6 уроке я не встретил нахождение адреса по названию функции, там также автор знает изначально необходимые адреса по которым и ищет в прошивке.

Как много вопросов :28: И это хорошо, значит тебе это занятие интересно :) Почему только о 6 уроке идет речь (это я по дороге в магазин с телефона по-быстрому глянул, где о подобном идет речь и сказал, что в 6 уроке). Нужно прочитать все уроки, тогда некоторые вопросы отпали бы. Вот тебе еще одна инструкция от Рейнджера, которую я так же скачал где-то на этом форуме, но сейчас долго искать, так что выкладываю ее здесь:

By_Ranger.rar Ну и кратко по твоим вопросам:

Также в ВЕ я не нашел в вкладке ММС(функции) такого названия как mcc_lk_idle_screen.
mcc_lk_idle_screen не может быть на вкладке MCC. Она на вкладке Символы в правой части BE и только тогда, когда она есть в sym-файле, и он загружен.
Также по адресу который я нашел в своей прошивке 0x2079A160(эквивалентный твоему) также нет никакого упоминания о mcc_lk_idle_screen, а набор разных mcc-функций. Объясните как мне тогда производить поиск по названию mcc_lk_idle_screen?
В некоторых mcc-функциях есть трассировка, тогда там (на вкладке MCC в левой части BE) видно, как она называется. Если трассировки нет, то тогда названия не будет (но, если такая запись будет в sym-файле, то название и адрес mcc будет в строке над кодом, правее поля для ввода адреса).

В случае, если у тебя нет ни адреса, ни sym для той прошивки, с которой портируешь, то нужно декомпилировать патч и смотреть адрес уже после декомпиляции. Подробнее в инструкции, о которой выше...

Раскажи также что за переменная gs_KeyLockInfo используемая в твоем исходнике Momental Backlight OFF v.2? Условная тобой задана или Корейцами? и как мне её искать если бы я также не знал адреса в твоей прошивке?

Корейцами. Три страницы назад в этой теме FRAER писал как искать адреса в оперативке. Вот то же самое в Word'е:

Search_adresses_in_opera.rar

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

Alex&r в твоем исходнике к патчу Disable Keypad Unlocked Popup v. 1.3 есть такая строка:

.equ new_mcc_if_tab 0x215A7C50

адрес этой функции приводится в описании Мастер патча для твоей модели, для C5212iXEJH3 в описании Мастер патча его нет. Как мне его отыскать если по этому адресу(для твоей модели) - 00000..., да и в понимании Мастер патча я далекий?

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

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

Вы сможете оставить комментарий после входа в



Войти



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