NetLab · Rules · Torrent Tracker · Have a problem? · Eng/Rus | Help Search Members Gallery Calendar |
Welcome Guest ( Log In | Register | Validation ) | Resend Validation Email |
Pages: (52) < 1 2 3 .. 6 .. 9 .. 12 .. 15 .. 17 18 [19] 20 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 .. 48 .. 51 52 > ( Show unread post ) |
Модифицируем прошивку для DVD плейера (MTK 1389), инструкция от САХ |
|
Posted: 26-01-2006, 23:18
(post 271, #537067)
|
||||
Member Group: Members Posts: 134 Warn:0% |
cax, спасибо на добром слове, но хочу пояснить: я ассемблерный код не пишу. Мне даже страшно подумать, сколько времени заняло бы написать такое на ассемблере, даже если бы я его хорошо знал. Для этих дел люди придумали компайлер - вот его-то я и использую. Я предупреждал что ты будешь разочарован. Насчет кода проверки - постараюсь надурить компайлер так чтобы он изготовил желаемый код, но 10 байт не гарантирую. *********************
В скрипте этого нет, переименовывал вручную. Частью по статье, частью самостоятельно. ********************* Не могу угнаться за твоими постами
Здесь все сложнее. Адрес находится на стэке, у меня не получилось отследить как он туда попал, кажется в виде аргумента. А что у тебя в SUB_ClearMpeg4SubtitleParams? This post has been edited by moroz on 26-01-2006, 23:20 |
||||
|
Posted: 26-01-2006, 23:22
(post 272, #537072)
|
||
Member Group: Members Posts: 134 Warn:0% |
Сколько дать offset_of_menu_choice? |
||
|
Posted: 26-01-2006, 23:23
(post 273, #537073)
|
||
Pro Member Group: Members Posts: 738 Warn:0% |
Я его (SUB_ClearMpeg4SubtitleParams) не нашёл. Не исключено, что у меня его и нет. На всякий случай: в данный момент работа идёт над прошивкой к Apex JDP707 (YPD701D.BIN) offset_of_menu_choice (1 байт) - какой угодно. Я буду его потом менять сам под конкретный плейер. То же касается и загрузки адреса общей памяти - байткод я буду вычислять сам (один байт - расстояние от команды до числа, делённое на 4, второй - код команды загрузки)
Я уже давно догадался, что ты с оптимизациями кросс-компилятора играешься. А для тестирования компилируешь обычным компилятором под свой PC, верно ? This post has been edited by cax on 26-01-2006, 23:34 |
||
|
Posted: 26-01-2006, 23:36
(post 274, #537082)
|
||
Member Group: Members Posts: 134 Warn:0% |
Абсолютно Заняло, кстати, 8 байт. Оптимайзер, однако. 00 B5 00 06 00 0E 2F 28 01 D9 3A 28 0B D3 40 28 01 D9 5B 28 07 D3 60 28 01 D9 7B 28 03 D3 DF 28 03 D9 FB 28 01 D2 01 20 00 E0 00 20 00 BD 00 00 00 B5 88 42 07 D2 02 78 0B 78 03 70 0A 70 01 30 01 39 88 42 F7 D3 00 BD F0 B5 28 4C 00 27 28 4B 9B 7A 01 2B 49 D1 00 E0 01 34 20 78 FF F7 D0 FF 00 28 F9 D0 25 1C 23 78 0D 2B 03 D9 01 35 2B 78 0D 2B FB D8 2B 78 00 2B 02 D1 01 27 00 E0 01 3D 28 78 FF F7 BD FF 00 28 F9 D0 20 1C 29 1C FF F7 CF FF AC 42 22 D8 08 E0 20 78 FF F7 B1 FF 00 28 00 D0 26 1C 01 34 AC 42 08 D8 20 78 80 28 F3 D2 FF F7 A6 FF 00 28 EF D0 00 E0 01 34 AC 42 06 D8 20 78 80 28 F9 D3 FF F7 9B FF 00 28 F5 D0 70 1C 61 1E FF F7 AD FF 01 34 AC 42 E6 D9 2B 78 00 2B 01 D0 00 2F B9 D0 FF F7 85 FF F0 BD 78 56 34 12 |
||
|
Posted: 26-01-2006, 23:47
(post 275, #537087)
|
||
Pro Member Group: Members Posts: 738 Warn:0% |
Эээээ... зря я тебе сказал "любое число"... LDRB R3, [R3,#0xA] - это, конечно, офигительно, но если там будет что-то поболее 0xA, оно точно закодируется 2-мя байтами, или в этом виде адресации есть ограничение на величину офсета ? Пы.Сы. Если не буду долго отвечать - значит уснул и продолжу, скорее всего, через день-два (или более). This post has been edited by cax on 26-01-2006, 23:54 |
||
|
Posted: 27-01-2006, 00:14
(post 276, #537104)
|
||
Member Group: Members Posts: 134 Warn:0% |
Ограничение на длину, конечно, есть. Надеюсь нам хватит. А то придется заплатить еще двумя байтами. Спокойной ночи. This post has been edited by moroz on 27-01-2006, 00:18 |
||
|
Posted: 27-01-2006, 01:46
(post 277, #537153)
|
||
Member Group: Members Posts: 134 Warn:0% |
Aдреса мне найти не удалось. Зато вот такая идея: вот наше любимое место ROM:0000F5C8 LDR R0, [SP,#0x30+var_28] ROM:0000F5CA CMP R0, #0x5C ; '\' ROM:0000F5CC BLS loc_F5D2 ROM:0000F5CE MOV R0, #0x5C ; '\' ROM:0000F5D0 STR R0, [SP,#0x30+var_28] ROM:0000F5D2 ROM:0000F5D2 loc_F5D2 ; CODE XREF: SUB_Mpeg4SubtitleText_Display+7Ej ROM:0000F5D2 LDR R0, [SP,#0x30+var_28] ROM:0000F5D4 MOV R4, #0 ROM:0000F5D6 STRB R4, [R6,R0] ROM:0000F5D8 ADD R0, R6, #0 ROM:0000F5DA BL sub_F442 перед вызовом sub_F442 искомый адрес как раз в нулевом регистре. Вместо нее вызвать мой код, а я перед вызовом sub_F442 позабочусь R0 восстановить. Должно сработать. Только вот не знаю, когда теперь дойдут руки, постараюсь не задерживать. |
||
|
Posted: 27-01-2006, 16:20
(post 278, #537524)
|
||
Member Group: Members Posts: 134 Warn:0% |
Дело все больше запутывается, надеюсь что нигде не напорол. Вызывать вместо sub_F442 Максимальный offset_of_menu_choice - 0x1F. Если больше - добавляется двухбайтная команда. 00 B5 00 06 00 0E 2F 28 01 D9 3A 28 0B D3 40 28 01 D9 5B 28 07 D3 60 28 01 D9 7B 28 03 D3 DF 28 03 D9 FB 28 01 D2 01 20 00 E0 00 20 00 BD 00 00 00 B5 88 42 07 D2 02 78 0B 78 03 70 0A 70 01 30 01 39 88 42 F7 D3 00 BD F0 B5 47 46 80 B4 07 1C 84 1C 00 23 98 46 2A 4B 1B 68 DB 7F 01 2B 4C D1 00 E0 01 34 20 78 FF F7 CB FF 00 28 F9 D0 25 1C 23 78 0D 2B 03 D9 01 35 2B 78 0D 2B FB D8 2B 78 00 2B 03 D1 01 23 98 46 00 E0 01 3D 28 78 FF F7 B7 FF 00 28 F9 D0 20 1C 29 1C FF F7 C9 FF AC 42 22 D8 08 E0 20 78 FF F7 AB FF 00 28 00 D0 26 1C 01 34 AC 42 08 D8 20 78 80 28 F3 D2 FF F7 A0 FF 00 28 EF D0 00 E0 01 34 AC 42 06 D8 20 78 80 28 F9 D3 FF F7 95 FF 00 28 F5 D0 70 1C 61 1E FF F7 A7 FF 01 34 AC 42 E6 D9 2B 78 00 2B 02 D0 43 46 00 2B B7 D0 38 1C FF F7 81 FF 08 BC 98 46 F0 BD |
||
|
Posted: 28-01-2006, 18:00
(post 279, #538140)
|
||
Pro Member Group: Members Posts: 738 Warn:0% |
Запутывается - не то слово. Первый запуск оказался неудачным. Никакой кабель не понадобился - ведь зависает оно только при попытке показа субтитров, но сдаётся мне, что мы не можем вызывать подпрограмму sub_F442 сами, ибо где-то внутри неё идёт работа со стеком, а мы его подвинули своим PUSH-ем. Давай попробуем ещё разок, но на этот раз: 1) пусть вместо sub_F442 мы затрём идущие перед ним команды F5D6 34 54 STRB R4, [R6,R0] F5D8 30 1C ADD R0, R6, #0 а при входе в подпрограмму первым делом их выполним, после чего уже можно сделать PUSH {R0-R7,LR} Заодно решится проблема с переходом на заключительный POP {R0-R7,PC} (да, есть такой переход) вместо перехода на продублированную затёртую команду (которые теперь будут идти вначале твоего кода) 2) Будь добр, сделай проверку меню на 2 байта длиннее, но чтобы я мог подставить любой байт, а не только до 0x1F Заранее благодарю. |
||
|
Posted: 28-01-2006, 20:13
(post 280, #538210)
|
||
Member Group: Members Posts: 134 Warn:0% |
Исключено. Любая функция работает со стеком в двух случаях: 1. Она сама туда "пушнула" (наш случай) 2. Вызывающая функция сунула туда свои аргументы - не наш случай, т.к. перед вызовом sub_F442 пушей нет. Таким образом, работа со стеком локализована в пределах каждой функции. Баг состоит в другом, сейчас я это заметил. sub_F442 возвращает значение в R0, а я его бесстыдно затираю своим. Виноват, исправлюсь. |
||
|
Posted: 28-01-2006, 20:26
(post 281, #538217)
|
||
Pro Member Group: Members Posts: 738 Warn:0% |
И всё же, сделай, пожалуйста, как я попросил - 2 команды вначале (даже если мне померещилось, что в недрах вызова подпрограммы идёт снятие значений со стека с индексом, и что выход реализован не совсем корректно) This post has been edited by cax on 28-01-2006, 20:45 |
||
|
Posted: 28-01-2006, 21:09
(post 282, #538253)
|
||
Member Group: Members Posts: 134 Warn:0% |
Не могу. Компайлер ведь делает пуш самостоятельно, первым делом при входе в функцию. Давай я все-таки сначала починю баг, а? |
||
|
Posted: 28-01-2006, 22:05
(post 283, #538309)
|
||
Pro Member Group: Members Posts: 738 Warn:0% |
Как скажешь. |
||
|
Posted: 28-01-2006, 22:51
(post 284, #538342)
|
||
Member Group: Members Posts: 134 Warn:0% |
Попутно нашел еще один баг - при неподходящем значении меню выход происходил без вызова рутины. Может в этом было дело? 00 B5 00 06 00 0E 2F 28 01 D9 3A 28 0B D3 40 28 01 D9 5B 28 07 D3 60 28 01 D9 7B 28 03 D3 DF 28 03 D9 FB 28 01 D2 01 20 00 E0 00 20 00 BD 00 00 00 B5 88 42 07 D2 02 78 0B 78 03 70 0A 70 01 30 01 39 88 42 F7 D3 00 BD F0 B5 47 46 80 B4 80 46 04 1C 00 27 29 4B 1B 68 FF 33 1B 78 01 2B 47 D1 00 E0 01 34 20 78 FF F7 CB FF 00 28 F9 D0 25 1C 23 78 0D 2B 03 D9 01 35 2B 78 0D 2B FB D8 2B 78 00 2B 02 D1 01 27 00 E0 01 3D 28 78 FF F7 B8 FF 00 28 F9 D0 20 1C 29 1C FF F7 CA FF AC 42 22 D8 08 E0 20 78 FF F7 AC FF 00 28 00 D0 26 1C 01 34 AC 42 08 D8 20 78 80 28 F3 D2 FF F7 A1 FF 00 28 EF D0 00 E0 01 34 AC 42 06 D8 20 78 80 28 F9 D3 FF F7 96 FF 00 28 F5 D0 70 1C 61 1E FF F7 A8 FF 01 34 AC 42 E6 D9 2B 78 00 2B 01 D0 00 2F B9 D0 40 46 FF F7 83 FF 08 BC 98 46 F0 BD This post has been edited by moroz on 29-01-2006, 14:43 |
||
|
Posted: 30-01-2006, 04:24
(post 285, #539176)
|
||
Newbie Group: Members Posts: 31 Warn:0% |
Доброго времени суток. Я думаю что многим здесь на этой ветке это уже не интересно или не актуально но тем не менее... Несколько дней мучаюсь со своим плеером. Но русский он не показывает. Может, откликнется добрая душа и укажет где я ошибся. Пользовался материалом из этой ветки 2) ищем "41 18 10 39 C9 7B" (должен найтись 2 раза !) ---> В моем случае (254AE И 254Е2) и запоминаем адреса, где находится каждый "10 39 C9 7B" (позже мы будем менять каждый "10 39 C9 7B" на другие 4 байта). 3) ищем т.н. "сообщения С++ об ошибках" ---> В моем случае (29280), Искать нужно ТЕКСТОМ, и ты найдёшь примерно такие фразы: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Я запустил BCalc и сделал расчёты для тебя. 23В72: замени 10 39 C9 7B на 04 F0 31 F8 ---> В моем случае: 254AE: 10 39 C9 7B на 03 F0 E7 FE 23ВА6: замени 10 39 C9 7B на 04 F0 17 F8 ---> В моем случае: 254Е2: 10 39 C9 7B на 03 F0 CD FE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Вставил это по адресу 29280 10 39 01 B4 88 7B 04 28 C8 7B 10 D1 08 7C 04 28 C8 7B 03 D0 08 7C 00 28 C8 7B 08 D1 01 28 01 D1 A7 30 04 E0 51 28 01 D1 67 30 00 E0 B0 30 01 E0 00 00 00 00 F9 28 00 D9 F5 38 01 1C 01 BC 70 47 Дальше у меня не сходится с этим примером. У меня в родной прошивке 15 фонтов. Если я понял правилно то самый первый отвечает за OSD и замена его приводит к не правилному отображению OSD. В место пробела у меня появилось это -> @ После вышеуказаных процедур вместо русского одни "_" До были теже пробелы только в перемешку с цифрами. Могу сказать одно, ivani4-у сильно повезло с Маэстро На моем фтп есть оригинальная прошивка. ~ 2mb. (Слил через кабель). Она не поддерживает русский OSD и не отображает название русских имен файлов хотя в одном из фонтов я четко видел русские буквы. (Смотрел через remaker). Если интересно, то милости просим на мой фтп kisav.homeftp.net (\LG 511\Original\original_serial.bin) ftpuser/ftpuser |
||
Pages: (52) < 1 2 3 .. 6 .. 9 .. 12 .. 15 .. 17 18 [19] 20 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 .. 48 .. 51 52 > |