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

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

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

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


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

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

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

SantaX,

хз как их обозвать, там используются текстовые ресурсы с XXX, затем вызывается функция, которая заменяет эти XXX на строку из параметра...

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

FRAER, иx Руслан назвал динамическими в уроках :idea: я вроде бы имел с ними дело когда убирал окошко "сохранено %s в %" .

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

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

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

Парни как добавить пункт в меню. Создать с нуля одно, а вот как добавить, в частности хочу добавить пункт в меню мультимедиа и ещё один вопрос подскажите где взять сим файл на X700XEFC3 на javere не качает выдает ошибку!

Потерял U900 :(, не беда сделаем его из X700 :)

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

Вот в етой статейки от Позитрона описано как добавлять меню http://OldPh.one/index.php?showtopic=44446?p=44...mp;#entry446400

Все просто.У мня со 2 раза все получилось

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

Привет! Можете меня проконсультировать? Хотелось бы сделать две вещи:

1) при сбросе звонка кнопкой "Отбой", что бы не выводилось сообщение о пропущенном вызове (есть патч reject call log о нем позже).

2) при сообщении о пропущеном вызове при нажатии на Вызов и звонке, после окончания звонка сообщение о пропущенном вызове убирать.

 

вообще на сколько я могу себе представить логику разрабов:

1) у экземпляра записи звонка (они, наверное, хранятся в побобии БД), если он пропущен проставляется какой- то флаг

2) на основании этого флага на рабочем столе висит сообщение о пр. звонке

3) после входа в список пропущенных флаг снимается

 

вопрос: как найти этот флаг и код который его проставляет и снимает?

Если я не прав- поправьте меня.

 

Задача минимум: портировать reject call log. Но и тут у меня ничего не вышло. Совсем непонятно как найти эквиваленты для этого патча...

Просветите меня, если кто может.

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

mcc menu config 7d1d - где найти его адресс на вкладке MCC нет такого :| да, допустим добавил пункт, а как к нему ещё иконку зацепить? Про это статейка где нибудь есть? :28:

Потерял U900 :(, не беда сделаем его из X700 :)

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

да, допустим добавил пункт, а как к нему ещё иконку зацепить? Про это статейка где нибудь есть? :28:

Иконка добавляется также, как и создается пункт меню. Различия - в типе, передаваемом в lk_AddMenu, ну и уже не строку нужно передавать в lk_AddMenu, а ID иконки. Статей нет, но есть патчи, откуда можно пример взять.

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

-=DaNTe=-,

уверен на 100%, что в х700 нет меню-конфига с номером 0x7D, что-то ты напутал, скорее всего 0x7D - это номер самого меню-конфига в списке мсс-скриптов, а, значит, тебе нужен меню-конфиг 0x1D

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

-=DaNTe=-,

уверен на 100%, что в х700 нет меню-конфига с номером 0x7D, что-то ты напутал, скорее всего 0x7D - это номер самого меню-конфига в списке мсс-скриптов, а, значит, тебе нужен меню-конфиг 0x1D

Ну это я и имел ввиду например: mcc menu config 00 - его код 7D00, а у меня в проше идёт код 7D 1D ..........................

и в MCC нет mcc menu config 1D :) Теперь надеюсь понятно.

 

Так что меню (1088EE1C  7D 1D 1B00 0B00 0100 00000000 0000 0000  Меню 0x1D из 11 пунктов) кто нибудь напишет как найти код, пожалуйста!!!!!!!

Потерял U900 :(, не беда сделаем его из X700 :)

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

Есть у меня в патче "Полноэкранный просмотр картинок" такой код:

 

;----------------.изменение размера очистки экрана --------------------------------------------------------------------

.equ go 0x20C69E00

.equ back 0x20A88FF8

.equ RegView 0x20BD6000

 

.start 0x20A88FEA

MOV r0, 0x0 ; изменение положения очистки

 

.start 0x20A88FF0

