FAQ. Наиболее легкий способ портирования функций : Эльфостроение : Форум

Страница 5 из 16: « 1 2 3 4 [5] 6 7 8 9 ... 16 »

 DarkDarin:
26.09.08, 17:12
 Oganyan-Arthur писал:
И нафиг нужны ваши эти 7 байт!

в принципе понятно, что не обязательно надо искать 7 байт. Тут попытался сам разобраться и пришел к такому методу:
1. ищем n-количество байт в нужной прошивке
2. если результат отрицательный, убираем 1-2 байта с конца, и повторяем поиск. Так, пока не будет найдено
3. проверяем, одно значение найдено или нет. если одно - то вот она родимая функция (то есть ее offset)
4. если несколько, то начинаю искать уже предыдущие байты (чтоб найти как можно более похожий кусок), т.е. в исходной прошивке беру 4-5 (или скока понадобится) байтов СЛЕВА от исходного и начинаю искать в нужной прошивке.
5. при этом если не нашел, то убираю из поиска один байт слева.
6. когда найду нужный кусок (после таких манипуляций он обычно один), беру адрес байта, с которого надо было начинать поиск.
Пример:
Искомая прошивка
*** C7 F8 29 1C 4D F1 7E FC 01 20 26 34 20 70 30 BD 30 B5 04 1C 0D 1C FF F7 51 FF 00 28 04 D1 FF 21 ***
Жирным выделен необходимый адрес
Начинаю искать строку
B5 04 1C 0D 1C FF F7 51 FF 00 28 04 D1 FF 21
в нужной прошивке. Если результатов нет - убираю байт справа:
B5 04 1C 0D 1C FF F7 51 FF 00 28 04 D1 FF
так, пока не найдет:
B5 04 1C 0D 1C FF
Если инесколько значений, беру для поиска байты слева:
20 26 34 20 70 30 BD 30 B5 04 1C 0D 1C FF
Снова ищу, пока не найдет:
70 30 BD 30 B5 04 1C 0D 1C FF
Смотрю адрес нужного байта (жирный) в нужной прошивке, и далее по факу.

Портировал функции с K750 на W700, нужные для работы BCFGEdit. Если ранее перезагруз или зависания были при выборе любого пункта в конфиге, то сейчас перезагруз только в определенных местах. Значит есть шанс, что часть функций все таки правильно портировал :-)


Добавлено 26.9.08 19:20

в процессе работы встретился со странными функциями
Патч: 
0AEC: FFFFFFFF 582B184C ;82BB: FONT_DESC *GetFontDesc(void);
0AF0: FFFFFFFF 102D184C ;82BC: int *GetFontCount();
что значит 8 перед именем функции? Если перевернуть и вычесть базу, то получившееся значение не может найти в прошивке. Если же у получившегося значения убрать впереди 8, то все нормально. Что это за функции такие?

 Oganyan-Arthur:
26.09.08, 20:56
 zapret007 писал:
короче хз.. больше не буду факами заниматься


Я с тобой целеком и полностью согласен! Пока люди сами не начнут думать логически- У них нифига не получится! Возможно мы делаем ошибку что пишем факи, потомучто сейчас будет столько функций хе..р знает каких...!!!

DarkDarin писал:
что значит 8 перед именем функции?

Я или тупой или ты чего то не понимаеш!!! Или я чего то понять не могу! Ты что название функции ищеш в проше??? или всё таки адресс?!

КОРОЧЕ Вот Вам ФАК со скринами! В моём исполнении! Может теперь дойдёт- Очень надеюсь!

FAQ лёгкий способ портирование функций со скриншотами.

Пример:

Портируем функцию:

0C00: FFFFFFFF 99803045 ; 300: int Disp_GetStrIdWidth(STRID , int len);

От W810i на W300i . У обоих прошивка R4EA031

1) Вставив значение "99803045" в програмку переворот и получаем адрес "11C8099"

2) Ищем адрес "11C8099" в WinHex в прошивке от W810! Для этого нажимаем на кнопку (рис1)
выходит окошко куда вставляем "11C8099" и нажимаем ОК. (рис2)

3)И так мы нашли значение "B5" в прошивке от W810. Теперь нам надо найти ближайшую строчку
ниже или выше значения из 16 байт в которой не должно содержаться значения "F" . В моём
случае эта строчка "00 0E 28 18 00 04 00 0C 30 BD 00 00 30 B5 0D 1C" в ней как видите не содержится буквы "F".
Выделяем все 16-ть байт и нажимаем на клавиатуре комбинацию Shift+Ctrl+C для копирования этих 16-ти байт в буфер.
P/S: Иногда бывает что ближайшей строчки не содеращей буквы "F" нет рядом- не пугайтесь она всё равно будет віше или ниже-ищите.

