sashaqwe 200 Report post Posted January 19, 2013 Можно было просто попросить исходник, а по нему уже разбираться. Если, конечно, ты не решил научиться портировать патчи без исходника... Конечно, там же еще несколько функций внутри вызывается и оперативка читается. Адреса все другие будут.Спасибо. Так все таки как дизассемблировать патч - применить к прошивке потом посмотреть в БинЭдите? результат смотреть на вкладке "код" или "МСС"? или можна както попроще типа того как компилируется патч из исходника? Share this post Link to post Share on other sites
FRAER 5,582 Report post Posted January 19, 2013 проще никак не сделаешь. только так, как я описал 1 Share this post Link to post Share on other sites
sashaqwe 200 Report post Posted January 24, 2013 Дизассемблировал патч "Настройка времени информационных окон" для C5212iXEJH3, вроде разобрался только непонятно1)для чего в патче данный код.start 0x207DA0D8PUSH {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
f2065 8,060 Report post Posted January 24, 2013 1.См. инструкцию по BinEdit. BL-переход сделать на большое расстояние нельзя, но если сделать надо - то BinEdit автоматом делает такую штуку для дальнего перехода.Иначе ты сам должен что-то такое делать вручную (на самом деле BinEdit делает функцию универсально и громоздко - самому можно просто LDR и BX)А в дизассемблере ты можешь не видеть этого перехода кстати - он может автоподменять дальние переходы через BLX, см настройки 3.Это нормально. Устанавливается младший бит - признак перехода в режиме Thumb. См. документации по ARM процессорам и Thumb-режим.Кстати в прошивке есть и функции где нужен ARM-режим - на них делается переход по BLX и там адрес будет неизменным. 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 200 Report post Posted February 1, 2013 (edited) Пробую портировать патч "MP3 Player на карте памяти" на C5212iXEKD1, взял исходник у VVYura для C5212XEIB5, поменял адреса переходов, оперативки, скомпелировал патч, - результат - при запуске с карты памяти МП3 телефон тухнет и ни на что не реагирует. Адреса перепроверил три раза, вроде все нормально, может в чем то другом? по идее должно работать. мой исходник MP3PlayerOnFlash.rar Edited February 1, 2013 by sashaqwe Share this post Link to post Share on other sites
f2065 8,060 Report post Posted February 1, 2013 Адреса перепроверил три раза, вроде все нормально, может в чем то другом? Мне интересно как ты проверял например __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
sashaqwe 200 Report post Posted February 1, 2013 Мне интересно как ты проверял например __my0_5task_Table…Я подумал что так как стоит на пустом месте то можно и поставить в любое пустое место, хотя заметил что в исходнике нигде данный адрес не используется, подумал что я что то недопонимаю. Тогда если можно объясните где используется данный адрес или как? возможно тогда смогу поставить необходимый адрес для своей прошивки. Share this post Link to post Share on other sites
f2065 8,060 Report post Posted February 1, 2013 Это адрес TASK-таблицы мастерпатча. Необходимо сначала портировать мастерпатч. Ксктати команда MCC_TASK 0x18 вызывает функцию через эту таблицу, и на разных прошивках цифры в MCC_TASK будут разные (но у C5212 и C5212i вроде одинаково). 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 200 Report post Posted February 3, 2013 Дизкомпилировал патч "CKeyRevival" прошивки C5212iXEJH3, далее решил проверить на правильность созданного исходника, скомпилировал с него патч; в моем патче в отличие от оригинала добавилось DCD 0x30016D90DCD 0x30469738я так понимаю DCD это типа как в обычном языке программирования объявление константы то есть ячейки памяти оперативки, но почему в первоначальном патче этого нет? наверное я должен знать символьное название этой ячейки и объявить через ".equ", если так то как я смогу узнать эти названия, функций, ..и т.д....Причем в прошивке объявление этих адресов уже есть, почему компилятор не понимает этого?Для данного патча это важно, потому что в двух местах заменяемый код увеличивается на 4 байта и затрагивает в прошивке 2 байта которые нужны.И дайте ссылку на простое описание команд ассемблера, а то в инете нахожу какое то сложное описание Share this post Link to post Share on other sites
f2065 8,060 Report post Posted February 3, 2013 Дизкомпилировал патч "CKeyRevival" прошивки C5212iXEJH3, далее решил проверить на правильность созданного исходника, скомпилировал с него патч; в моем патче в отличие от оригинала добавилось Показывай чего получилось… наверное я должен знать символьное название этой ячейки и объявить через ".equ", если так то как я смогу узнать эти названия, функций, ..и т.д....Смотреть в файлах elf/sym… только для наших прошивок их не добыли. Есть только для прошивки C5212DDIB4, там искать аналогичные функции/места, и смотреть что как называеться… Для данного патча это важно, потому что в двух местах заменяемый код увеличивается на 4 байта и затрагивает в прошивке 2 байта которые нужны.Для некоторых команд (LDR, ADR) критичен align по 4. В зависимости от этого команда может занимать на 2 байта больше… Если это недопустимо - то надо думать над способами оптимизации этого. Может там B-переход поставить например… И дайте ссылку на простое описание команд ассемблера, а то в инете нахожу какое то сложное описаниеНапример вот - патчи в основном пишутся под ARM7TDMI в режиме THUMB. Впрочем знать режим ARM тоже надо. 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 200 Report post Posted February 3, 2013 В прошивке объявление этих адресов ведь уже есть, можна в ручную из патча поудалять их? тем самым уменьшить код. Дизкомпелированный исходник и созданный из него патчCKeyRevival.rar Share this post Link to post Share on other sites
sashaqwe 200 Report post Posted February 4, 2013 Если это недопустимо - то надо думать над способами оптимизации этого. Может там B-переход поставить например… В моем случае не получается заменить на В, так как я не досмотрел в исходнике еще один адрес через BX, а он оказался дальний и в патч еще добавило две команды для перехода, то есть еще 4 байта, как голову не ламал ни чего не придумал. CKeyRevival.rarисходник для C5212iXEKD1 Share this post Link to post Share on other sites
f2065 8,060 Report post Posted February 4, 2013 Ну как-то так получается: .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 ; размещение использованных адресов ; надо смотреть чтобы не затереть нужный код после трассировки ;---------------------------------- 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 200 Report post Posted February 4, 2013 Спасибо за помощь и описание исходника. Нужный код после трассировки не затерает. Проверил на телефоне все работает. Можешь выкладывать в соответствующей ветке.скомпилированный патч CKeyRevival.rar Share this post Link to post Share on other sites
sashaqwe 200 Report post Posted February 7, 2013 1.Просмотрел еще раз исходник MP3PlayerOnFlash. Непонятно как вызывается MP3_ON_FLASH_TASK, в исходнике перехода на данную подпрограмму(MP3_ON_FLASH_TASK) нет, только в зарезервированной памяти под Мастер патч прописан ее адрес(DCD MP3_ON_FLASH_TASK+1), но ссылки кроме этой на Мастер патч нет. Можете в кратце объяснить взаимодействие MP3PlayerOnFlash с Мастер патчем и как вызывается MP3_ON_FLASH_TASK?исходник MP3PlayerOnFlash_C5212iXEKD1.rar2.Взял карту прошивки C5212iXEJH3 по удалял все ресурсы заменил в начале на C5212iXEKD1 и на размер своей прошивки. При открытии ресманом своей прошивки он предлагает чтоб карту прошивки(мною созданную) я выбрал из списка. Что там не так что он ее не определяет автоматом? В принципе работает но хотелось чтоб было так как надо.карта прошивки C5212iXEKD1.rar3.Что за память увеличивает патч Java Heap Size? я всегда думал что то типа оперативки(используемую память во время работы), но при портировании его мне показалось что не так, да и игрушка need_for_speed_undercover все равно не запустилась. Мой переводчик говорит что - свалка.исходник Java_Heap_Size.rar Share this post Link to post Share on other sites
f2065 8,060 Report post Posted February 7, 2013 sashaqwe1.Функция вызывается через MCC_TASK 0x18 2 00x18 вызывает мастерпатч, который делает так:PUSH {R4-R7,LR}SUB SP, SP, #0x100MOV R4, R0 ; указатель на строку MCCMOV R6, 0 ; это просто для оптимизации патчей, 0 и 1 готовыеMOV R7, 1LDRH R0, [R4, 2] ; это 2 аргумент в TASKLDR R1, =__my0_5task_TableLSL R0, R0, 2LDR R0, [R0, R1] ; а там адрес твоей функции будетBX R0 2.должно быть так генерировать чистую карту не по подобию, и пустую… 3.проверь в MiniCommander - он показывает размер ОЗУ, должно стать 1.9 или 2.0, вместо 1.4 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 200 Report post Posted February 7, 2013 sashaqwe1.Функция вызывается через MCC_TASK 0x18 2 00x18 вызывает мастерпатч... Для чего через Мастер патч вызывать MP3_ON_FLASH_TASK? поставить обычный MCC переход. Или если мы вставили свой адрес(DCD MCC_MP3_ON_FLASH_PLAY) вместо адреса МСС функции которая раньше запускала Мр3 то должна и быть такая же МСС функция? или...? Share this post Link to post Share on other sites
f2065 8,060 Report post Posted February 7, 2013 Для чего через Мастер патч вызывать MP3_ON_FLASH_TASK? для формирования плейлиста для плеера. поставить обычный MCC переход. так нет в мобиле MCC-функции которая бы строила плейлист по каталогу. см. патч на B5722, там есть немного коментариев в исходнике 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 200 Report post Posted February 7, 2013 я имел ввиду поставить обычный MCC переход на адрес MP3_ON_FLASH_TASK которая находится в патче, то есть вызывать ее не через Мастер патч, а на прямую МСС переходом на ее адрес Если я правильно понимаю Мастер патч нужен для того чтоб данную функцию(MP3_ON_FLASH_TASK) или другую какую то потом использовать в других патчах Share this post Link to post Share on other sites
f2065 8,060 Report post Posted February 7, 2013 MCC - это скрипты, и напрямую она переходит только на другие такие же скрипты.Для вызова ассемблерного кода - надо сначала создать соответствующую функцию (это и делается при помощи мастерпатча). вот кстати про них написано - http://OldPh.one/index.php?showtopic=45200 1 Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com Share this post Link to post Share on other sites
road day 0 Report post Posted March 1, 2015 Я не мог найти смещение0x90A5F6 и 0x94FDCC (C3322XXNA1) C3322XWLG1 прошивки портирована theme_Name_Fix_v22 Share this post Link to post Share on other sites
SantaX 2,417 Report post Posted March 1, 2015 road day, а ты переходишь на адрес 0x90A8FDCC или 0x94FDCC? не забывай прибавлять к смещению базовый адрес 0x90140000. Обожаю свою жену Анюточку! =) Share this post Link to post Share on other sites
road day 0 Report post Posted January 25 SantaX спасибо теперь я немного понимаю. Share this post Link to post Share on other sites