FAQ. Наиболее легкий способ портирования функций : Эльфостроение : Форум |
Страница 13 из 16: « 1 ... 9 10 11 12 [13] 14 15 16 » |
UltraShot: |
21.06.09, 12:00 |
Oganyan-Arthur, в "портировании констант" глянь |
zapret: |
21.06.09, 13:42 |
den_po, а.. ну нормально.. инструкции год уже почти, а он только прочитал) так держать |
den_po: |
21.06.09, 14:17 |
zapret007, ну а моему варианту почти три года. сравни их |
zapret: |
21.06.09, 14:35 |
ну да, похожи могу грохнуть этот а то надоели с вопросами |
Oganyan-Arthur: |
21.06.09, 15:34 |
zapret007, а то с той инструкцией вопросов меньше.... Пусть уже живёт. |
zapret: |
21.06.09, 15:39 |
да я шутя |
MaxxxS: |
26.06.09, 23:03 |
Портирование фунок с помощью плагина для IDA page/sub finder. Данный метод хорошо использовать для межплатформенного порта. Если вы впервые пользуетесь этой программой, то необходимо скачать несколько дополнений: - ida_babeldr от - pagesub от Den_po. положить в \%ваша папка%\IDA\plugins\ Итак, приступим. Открываем прошивку в IDA, в поле тип файла выбираем SonyEricsson firmware file (babeldr.ldw). В поле Processor type выбираем ARM processors:-> OK -> Yes Hастраиваем далее: Options -> General -> IDA Options во вкладке Dissasembly в разделе Display disassembly line parts необходимо поставить галочку "Auto comments" и поставить в поле Number of opcode bytes 4. Далее Options -> general -> analysis -> processor specific analysis options -> disable pionter referencing, ставим туда галку, и нажимаем кнопку: Options -> general -> analysis -> reanalyze program теперь ида не будет скрывать хрефы. Теперь запускаем плагин: Edit -> Plugins -> sub/page finder Некоторое время придётся подождать (от 5 до 10 минут, в зависимости от платформы телефона, прошивку которого вы открываете и мощности компьютера) То же самое проделываем с прошивкой на которую портируем. Приготовления окончены, теперь, собственно, сам процесс портирования: Рассмотрим простенький порт функции 366: int IrDa_GetState(char *state); с K810 SW-R8BA024 на W810 SW-R4EA031. Берём функу для K810 Патч: 0D98: 00000000 E5693E45 ; 366: int IrDa_GetState(char *state); переворачиваем её - должно получиться 453E69E5, В программе нажимаем G и переходим по этому адресу. мы должны увидеть Код: ROM:453E69E4 ROM:453E69E4 sub_453E69E4 ; CODE XREF: sub_44EF0884+2j ROM:453E69E4 ; sub_453E7A84+F2p ROM:453E69E4 ; DATA XREF: ... ROM:453E69E4 00 B5 PUSH {LR} ; Push registers ROM:453E69E6 01 22 MOVS R2, #1 ; Rd = Op2 ROM:453E69E8 01 1C ADDS R1, R0, #0 ; Rd = Op1 + Op2 ROM:453E69EA EE 20 MOVS R0, #0xEE ; Rd = Op2 ROM:453E69FC 19 F5 B8 FD BL sub_45100570 ; Branch with Link Если нет, то поднимаемся на один байт вверх, нажимаем С, не забыв при этом указать, что нам нужен Thumb-режим (для этого нажимаем Alt+G и выбираем 1). Получилась наша функа. Эти циферки мало что говорят человеку не занимающемуся программированием. Так что будем искать что-то более осмысленное. Теперь переходим в графический режим: нажимаем на кнопку со структурой или пробел. Наверху блок-схемы 3 кнопки: нам нужна кнопка с черными стрелочками "Jump to xref" Нажимаем её и видим окошко с 3-мя адресами. Переходим по первой строчке на адрес 44EF0884, повторяем процедуру, переходим дальше. Видим что теперь что переход осуществляется в более менее осмысленную функцию pg_ObEx_IR_AlignDevices. Если интересно, то можно нажать на кнопку ещё раз. Там будет ивент. Мы пришли к самому началу. Теперь берём и копируем название pg_ObEx_IR_AlignDevices, переходим в окошко с прошивкой от W810, нажимаем Alt+T вставляем наш текст -> ставим галку на Find all occurences -> OK. После продолжительного ожидания появляется окошко, где мы видим все строки, что содержат данные слова. Из них функций всего 3. Просматриваем их и видим, что больше всего похожа на функцию от K810 та, что находится по адресу 44FD373C. Теперь смотрим куда идти дальше: в прошивке К810 нажимаем кнопки назад (Esc) вперёд (Ctrl+Enter) видим выделенную жёлтым sub_44EF0884. Она находится в третьем блоке снизу и второй вызов снизу (или говоря проще второй BL sub_xxxxxxxx). Смотрим то же место в прошивке W810. Нашли строчку Код: ROM:44FD3794 01 F0 14 FB BL sub_44FD4DC0 ; Branch with Link кликаем по ссылке и переходим по ней вперёд. Далее кликаем на off_44FD4DC4 и на sub_45535C3C+1.Вот мы и пришли к нашей искомой функе! Код: ROM:45535C3C sub_45535C3C ; CODE XREF: sub_44FD4DC0+2j ROM:45535C3C ; pg_IR_AutoOffTimerExpired__PAGE_EXIT_EVENT+Ep ROM:45535C3C ; DATA XREF: ... ROM:45535C3C 00 B5 PUSH {LR} ; Push registers ROM:45535C3E 01 22 MOVS R2, #1 ; Rd = Op2 ROM:45535C40 01 1C ADDS R1, R0, #0 ; Rd = Op1 + Op2 ROM:45535C42 EE 20 MOVS R0, #0xEE ; Rd = Op2 ROM:45535C44 20 F0 76 F9 BL sub_45555F34 ; Branch with Link Структура немного не совпадает - это из-за разности платформ. Но для большей уверенности что мы нашли правильно, кликаем на sub_45555F34 и идём вперёд до адреса 450973CC. В прошивке от K810 делаем то же самое. Видим что по адресу 4510061C для К810 и 450973CC для W810 одинаковые функи, значит мы всё нашли правильно. Теперь остаётся записать её в либу. Берём наш адрес 45535C3C, прибавляем к нему 1 получается 45535C3D, переворачиваем 3D5C5345. получилось Патч: ;W810 SW-R4EA031 ;(c) Hussein , IronMaster ;(p) %username% 0D98: FFFFFFFF 3D5C5345 ; 366: int IrDa_GetState(char *state); Теперь устанавливаем функу в телефон и окончательно проверяем работоспособность. Напоследок могу сказать что xref-ов может быть много и не всегда так быстро можно найти что-то осмысленное, также некоторые функции могут по другому называться. Так что наберитесь терпения... Опыт приходит со временем. Надеюсь теперь запросов по портированию будет меньше. Успехов! PS: Выражаю огромную благодарность den-po, UltraShot, Random, awg, MysticBeast и остальным за то что научили этой мудрёной науке добрыми советами и посылами в нужные темы [ Редактировано MaxxxS в 27.6.09 02:19 ] |
Oganyan-Arthur: |
26.06.09, 23:38 |
Интересно и много фунок Ты Портанул с 2020 на 2010 ? |
den_po: |
26.06.09, 23:52 |
MaxxxS пишет: если открывать мэйн от А1, то можно вообще ничего не выбирать. для того idababeldr и делался. открываешь файл, в диалоге тупо жмёшь enter и всё.Итак, приступим. Открываем прошивку в IDA, в поле тип файла выбираем SonyEricsson firmware file (babeldr.ldw). В поле Processor type выбираем ARM processors:-> OK -> Yes Hастраиваем далее: Options -> General -> IDA Options во вкладке Dissasembly в разделе Display disassembly line parts необходимо поставить галочку "Auto comments" и поставить в поле Number of opcode bytes 4. на вкус и цвет, но...лишние комментарии отвлекают, за ними нужных коментов не увидишь. и отображение хекса в дизасме лучше включать только при необходимости. но это мои предпочтения Далее Options -> general -> analysis -> processor specific analysis options -> disable pionter referencing, ставим туда галку, и нажимаем кнопку: Options -> general -> analysis -> reanalyze program ида и так не скрывает. если тебе удобней видеть команды вроде LDR Rx,ADDRESS вместо LDR Rx,=#число, то галку лучше поставить. мне же удобней видеть число теперь ида не будет скрывать хрефы. То же самое проделываем с прошивкой на которую портируем. ты ещё забыл про константы http://supertrubka.org/newbb_plus/viewtopic.php?topic_id=3171&post_id=131797#131797 Напоследок могу сказать что xref-ов может быть много и не всегда так быстро можно найти что-то осмысленное, я графический режим практически не использую. проще перейти в настройки, там на закладке cross references число отображаемых хрефов можно увеличить. ну и в дизасме по хрефам щёлкаю.в целом одобряю, примеры это хорошо Slawwan про константы писал менее понятно (не, ну я-то понимаю ) Добавлено 26.6.09 23:54 эммм... |
Zormax: |
29.06.09, 12:16 |
HxDen прикрепил к первому посту. |
Страница 13 из 16: « 1 ... 9 10 11 12 [13] 14 15 16 » |
URL этой темы: https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=3383&start=120 © 2005-2018 supertrubka.org |