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

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

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

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


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

Здравстуйте профессионалы в написании патчей. Помогите чайнику разобраться. В прошивке по адресу 0х2007A11E имеем следующую строчку кода: CDF702EC. BinEdit дизассемблирует данный код в команду BL _off_20458B14 с комментарием "(компенсирован) Переход по адресу 0x20458B14 с сохранением адреса возврата". Вопрос в следующем: где в исходном коде "CDF702EC" спрятан адрес перехода "0x20458B14". Пытался разными способами найти этот адрес, ничего не получилось. Помогите пожалуйста!

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

  • Ответов 1,4 тыс
  • Создана
  • Последний ответ

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

Здравстуйте профессионалы в написании патчей. Помогите чайнику разобраться. В прошивке по адресу 0х2007A11E имеем следующую строчку кода: CDF702EC. BinEdit дизассемблирует данный код в команду BL _off_20458B14 с комментарием "(компенсирован) Переход по адресу 0x20458B14 с сохранением адреса возврата". Вопрос в следующем: где в исходном коде "CDF702EC" спрятан адрес перехода "0x20458B14". Пытался разными способами найти этот адрес, ничего не получилось. Помогите пожалуйста!

В какой прошивке то ? их полсотни, если не больше.

 

Но вообще логика такова: в режиме процессора Thumb - через BL можно сделать переход только куда-то рядом - в радиусе 250байт (ибо задаётся однобайтное смещение относительно текущего места умноженное на два). Потому, делают переход куда-то рядом, где размещают сложную процедуру дальнего перехода - либо с переключением в режим AMR и там уже

LDR R12=#0x20458B14

BX R12

либо

PUSH {R0-R1}

LDR R0,=0x20458B14

STR R0,[sP,#4]

POP {R0,PC}

 

BinEdit эти приёмы знает, и в локальном BL их смотрит и показывает сразу конечный адрес перехода. Отключи в настройках «Подменять дальние переход через BLX», нажми обновить, и он покажет реальный ближний переход на процедуру делающую дальний переход. И смотри при переходе за переключением в AMR, BinEdit автоматом как правило не замечает что надо переключится в показ в режиме AMR.

  • Like 1

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

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

Пару ремарок...

в радиусе 250байт

4 мегабайта

переключением в AMR,

ARM,конечно же...

где в исходном коде "CDF702EC" спрятан адрес перехода "0x20458B14

Код можно посчитать в калькуляторе кода

размещают сложную процедуру дальнего перехода - либо с переключением в режим AMR и там уже

В прошивке все дальние переходы реализованы через BLX,т.е с переключением в ARM-режим.

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

  • Like 1
/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

4 мегабайта
Однако, BinEdit делает в таком случае абсолютно кривой переход совсем не туда куда вообще надо. Я об этом ветке про BinEdit недавно приводил конкретный пример воспроизводимого глюка. Изменено пользователем f2065

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

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

Однако, BinEdit делает в таком случае абсолютно кривой переход

Хм...у мя почему то переходы получаются абсолютно прямыми,уже наверно релизах на 10 программы... :59: Возможно,какой-то частный случай.Связанный,к примеру,с кратностью адреса перехода

Вот,например,BLX-переход из патча ScreenShot

12431-14-08-08)1218740162_thumb.jpg

12431-14-08-08)1218740185_thumb.jpg

Прыжок совершается более,чем на 2 МБ,на ARM-код...И БинЕдит все ровно отображает,и калькулятор считает,и патч работает :)

Я об этом ветке про BinEdit недавно приводил конкретный пример