4) Теперь переходим на вкладку прошивки от w300i и нажимаем на кнопку (рис.4) Выходит
окошко куда вставляем наши 16-ть байт из буфера и нажимаем ОК.(рис.5).


5)И так мы нашли значение "00" теперь давайте выдели полностью 16-ть байт начиная с найденного значения "00".
И так мы получили "00 0E 28 18 00 04 00 0C 30 BD 00 00 30 B5 0D 1C" (не странно ли? в пункте 3 мы это уже видели в проше от W810, но давайте не спешить)

а) Возвращаемся на вкладку прошивки от W810 и снова нажимаем на кнопочку "ГО ТУ ОВСЕТТ" - сново видим наше значение "B5".

б) Теперь давайте посчитаем от выделенной строчки "00 0E 28 18 00 04 00 0C 30 BD 00 00 30 B5 0D 1C" в низ на ШЕСТОЙ строке наше значение "B5" (рис.3)

в) Возвращаемся на вкладку прошивки от W300 и отсчитываем от найденной строчки "00 0E 28 18 00 04 00 0C 30 BD 00 00 30 B5 0D 1C" в НИЗ как и (в пункте б) ) на ШЕСТЬ строк
и на шестой строчке мы увидем наше найденное значени "B5" (рис.6) Ниже вы можите увидеть адрес Offset 1150465 .Этот адрес вписываем в программку переворот и добовляем базу-потом переворачиваем и адрес найден! Для проверки можите сравнить строчку найденную в прошивке W300 c W810, но
опять же как говорилось ранее все 16-ть байт могут и не свпасть, но ближайшие должны совпать обязательно!!!


Ну вот и всё, конечно буду как всегда вопросы- хотя вроди бы постарался объяснить по крестиянски-обычно и просто на доступном языке.

Прикрепленный к сообщению файл:

FAQ_legkii_sposob_portirovanie_fynkcii_so_skrinshotami.zip FAQ_legkii_sposob_portirovanie_fynkcii_so_skrinshotami.zip (630.05 kb; 60 hits) Скачать файл

 zapret:
26.09.08, 23:11
 Oganyan-Arthur, да создавай уже свою тему..

 Crong:
27.09.08, 00:33
 BinEdit-ом проще...

 Oganyan-Arthur:
27.09.08, 00:39
 zapret007 писал:
да создавай уже свою тему..

Да ну куда уже и так две есть... :-) Если ещё и третью тему создать так вообще люди с ума сойдут и не поймут вообще нифига.! :-)


Вот бы ещё надо сделать Фак по тонкостям портирования с ДБ 2020 на 2010!!!

 agregat:
27.09.08, 02:13
 с какого телефона могу портануть функции на w710 R1JC002 CID52??? нужно что бы оффсет был у них одинаковый?

[ Редактировано agregat в 27.9.08 01:16 ]

 Alhimick:
27.09.08, 03:12
 agregat, учитывая слова знающего товарища
Oganyan-Arthur писал:
Вот бы ещё надо сделать Фак по тонкостям портирования с ДБ 2020 на 2010!!!

я бы даже сказал, что лучше портировать с той же платформы, что и у тебя (db2020)

 agregat:
27.09.08, 07:29
 Alhimick, ну это понятно что своя платформа ближе к телу... конкретно модель сид и прошивка значения не имеют?

 E1kolyan:
27.09.08, 08:00
 agregat, Цид значения не имеет

 agregat:
28.09.08, 01:35
 E1kolyan писал:
Цид значения не имеет

а по какому критерию подбирается модель тела и прошивка??? :-?


Добавлено 28.9.08 11:47

ПОРТИРОВАЛ!!! от w610 R6BC002 на свой w710 R1JC002...
портировал Идой. 12 функций... BcfgEdit_main заработал

как портировать функции???(из либа w610 ) :
0AEC: 00000000 94901820 ;82BB: FONT_DESC *GetFontDesc(void);
0AF0: 00000000 28931820 ;82BC: int *GetFontCount();

тут какая то беда с адресами :cry:

:cry: :cry:

[ Редактировано agregat в 28.9.08 12:23 ]
Страница 5 из 16: « 1 2 3 4 [5] 6 7 8 9 ... 16 »

URL этой темы:
https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=3383&start=40

© 2005-2018 supertrubka.org