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

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

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

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


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

Портирую патч, но вот в патче изменяется такой код:

 

....................................................

10C31468: 02F66202 BLX off_10A33930

10C3146C: F662 STR R6, [R6, #0x2C]

10C3146E: 02F66202 BLX off_10A33934

10C31472: F662 STR R6, [R6, #0x2C]

10C31474: 02F66202 BLX off_10A3393C

10C31478: F662 STR R6, [R6, #0x2C]

10C3147A: 02F66202 BLX off_10A33940

10C3147E: F662 STR R6, [R6, #0x2C]

10C31480: 02F66202 BLX off_10A33948

10C31484: F662 STR R6, [R6, #0x2C]

10C31486: 02F66202 BLX off_10A3394C

10C3148A: F662 STR R6, [R6, #0x2C]

10C3148C: 02F66202 BLX off_10A33954

10C31490: F662 STR R6, [R6, #0x2C]

10C31492: 02F66202 BLX off_10A33958

10C31496: F662 STR R6, [R6, #0x2C]

10C31498: 02F66202 BLX off_10A33960

....................................................

 

Как такой код найти в другой прошивке и как узнать с какого именно адреса применять патч

(Т.к. патч с определенного адреса начинает изменять этот код, а код перед этим адресом такой же)?

По кокому принципу определяется нужный адрес в блоках с одинаковым кодом?

(Прошивка X700XEEK6 портирую на X700XEFA1 патч CallerId_2)

  • Like 1

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

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

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

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

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

sleeping-man,

Это ты мне ответил? Или просто задал вопрос?!

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

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

Портирую патч, но вот в патче изменяется такой код:

 

....................................................

10C31468: 02F66202 BLX off_10A33930

10C3146C: F662 STR R6, [R6, #0x2C]

10C3146E: 02F66202 BLX off_10A33934

 

 

 

Ну ты насмешил. :lol: Что ты смотришь это место как код . Этоже просто картинка ..На которой расположен новый код для патча. Для этого можешь использовать любую неиспользуемую картинку в прошивки :) . Могу помочь , Используй картинки фон под датой Они в Х700 не используются . Я для Х700 как раз на них патчи и распологал :idea:

SAMSUNG -Е100 -> E730 - > Nokia N73

Если у вас беда ,то мы идем к вам …… SGH.ru

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

Sergeyl,

Спасибо за ответ! Но зачем смеяться, я же только учусь! Лучше бы рассказал, как определить по коду картинка это или что-то другое!

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

Но зачем смеяться, я же только учусь!

 

Я не хотел тебя обидеть. Извени если что. :lol:

 

Лучше бы рассказал, как определить по коду картинка это или что-то другое!

 

 

Да у тебя что карты ресурсов нет. :lol: А так лучше пиши в личку или стучи в Асю . Если буду свободен отвечу на вопросы :shock:

SAMSUNG -Е100 -> E730 - > Nokia N73

Если у вас беда ,то мы идем к вам …… SGH.ru

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

Мне нужно переписать вот этот код:

004F      LDR R7, =0x10C3151D R7 = значение по адресу (PC + 0)=[0xEED91770]= 0x10C3151D

3847      BX R7 переход по адресу в R7.

Как я понимаю регистру R7 присваивается значение регистра PC, а потом осуществляется переход по

этому адресу.

Но мне нужно регистру R7 присвоить значение адреса 0x101119E68. Я так понимаю мне нужна команда

ассемблера, чтобы было: R7 = значение по адресу (PC - ?)=[0x????????]= 0x101119E68.

Как эта команда называется (если она есть)?

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

Подскажите пожалуйста зчто отвечает адрес в прошивке X100XEDG1 - 00096DB0!

И как найти экваволент этого адреса в пошивке X460CBEB1 !

Mot C350=>X100=>X100=>X460+X640

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

Как я понимаю регистру R7 присваивается значение регистра PC, а потом осуществляется переход по  этому адресу.
правильно понимаешь, команда та же LDR, обрати внимание на адрес EED91770 - там непосредственно адрес 10C3151D. Так вот команда LDR - просто грузит в регистр его значение.... но со смещением кратным 4-м байтам, поймать можно перебором

004F - обращение к тек.адрес + 4 байта

014F - обращение к тек.адрес + 8 байт

024F - обращение к тек.адрес + 12 байт

и т.д. меняя первый байт пока не поймаешь :lol:

я думаю очевидно, что и свой адрес 0x101119E68, ты должен размещать кратно 4 байтам. Попробуй в BinEdite в редакторе патче поэксперементировать, правя адрес в коде и глядя на мнемонику команды... BinEdit подскажет!

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

Но мне нужно регистру R7 присвоить значение адреса 0x101119E68
ты опечатался? адрес и емкость регистров 4 байта!

 

Ustin, как я делаю. я гружу прошивку с символьной информацией, для g1 - она неполная, а вот WK - для х100 - там SYM оригинальный, и ищу аналогичный код сначала там, разбираюсь чего он собственно выполняет и по аналогии делаю для своей прошивки (е630) если на твой тел. нет никакой символьной инфы... подбирай прошивки максимально схожие, можно попробовать перегнать символы на свою... а там уже сопоставляй. Принцип - ищешь аналогичную функцию которую затрагивает патч (если есть символы - по названию) и аналогично воспроизводишь.

вот кстати есть для твоего тела оригинальный сум http://firmware.javer.sgh.ru/?frm=X460XEEB1&t=4

Ковыряю e630 :)

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

Хацкер, Ну для начала сум файлы у меня есть для обоих из этих прошивок!

А вот прошивка на которую надо перевести адрес X460CBEB1!

Mot C350=>X100=>X100=>X460+X640

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

Ustin, тебе итак крупно повезло! А ты еще перебираешь ;-)

Довольствуйся тем что есть ведь эти прошивки на 99,9% одинаковые. Можешь попробовать перегнать символы на свою - вся инфа в хелпах

Ковыряю e630 :)

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

Хацкер,

Спасибо, я понял с адресами! А вот что делать, если:

Например, В патче "Батарейка на 16 делений" (в прочем и в других патчах это встречается):

есть, например, код 102B4FBC: 0F4D LDR R5, =gv_InCharge,

как я понимаю в регистр R5 загружается адрес переменной(?) и для другой прошивки можно найти

эквивалентную переменную(?) при портировании патча,

а вот как быть если

102B4FD4: 0B48 LDR R0, =0x000081AF

Почему это значение 0x000081AF и для другой прошивки это же будет значение?

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

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

E630XEDK2 + Nokia N72+1Gb

Всё, что нас не убивает, то нас делает сильней! (Е. Летов)

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

CTAPbIY,

В том то и дело, что это не совсем адрес в прошивке (как я понимаю), а адрес хранения какой-то переменной (может я и не прав), но, например, в другом патче есть, например, адрес 0х18....., но такого адреса нет, прошивка закончилась давно! Вот я и хочу узнать, как именно найти этот эквивалентный адрес! А то вот в этом вся загвоздка, уже все патчи просмотрел, но портировать из-за этого не получается, т.к. не совсем понимаю, что с этими адесами! Объясните, пожалуйста, популярно для начинающего!!!

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

Если это даже адрес за пределами прошивки, он всяко разно используется не однократно. ищи где еще он используется, потом ищи эквивалент и т.д...

E630XEDK2 + Nokia N72+1Gb

Всё, что нас не убивает, то нас делает сильней! (Е. Летов)

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

Если это даже адрес за пределами прошивки, он всяко разно используется не однократно. ищи где еще он используется, потом ищи эквивалент и т.д...

По подробнее можно, как искать?

  • Like 1

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

но такого адреса нет, прошивка закончилась давно! Вот я и хочу узнать, как именно найти этот эквивалентный адрес!

Когда я начинал ... я тоже был обескуражен тем - что прошивка закончилась и как искать не понятно. Это область оперативки, соответственно в прошивке ее не будет. Но логично предположить что к этой глобальной переменной идет обращение из кода самой прошивки - так?! Значит надо найти в прошивке где идет обращение к ней. Т.е. зная адрес этой гл. переменной (gv_InCharge) надо поискать где она еще используется помимо патча... т.е. найти функцию в которой она используется - а потом... правильно! найти такую же функцию и у себя - и уже в своем коде ты увидишь новый свой адрес для той же переменной!

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

Ковыряю e630 :)

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

Хацкер,

Спасибо огромное! Теперь буду разбираться!

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

Хацкер,

Разобрался, но вот возник вопрос: " Как я могу сам найти место в оперативке под свою переменную?" Ведь, как я понимаю, не обязательно переменную прописывать в эквивалентном месте оперативки, что и в исходном патче?! Можно и в другое свободное место прописать!?

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

EvgeniyZ, Вполне, главное найти место (адрес) который бы не использовался или же использовался, но вместе с твоим кодом не конфликтовал

Здесь надо быть осторожным...

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

На медне ковырял патч на увеличение размера мелодий ММF, мои догадки строятся на том, что там ссылки на стандартный буфер ОП поменяли на другой - большой, т.о. при наличии установленного на телефоне этого патча, можно использовать оперативку от стандартого буфера под мелодии.

 

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

Т.е. к примеру

1.Грузится в регистр R0 адрес переменной - командой LDR

2.Далее грузится значение оперативки по искомому адресу, но уже в регистр R1

3.Т.к. в R0 уже сидит адрес, то можно загрузить еще переменную, адрес которой недалеко.... для этого используется та же команда LDR, только со смещением...

Вот в такуой конструкции автопоиск адресов использования BinEdit'a уже бессилен :( имей ввиду

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

и уж только тогда, когда оптимизатор кода не сможет получить переменную - идет явное указание ее в коде - такая конструкция займет 8 байт (4 - адрес и по 2 на две LDR).

Ковыряю e630 :)

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

Хацкер,

Спасибо, что-то понял, но что-то не совсем, надо разобраться!

Но как определить буфер это или глобальная переменная? Только по объему между адресами этой и следующей сигнатуры?

Глобальные переменные (от 1 до 4-х байт), а как узнать сколько моя байт при портировании патча?

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

Глобальные переменные (от 1 до 4-х байт), а как узнать сколько моя байт при портировании патча?
по командам загрузки или записи

 

Чтение значения памяти / Запись в память

 

Load Register

LDR – Загрузка в регистр т.н. «слова» (word), т.е. значения из 4-х байт, соответственно команда может адресоваться к адресам кратным 4 байтам (берётся 4 байта)

LDRH – Загрузка в регистр т.н. «полуслова» (half word), т.е. значения из 2-х байт, соответственно команда может адресоваться к адресам кратным 2 байтам (берётся 2 байта)

LDRB – Загрузка в регистр 1 байта, может адресоваться с точностью до байта (берётся 1 байт).

 

Store Register

Соответственно аналогичная группа команд STR, STRH, STRB служит для записи значения из регистра в адрес памяти.

 

Если командами загрузки грузить можно значение как из кода самой прошивки, так и значение опертивки, то писать можно только в оперативку - иначе перезагруз :?:

Ковыряю e630 :)

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

Хацкер,

В патче "Батарейка на 16 делений" написано по адресу: 0x102B4FD6

следующая команда ассемблера: BLX ___rt_udiv, где ___rt_udiv для X700XEEK6 равно: 0x10DBD754,

это, как я понимаю, переход на подпрограмму ___rt_udiv, после компиляции получается код:

00F01EE8.Вот и вопрос: Как мне в компиляторе записать команду BLX ___rt_udiv, чтобы получить

такой же код? (А для прошивки X700XEFA1 я уж по аналогии сделаю)

Siemens M35 -> C45 -> Samsung X100 -> X120 -> E300 -> E710 -> X700 -> E200 -> I710 -> D780 -> I9100

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

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

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

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

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

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

Войти

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

Войти



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