Ты там вроде про компилятор говорил... :( Ответил там же :59:

/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

А есть какой-нибудь алгоритм избежания конфликта ячеек LoadCFG/SaveCFG ?

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

 

зы. кстати кто-нибудь знает патчи сделанные не мной, под D780 или D880, где LoadCFG/SaveCFG используются ?

у меня пока заняты ячейки +0x08 (переключалка языка) и +0x20 (запись разговоров)

 

в авто-bluetooth/D780XEHE1 - занято +0x00

в авто-bluetooth/D880XEGK5 - занято +0x0C

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

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

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

А есть какой-нибудь алгоритм избежания конфликта ячеек LoadCFG/SaveCFG ?

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

Это всё лучше самому записывать куда-нить, и пусть те, кто переносит патчи на 780 пишут какие байты в cfg они взяли :(

зы. кстати кто-нибудь знает патчи сделанные не мной, под D780 или D880, где LoadCFG/SaveCFG используются ?

Под 780 я тока Авто-Bluetooth переносил (который работает с LoadCFG и SaveCFG), но ты уже знаешь какое место в cfg занято :59:

JavaShadow работу с cfg не использует, там только используется LangTab.

Talker также работу с cfg не использует.

 

P.S. Предлагаю сделать таблицу по использованию ресурсов -=Мастер-патч=-, как сделал её когда-то dimastyj для X700XEEK6, и оформить в закреплённое сообщение соответствующей темы :)

Так, думаю, конфликтов между патчами станет меньше :59:

  • Like 1

Пожертвования отправлять сюда R256859050930

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

А что значит 02 ? И в чём разница с 01 ?

02 - проверка кода цифровой клавиши: 1-1, 2-2, ... А-0, В-*, С-#

01 - всех остальных, коды в конфиге бинедита можно посмотреть

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

Застрял с редактированием меню. D780XEHE1

 

Например, меню - настройки - сеть.

214CC440  5D 00 0000 0000 0000 00000000 0000 0000  Подготовка окна
214CC450  79 00 0000 0000 0000 00000000 0000 0000  MCC_SET_CURMENU
214CC460  76 00 0100 0041 0000 00000000 B000 0000  MCC_MENU_START
214CC470  7D 01 0300 0200 0200 00000000 0000 0000  Описание меню с первым индексом  из 2 пунктов
214CC480  77 01 0300 0000 0202 00000000 1000 0000  MCC_DISPLAY_MENU
214CC490  7A 00 0000 0000 0000 444FBC20 0000 0000  По пункту меню 0 переход на адрес 0x20BC4F44
214CC4A0  7A 00 0100 0000 0000 FC807D20 0000 0000  По пункту меню 1 переход на адрес 0x207D80FC
214CC4B0  18 08 0100 0F00 0000 58798C21 0000 0000  Если x1=8 x2=1 x3=15 то переход на 0x218C7958
214CC4C0  19 08 0100 0200 0000 58798C21 0000 0000  Или если x1=8 x2=1 x3=2 то переход на 0x218C7958
214CC4D0  39 00 0000 0000 0000 00000000 0000 0000  Завершение МСС скрипта

 

Иду в MCC_MENU_CONFIG_01. На первый взгляд всё очевидно:

 

2064ECCC: D248 LDR R0, =0x00000F9C; 0F9C = "Выбор сети"
2064ECCE: D1F65EEE BL _off_20F39C2C
2064ECD2: 0022 MOV R2, #0x0
2064ECD4: 0092 STR R2, [SP]
2064ECD6: 5422 MOV R2, #0x54
2064ECD8: 031C MOV R3, R0
2064ECDA: 0021 MOV R1, #0x0
2064ECDC: 201C MOV R0, R4
2064ECDE: D7F6F0EE BL _off_20A666C8

2064ECE2: CD48 LDR R0, =0x00000F9C
2064ECE4: 0130 ADD R0, #0x1; 0F9D = "Режим сети"
2064ECE6: D1F652EE BL _off_20F39C2C
2064ECEA: 0022 MOV R2, #0x0
2064ECEC: 0092 STR R2, [SP]
2064ECEE: 5422 MOV R2, #0x54
2064ECF0: 031C MOV R3, R0
2064ECF2: 0121 MOV R1, #0x1
2064ECF4: 201C MOV R0, R4
2064ECF6: D7F6E4EE BL _off_20A666C8

 

Для пробы меняю по адресу 2064ECE4 01 на 02.

Прошиваюсь.

Эффекта нет!!! :(

По прежнему там строка "Режим сети"

 

Пробовал в разных других меню - аналогично: код ресурса я меняю, но эффекта нет.

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

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

Для пробы меняю по адресу 2064ECE4 01 на 02.

Прошиваюсь.

Эффекта нет!!!

 

Почему нет?

Стань на пункт "Сеть" - во всплывающем меню пункты должны поменяться.

А то, что ты хочешь поменять, находится по адресу 0x218DBEB0

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

Подскажите пожалуйста, как сделать в коде принудительную задержку на определённое количество секунд?

 

Проблема в том, что с помощью патча DebugTool я просматриваю состояние регистров на своём D500, но картинка со значениями возникает и тут же исчезает. Как сделать, чтобы удерживалось на экране пару секунд? Есть ли для этого специальная функция?

И ещё, на сколько происходит задержка от одной команды NOP ?

Двери есть везде, нужно просто знать как в них войти!

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

И ещё, на сколько происходит задержка от одной команды NOP ?
Команды у ARM типично в Thumb занимают всего по одному такту. Не интересовался точными цифрами МГц, но предпологаю что например у мобил на платформе Swift тактовая частота около 100МГц - так что за секунду он выполняет около 100 миллионов NOP (реально наверно немного меньше за счёт обслуживания прервываний).

 

Задержку в таких ситуациях (не применительно к мобиле, а вообще к процам) делают примерно так:

 

PUSH {R0}; если регистр где-то потом нужен...

LDR R0, = кол-во МГц проца делённое на кол-во команд в цикле - будет задержка в секунду
; можно оптимизацию придумать, т.к. грузить сразу 32битное число - жрёт память сильно
; так что можно через MOV R0 грузить 1байтное число и потом через LSL R0 его умножать.
; Например:
; 100миллионов - это 0x05F5E100 - т.е. примерно 0x06000000 (100.663.296) - 6 сдвинутая на 24бита влево:
; MOV R0, 6
; LSL R0, 24

metka: ; цикл
SUB R0, 1
CMP R0, 0
BNE metka

POP {R0}

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

  • Like 1

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

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

А как воспрепятствовать гашению экрана по таймауту ???

D780XEHE1

 

Вот например, при запуске камеры экран не гаснет 2 минуты (а так - гаснет через 30сек - как указано в настройках), и потом не гаснет - потом камера сама закрывается, а потом уже на рабочем столе через полминуты гаснет.

Однако процедура инициализации камеры - это около сотни команд, разбирать их всех очень долго, может кто сразу знает решение ?

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

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

Ребята, помогите с таким вопросом.

 

Хотел себе сделать, чтобы при блокировке клавиатуры при нажатии "ДА" сразу отключалась, если включена, подсветка клавиатуры и яркость подсветки экрана становилась минимальной.

 

Вот что я написал

 

....

....

 

.start 0x11373BDA

 

bl enable_LCD_light_with_economy_battery

b 0x11373444

 

enable_LCD_light_with_economy_battery:

LDR R0,=0x18AC986E ; переменная LcdPattern, 0 - минимальная яркость, 4 - максимальная

mov r1,1

STRB R1, [R0]

mov r0,0

mov r1,r0

mov r3,r0

mov r2,5

bl lk4_BackLight_On

.data

 

Всё бы хорошо, и клавиатура гаснет, и яркость уменьшается... но! После блокировки часть графики становится от 2й цветовой схемы! Цвета курсоров, нижних софт-полос становятся от второй цветовой схемы, а остальное от первой (ну или какая выбрана).

 

Я думал, что ошибка в том, что я записываю в LcdPattern цифру 1, и это же число записывается в какую-нибдь рядом расположенную переменную, но ведь такое не может быть, если я использую запись одного байта командой STRB, так что в чём тут ошибка?

Двери есть везде, нужно просто знать как в них войти!

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

Я думал, что ошибка в том, что я записываю в LcdPattern цифру 1

Именно в этом.

LcdPattern - это и есть номер цветовой схемы.

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

Верно, спасибо!

Я неверно понял, в какой переменной должно содержаться значение интенсивности подсветки. Оказалось, это gv_MainContrastLevel. Теперь всё работает))