LDR R2, =go+1

BX R2

.data

 

;----------------очистка экрана; --------------------------------------------------------------------

 

go:

mov r1, 0x50

add r0, r7, r1

STRH R7, [R3, #40]

STRH R0, [R3, #42]

MOV R3, #0x0

MOV R2, #0x0

LDR R1, =back+1

BX R1

.data

 

;----------------увеличение времени подсветки на время показа слайд-шоу; ----------------------------------------

 

backlight:

ldr r1,=gv_backlight

ldr r3,[r4,8]

str r3,[r1]

mov r2,0

mov r1,0

mov r0,0

str r2,[sp]

bl lk4_BackLight_On

add sp,0x100

pop {r4-r7,pc}

.data

 

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

жирным выделена строка, которую я фактически высчитываю вручную...

вопрос у меня следующий... если я переделываю его следующим образом, то всё перестаёт работать...

 

 

;----------------очистка экрана; --------------------------------------------------------------------

 

go:

mov r1, 0x50

add r0, r7, r1

STRH R7, [R3, #40]

STRH R0, [R3, #42]

MOV R3, #0x0

MOV R2, #0x0

LDR R1, =back+1

BX R1

.data

 

;----------------увеличение времени подсветки на время показа слайд-шоу; ----------------------------------------

 

backlight:

ldr r1,=gv_backlight

ldr r3,[r4,8]

str r3,[r1]

mov r2,0

mov r1,0

mov r0,0

str r2,[sp]

bl lk4_BackLight_On

add sp,0x100

pop {r4-r7,pc}

.data

 

;----------------.изменение размера очистки экрана --------------------------------------------------------------------

 

;.equ go 0x20C69E00

.equ back 0x20A88FF8

.equ RegView 0x20BD6000

 

.start 0x20A88FEA

MOV r0, 0x0 ; изменение положения очистки

 

.start 0x20A88FF0

LDR R2, =go+1

BX R2

.data

 

т.е. вместо этой ссылки go я пишу этот кусок сразу после предыдущего текста патча...

и перестаёт работать...

 

если я делаю так, как в первом варианте, то потом в БинЭдите после применения патча вижу следующее...

 

20C69E16: A368 LDR R3, [R4, #0x8];R3 = слово по адресу [R4 + 8 байт]

20C69E18: 0B60 STR R3, [R1];слово по адресу [R1] = R3

20C69E1A: 0022 MOV R2, #0x0;R2 = 0

20C69E1C: 0021 MOV R1, #0x0;R1 = 0

20C69E1E: 0020 MOV R0, #0x0;R0 = 0

20C69E20: 0092 STR R2, [sP];слово по адресу [sP] = R2

20C69E22: FAF5DBFE BL off_20A64BDC;Переход по адресу 0x20A64BDC с сохранением адреса возврата

20C69E26: 40B0 ADD SP, SP, #0x100;SP = SP + 256

20C69E28: F0BD POP {R4-R7,PC};Загрузить регистры R4-R7,PC

20C69E2A: 0000 NOP ;Пустая команда. LSL R0,R0,0 = 0x0 (0)

20C69E2C: 28C57730 DCD 0x3077C528;Данные для команды по адресу 0x20C69E14

20C69E30: 03B4 PUSH {R0,R1};Сохранить регистры R0,R1

20C69E32: 0148 LDR R0, =0x208476AD;R0 = значение по адресу (PC + 4)=[0x20C69E38]= 0x208476AD

20C69E34: 0190 STR R0, [sP, #0x4];слово по адресу [sP + 4] = R0

20C69E36: 01BD POP {R0,PC};Загрузить регистры R0,PC

20C69E38: AD768420 DCD 0x208476AD;Данные для команды по адресу 0x20C69E32

20C69E3C: 03B4 PUSH {R0,R1};Сохранить регистры R0,R1

20C69E3E: 0148 LDR R0, =0x20847709;R0 = значение по адресу (PC + 4)=[0x20C69E44]= 0x20847709

20C69E40: 0190 STR R0, [sP, #0x4];слово по адресу [sP + 4] = R0

20C69E42: 01BD POP {R0,PC};Загрузить регистры R0,PC

20C69E44: 09778420 DCD 0x20847709;Данные для команды по адресу 0x20C69E3E

20C69E48: 03B4 PUSH {R0,R1};Сохранить регистры R0,R1

20C69E4A: 0148 LDR R0, =0x208476E3;R0 = значение по адресу (PC + 4)=[0x20C69E50]= 0x208476E3

20C69E4C: 0190 STR R0, [sP, #0x4];слово по адресу [sP + 4] = R0

20C69E4E: 01BD POP {R0,PC};Загрузить регистры R0,PC

20C69E50: E3768420 DCD 0x208476E3;Данные для команды по адресу 0x20C69E4A

20C69E54: 1F00 LSL R7, R3, #0;R7 = R3 << 0 = 0x0 (0)

20C69E56: 1F00 LSL R7, R3, #0;R7 = R3 << 0 = 0x0 (0)

20C69E58: 1F00 LSL R7, R3, #0;R7 = R3 << 0 = 0x0 (0)

20C69E5A: 1F00 LSL R7, R3, #0;R7 = R3 << 0 = 0x0 (0)

 

жирным здесь, то, что мне и надо...

а вот что это после этого появляется, зачем оно надо и почему без него патч работать не хочет?

соответственно, если я компилю второй вариант, то вот этого лишнего не появляется...

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

Лучше работать завтра, чем сегодня...

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

а вот что это после этого появляется, зачем оно надо и почему без него патч работать не хочет?

Потому что это редиректы. Сейчас проблем для созданий патчей практически нету. А вот раньше приходилось очень сильно извращаться. Команды bl/blx (да и вообще команды в асме) - имеют ограничения. Так например, команда mov может записывать число от нуля до 255 (0..$FF). Команды переходов b/bne/beq и т.д. имеют тоже свое ограничение - длина перехода. А также и bl/blx не может вызывать функцию, которая находится на длине, превышающей ограничение. Чтобы этого избежать, создаются редиректы. Т.е. вызывая в коде функцию, которая находится на расстоянии, превышающем ограничение - BinEdit создает редирект. Т.е. вызывается уже не my_function (что вызывали вы в коде), а ее редирект, т.е. получается так сказать вызов совсем другой функции, скажем - j_my_function, которая уже описывается в основном после патче, или если указана директива .orgbl - то в месте, где указана эта директива. Конструкция редиректа такова:

j_my_function:

push {r0,r1}

ldr r0,=my_function+1

str r0,[sp,4]

pop {r0,pc}

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

А также перед редиректами - у тебя находяся данные для загрузки командой ldr, а т.е. gv_backlight. От этого никуда не деться. Если от редиректов можно избавиться, то от данных - нет.

 

А насчет первого блока вопросов - я ничерта не понял, что где и как. И не я один :jokingly:

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

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

вопрос остался в том, почему если я убираю строку

 

.equ go 0x20C69E00

 

и просто вставляю нужный код с этого адреса, то перестаёт работать...

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

 

go:

mov r1, 0x50

add r0, r7, r1

STRH R7, [R3, #40]

STRH R0, [R3, #42]

...

 

то работать перестаёт... вопрос в том, почему? и редиректы эти не появляются...

 

вот... понял... всё правильно...

просто редиректы появляются там, где я делаю врезку... и затирают исходный код... вот в чём была проблема :jokingly:

Лучше работать завтра, чем сегодня...

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

[AlaSToR], вот собираюсь я портировать какой- то патч. Где (или как) я могу узнать какой базовый адрес имеет прошивка с которой я его портирую?

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

[AlaSToR], вот собираюсь я портировать какой- то патч. Где (или как) я могу узнать какой базовый адрес имеет прошивка с которой я его портирую?

BinEdit автоматически определяет базовый адрес прошивки при первом ее открытии. Просто отвечать утвердительно нужно на его вопросы. После открытия, вначале будет адрес 0x0. Если пролистнуть чуть ниже, он в поле адреса - покажет уже адрес текущий + базовый, т.е. будет или 1XXXXXXX, или 2XXXXXXX. Или же, если это сисол, то будет там база 0x0. Иначе, если все равно адрес не будет входить в диапозон 1XXXXXXX|2XXXXXXX, 2XXXXXXX|3XXXXXXX, значит ошибка или be-файла, или отменили сканирование прошивки, отвечая отрицательно на вопросы BinEdita.

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

Ну это я и имел ввиду например: mcc menu config 00 - его код 7D00, а у меня в проше идёт код 7D 1D ..........................

и в MCC нет mcc menu config 1D :28: Теперь надеюсь понятно.

 

Так что меню (1088EE1C  7D 1D 1B00 0B00 0100 00000000 0000 0000  Меню 0x1D из 11 пунктов) кто нибудь напишет как найти код, пожалуйста!!!!!!!

В правой части BinEdit открой вкладку "MCC", в столбце "Код" ищи "7D1D" и переходи двойным щелчком на адрес, что написан рядом (0x116FFE70), затем в левой части программы в открывшемся коде листай - с адреса 0x116FFEE0 и ниже идут переходы по значению второго аргумента, у тебя это 0x1B => переходи на 0x11703256 - там и есть описание твоей менюшки.

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

В правой части BinEdit открой вкладку "MCC", в столбце "Код" ищи "7D1D" и переходи двойным щелчком на адрес, что написан рядом (0x116FFE70), затем в левой части программы в открывшемся коде листай - с адреса 0x116FFEE0 и ниже идут переходы по значению второго аргумента, у тебя это 0x1B => переходи на 0x11703256 - там и есть описание твоей менюшки.

Да я уже восьмой раз пишу что я знаю как найти, я пишу у меня нет в BinEdite кода конфига 1D т.е. смотри скрин!!!!

Спасибо что адреса написал!!!

А файла сим у тебя случаем нет??????

76462-12-08-10)1281560372_thumb.png

Потерял U900 :(, не беда сделаем его из X700 :)

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

у меня нет в BinEdite кода конфига 1D

Открывай в правой части BE вкладку "Свойства", ищи строку:

MCCTable adr="0x10277798" KolFunMCC="38" (значения адресов будут другими у тебя).

Правь значение KolFunMCC - на большее,чем там есть (насколько - пробуй сам,по чуть чуть) - затем нажимай на этой вкладке кнопку "Иголка" (канцелярская), затем переходи на вкладку МСС (все в той же правой части BE) - и проверяй, появился ли данный конфиг. Как появится, сохрани изменения, кнопка дискеты левее от иголки - на той же вкладке.

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

А файла сим у тебя случаем нет??????

Есть, не помню честно говоря уже его происхождение, но на портале можешь взять sym custom for X700XEFC3

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

11700072:	7648	LDR	R0, =0x00000A2C
11700074:	92F7D4EC	DCD	0xECD4F792

 

Нужно заменить 0x00000A2C на 0x00000DE7 пишу код

.start 0x11700072
LDR	R0, =0x00000DE7

 

а он мне меняет сразу 2 адреса

11700072:	0048	LDR	R0, =0x00000DE7	
11700074:	E70D0000	DCD	0x00000DE7

 

Где я ступил, чего не знаю??????? :)

Потерял U900 :(, не беда сделаем его из X700 :)

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

ищи... где то ниже должна быть строка с данными... там будет такое: 2C0A0000 ... или всё таки 00000A2C... но по моему первый вариант будет... по этому адресу пропиши

 

.start 0x--------

.hex E70D0000

 

вроде не ошибся :) а то я могу :)

Лучше работать завтра, чем сегодня...

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

Еще проще:

(если включены комментарии), то смотрим строку в адресе 0x11700072:

11700072: 7648 LDR R0, =0x00000A2C ;R0 = значение по адресу (PC + 472)=[0x1170024C]= 0x00000A2C

Жирным выделен адрес, где лежат как раз данные 0xA2C. Но - изменив их, мы можем нарушить работу телефона в других местах. Поэтому вставляем адрес 0x1170024C в поиск, нажимаем треугольник правее кнопки - А с лупой, выбираем: "На место расположения данных Rx=". Здесь нам BE выведет адреса, которые обращаются на адрес, где лежат данные 0xA2C (именно на этот адрес, а не на все, где лежат такие данные). Он нашел 1 адрес - это 0x21700072. Прошу заметить, почему такой адрес - здесь ошибка BinEdit'a, он к найденному адресу прибавляем еще и базу. (Т.е. т.к. на х700 база 0x1, то к 0x1 прибавляется 0x1,и получается, что он находит адрес 0x2.. В G600 база 0x2, поэтому там в поиске вместо 0x2..., получается аж 0x4.. :)). Итак, отлично, на данный адрес ссылается телефон только в одном месте, поэтому смело пишем код:

.start 0x1170024C

.word 0xDE7

Ну или, чтобы вернее:

.start 0x1170024C

.short 0xDE7

Пробуй.

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

Еще проще:

(если включены комментарии), то смотрим строку в адресе 0x11700072:

11700072: 7648 LDR R0, =0x00000A2C ;R0 = значение по адресу (PC + 472)=[0x1170024C]= 0x00000A2C

Жирным выделен адрес, где лежат как раз данные 0xA2C. Но - изменив их, мы можем нарушить работу телефона в других местах. Поэтому вставляем адрес 0x1170024C в поиск, нажимаем треугольник правее кнопки - А с лупой, выбираем: "На место расположения данных Rx=". Здесь нам BE выведет адреса, которые обращаются на адрес, где лежат данные 0xA2C (именно на этот адрес, а не на все, где лежат такие данные). Он нашел 1 адрес - это 0x21700072. Прошу заметить, почему такой адрес - здесь ошибка BinEdit'a, он к найденному адресу прибавляем еще и базу. (Т.е. т.к. на х700 база 0x1, то к 0x1 прибавляется 0x1,и получается, что он находит адрес 0x2.. В G600 база 0x2, поэтому там в поиске вместо 0x2..., получается аж 0x4.. ). Итак, отлично, на данный адрес ссылается телефон только в одном месте, поэтому смело пишем код:

.start 0x1170024C

.word 0xDE7

 

Ну или, чтобы вернее:

.start 0x1170024C

.short 0xDE7

 

Пробуй.

 

Спасибо, на счёт первого сам уже заметил, но прикол, заменил прошиваюсь, а текст в менюшке всё равно - A2C Другие файлы, а мне надо - DE7! Это может быть связанно с патчем Иконки в меню мультимедия, в нём в исх кстати перечесляются текстовые ресурсы, т.е. он там как бы заново всю менюшку пересоздаёт.

Да вопрос, а как теперь изменить текстовые ресурсы пишем например

.start 0x119F90EA адрес DE7

.hex D0 A2 D0 B5 D0 BC D1 8B 00 Слово "Темы"

Или не hex?

Потерял U900 :(, не беда сделаем его из X700 :)

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

-=DaNTe=-,

Чтобы удобней текст писать, лучше использовать директиву .string:

.string "Темы"

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

-=DaNTe=-,

Чтобы удобней текст писать, лучше использовать директиву .string:

.string "Темы"

Спасибо, чё та я совсем не х.. не знаю оказывается :(

Пойду обновлять версию моска :(

Потерял U900 :(, не беда сделаем его из X700 :)

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

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

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

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

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

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

Войти

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

Войти



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