Двери есть везде, нужно просто знать как в них войти!

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

Захотел сделать патч по изменения цвета цветных полосок в Главном меню на E200XEGJ2, но смог найти только 5 из 9 цветов (Журнал звонков, Телефонная книга, Браузер, Сообщения, Мои файлы), помогите изменить другие.

 

<patchdata firmware="E200XEGJ2" >

 <changes>
  <nord offset="0x0161B1BC" from="8422" to="A631" req="yes" />
  <nord offset="0x0161B1C4" from="EB69" to="A631" req="yes" />
  <nord offset="0x0161B1D0" from="4342" to="A631" req="yes" />
  <nord offset="0x0161B1D8" from="E349" to="A631" req="yes" />
  <nord offset="0x0161B1E0" from="A259" to="A631" req="yes" />  

 </changes>

  <options>
  <list title="Журнал звонков" offset="0x0161B1BC" type="data" values="Черный=20000000;Серый=A6310000" />
  <list title="Телефонная книга" offset="0x0161B1C4" type="data" values="Черный=20000000;Серый=A6310000" /> 
  <list title="Браузер" offset="0x0161B1D0" type="data" values="Черный=20000000;Серый=A6310000" /> 
  <list title="Сообщения" offset="0x0161B1D8" type="data" values="Черный=20000000;Серый=A6310000" /> 
  <list title="Мои файлы" offset="0x0161B1E0" type="data" values="Черный=20000000;Серый=A6310000" /> 
 </options>

</patchdata>

</patch>

 

78553-6-09-08)1220687619_thumb.jpg

 

Color_menu.rar

Изменено пользователем ZZZlodey

X100+10Mb->E200+1Gb->M3510+2Gb->S5230 Star+2Gb->S7230 Wave+4Гб->Galaxy S GT-i9003+8Гб

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

подскажите.как поменять имеющийся текст на другой через компилятор?

.start 0xXXXXXXXX

.string "Мой текст"

  • Like 2

Пожертвования отправлять сюда R256859050930

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

такой вопрос...

 

есть какаята инфа как обрабатывать события будильников???

 

мысль такая, имеем в телефоне 5 будильников(я лично использую только один)

на срабатывание 4х остальных будильников можно поставить сменe фона рабочего стола.

будет практически живой валпэпер!!!!

ночью чтото тёмное чтоб глаза не резало утром вечером чтото другое и совсем дневная картинка

 

 

другой вариант на будильник повесить смену режима, типа чтобы в 22:00 включался тихий режим а в 9:00 включался обычный рабочий

 

так вот, как вобще будильник работает? реально ли туда впихнуть смену валпепера?

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

мысль такая, имеем в телефоне 5 будильников(я лично использую только один)

на срабатывание 4х остальных будильников можно поставить сменe фона рабочего стола.

Кстати, будильников далеко не 5, можно в меню ещё добавлять. А ещё есть нечто типа будильников в событиях календаря.

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

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

есть какаята инфа как обрабатывать события будильников???

Для отображения срабатывания будильника/календаря в D780XEHE1 вызывается mcc_app_alarm_event_ind (0x202CF87C)

Можно в нее врезаться и делать все, что угодно...

  • Like 4
5073IA3.png
Ссылка на комментарий
Поделиться на другие сайты

D780XEHE1

 

А как вывести строку текста по неким координатам на экране ?

Надо просто на экран вывести некую дополнительную информацию, в каком-то конкретном месте.

Например, на экране входящего вызова (пока звонит) - пририсовать текущее время, или в фмтюнере дописать ещё на экране имена станций…

 

Желательно, пример, как задаются координаты и что вызывается

  • Like 1

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

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

Свой текст можно вывести через процу lk4_8Graphic_Window.

Через нее можно вывести не только текст,но если не ошибаюсь и графику-нарисовать картинку с тфс,вывести графические часы (как на рабочем столе) в какое-нибудь место. Как пример,да ещё и с исходниками,могу посоветовать глянуть ветку патчей D500. Глянь патчик "Текущее время при звонке" от Freeman. Там выводится просто текст. Есть всё от него же патч - текущее время при зарядке привыклвыключенном телефоне-там выводятся графические часы (с рабочего стола). В этой проце задается не только координаты,но ещё и размер шрифта. Ещё как вариант,могу предложить вариант - патчик от mdemonv - патч,который изменяет размер шрифта названия фото при его просмотре. Я думаю,там тоже этот текст выводится через эту процу. Да и через нее можно нарисовать простое белое окно и вывести текст,допустим в середину экрана. Как например,патч "фонарик" на д900. Удачи :)

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

Позволю себе немного уточнить ответ на вопрос f2065 :71:Руслан :az:

lk4_8Graphic_Window выводит только графику, но никак не текст.

Для вывода текста есть функция lk4_10WriteWindow. Ну а как она работает, думаю станет ясно из примера :)

	ldr	r1,=fx_pos
mov	r3,26
strh	r3,[r1]
ldr	r1,=fy_pos
mov	r3,0xA4
strh	r3,[r1]
ldr	r1,=f_width
mov	r3,150
strh	r3,[r1]
ldr	r1,=f_height
mov	r3,16
strh	r3,[r1]
ldr	r1,=f_font
mov	r3,7
strb	r3,[r1]
ldr	r3,=0x0003FFFF
ldr	r1,=f_color
str	r3,[r1]
ldr	r0,=0x18FC0FB0
blx	$Ven$AT$L$$strlen
mov	r1,r0
mov	r2,3
str	r2,[sp,4]
mov	r2,0xB1
mov	r3,0
mov	r0,0
str	r0,[sp]
ldr	r0,=0x18FC0FB0
blx	$Ven$AT$L$$lk4_10WriteWindow

(выводится текст по адресу 0x18FC0FB0)

37413-16-09-08)1221558605_thumb.jpg

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

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

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

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

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

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

Войти

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

Войти



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