Pages: (52) 1 2 3 .. 6 .. 9 .. 12 .. 15 .. 18 .. 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 46 47 [48] 49 50 51 52  ( Show unread post )

> Модифицируем прошивку для DVD плейера (MTK 1389), инструкция от САХ
 Rvs Member is Offline
 Posted: 26-04-2007, 16:40 (post 706, #742414)

Member

Group: Members
Posts: 126
Warn:0%-----
cax
Я все исправления вносил в Bank1. Первым делом надо найти процедуру по старому DIR_GetPosition по новому wFlGetItemIdx. Её сигнатура есть в файле MT1389_FileBrowser.idc, скрипт её и находит неплохо. У меня она начинается по адресу 1_DE44. Далее ищем такую последовательность 7F 05 12 DE 44 у меня она встретилась один раз. По адресу 1_E522 это и есть процедура fgFlMnOnIrNext.
CODE
оригинальная
ROM:E522            ; --------------- S U B R O U T I N E ---------------------------------------
ROM:E522
ROM:E522
ROM:E522            fgFlMnOnIrNext:                        ; DATA XREF: ROM:_fgFlMnOnIrNext o
ROM:E522 7F 05                mov  R7, #5
ROM:E524 12 DE 44              lcall DIR_GetPosition_wFlGetItemIdx
ROM:E524
ROM:E527 90 FB 99              mov  DPTR, #XRAM_FB99
ROM:E52A EE                    mov  A, R6
ROM:E52B F0                    movx  @DPTR, A
ROM:E52C A3                    inc  DPTR
ROM:E52D EF                    mov  A, R7
ROM:E52E F0                    movx  @DPTR, A
ROM:E52F 90 FC F3              mov  DPTR, #XRAM_FCF3
ROM:E532 E0                    movx  A, @DPTR
ROM:E533 24 FF                add  A, #0xFF
ROM:E535 FD                    mov  R5, A
ROM:E536 90 FC F2              mov  DPTR, #XRAM_FCF2
ROM:E539 E0                    movx  A, @DPTR
ROM:E53A 34 FF                addc  A, #0xFF
ROM:E53C FC                    mov  R4, A
ROM:E53D C3                    clr  C
ROM:E53E EF                    mov  A, R7
ROM:E53F 9D                    subb  A, R5
ROM:E540 EE                    mov  A, R6
ROM:E541 9C                    subb  A, R4
ROM:E542 50 27                jnc  ROM_E56B
ROM:E542
ROM:E544 12 E4 D7              lcall ROM_E4D7
ROM:E544
ROM:E547 90 FC FD              mov  DPTR, #XRAM_FCFD
ROM:E54A E0                    movx  A, @DPTR
ROM:E54B 54 F8                anl  A, #0xF8
ROM:E54D F0                    movx  @DPTR, A
ROM:E54E 7F 0D                mov  R7, #0xD
ROM:E550 12 F7 DA              lcall ROM_F7DA
ROM:E550
ROM:E553 50 16                jnc  ROM_E56B
ROM:E553
ROM:E555 90 FC F1              mov  DPTR, #XRAM_FCF1
ROM:E558 E0                    movx  A, @DPTR
ROM:E559 FF                    mov  R7, A
ROM:E55A 90 FB 9A              mov  DPTR, #XRAM_FB9A
ROM:E55D E0                    movx  A, @DPTR
ROM:E55E 24 01                add  A, #1
ROM:E560 FD                    mov  R5, A
ROM:E561 90 FB 99              mov  DPTR, #XRAM_FB99
ROM:E564 E0                    movx  A, @DPTR
ROM:E565 34 00                addc  A, #0
ROM:E567 FC                    mov  R4, A
ROM:E568 12 B4 84              lcall ROM_B484
ROM:E568
ROM:E56B
ROM:E56B            ROM_E56B:                              ; CODE XREF: BankSw:119_E522+20 j
ROM:E56B                                                    ; BankSw:119_E522+31 j
ROM:E56B D3                    setb  C
ROM:E56C 22                    ret
ROM:E56C
ROM:E56C            ; END OF FUNCTION CHUNK FOR fgFlMnOnIrNext

Далее в свободном месте пишем процедуру скипа.
CODE
ROM:FF9B            Skip_next:                              ; CODE XREF: fgFlMnOnIrNext j
ROM:FF9B 7F 49                mov  R7, #0x49 ; 'I'
ROM:FF9D 7E 02                mov  R6, #2
ROM:FF9F 12 04 0F              lcall ARM_GetChar                  ; Playback mode
ROM:FF9F
ROM:FFA2 EF                    mov  A, R7
ROM:FFA3 64 01                xrl  A, #1
ROM:FFA5 60 02                jz    ROM_FFA9                        ;SV_STOP
ROM:FFA5
ROM:FFA7 C3                    clr  C
ROM:FFA8 22                    ret
ROM:FFA8
ROM:FFA9            ; ---------------------------------------------------------------------------
ROM:FFA9
ROM:FFA9            ROM_FFA9:                              ; CODE XREF: fgFlMnOnIrNext+1A83 j
ROM:FFA9 7F 05                mov  R7, #5
ROM:FFAB 12 DE 44              lcall DIR_GetPosition_wFlGetItemIdx
ROM:FFAB
ROM:FFAE 02 E5 27              ljmp  ROM_E527                  ; call_org _next_page

Правим исходную, таким образом: в начале процедуры вызываем Skip_next, а в конце процедуры Skip_next делаем прыжок на fgFlMnOnIrNext после вызова DIR_GetPosition_wFlGetItemIdx. В итоге имеем:
CODE
ROM:E522            ; --------------- S U B R O U T I N E ---------------------------------------
ROM:E522
ROM:E522
ROM:E522            fgFlMnOnIrNext:                        ; DATA XREF: ROM:_fgFlMnOnIrNext o
ROM:E522
ROM:E522            ; FUNCTION CHUNK AT ROM:E527 SIZE 00000046 BYTES
ROM:E522            ; FUNCTION CHUNK AT ROM:FF9B SIZE 00000016 BYTES
ROM:E522
ROM:E522 02 FF 9B              ljmp  Skip_next
ROM:E522
ROM:E522            ; End of function fgFlMnOnIrNext
ROM:E522
ROM:E522            ; ---------------------------------------------------------------------------
ROM:E525 DE                    .byte 0xDE ; ¦
ROM:E526 44                    .byte 0x44 ; D
ROM:E527            ; ---------------------------------------------------------------------------
ROM:E527            ; START OF FUNCTION CHUNK FOR fgFlMnOnIrNext
ROM:E527
ROM:E527            ROM_E527:                              ; CODE XREF: fgFlMnOnIrNext+1A8C j
ROM:E527 90 FB 99              mov  DPTR, #XRAM_FB99
ROM:E52A EE                    mov  A, R6
ROM:E52B F0                    movx  @DPTR, A
ROM:E52C A3                    inc  DPTR
ROM:E52D EF                    mov  A, R7
ROM:E52E F0                    movx  @DPTR, A
ROM:E52F 90 FC F3              mov  DPTR, #XRAM_FCF3
ROM:E532 E0                    movx  A, @DPTR
ROM:E533 24 FF                add  A, #0xFF
ROM:E535 FD                    mov  R5, A
ROM:E536 90 FC F2              mov  DPTR, #XRAM_FCF2
ROM:E539 E0                    movx  A, @DPTR
ROM:E53A 34 FF                addc  A, #0xFF
ROM:E53C FC                    mov  R4, A
ROM:E53D C3                    clr  C
ROM:E53E EF                    mov  A, R7
ROM:E53F 9D                    subb  A, R5
ROM:E540 EE                    mov  A, R6
ROM:E541 9C                    subb  A, R4
ROM:E542 50 27                jnc  ROM_E56B
ROM:E542
ROM:E544 12 E4 D7              lcall ROM_E4D7
ROM:E544
ROM:E547 90 FC FD              mov  DPTR, #XRAM_FCFD
ROM:E54A E0                    movx  A, @DPTR
ROM:E54B 54 F8                anl  A, #0xF8
ROM:E54D F0                    movx  @DPTR, A
ROM:E54E 7F 0D                mov  R7, #0xD
ROM:E550 12 F7 DA              lcall ROM_F7DA
ROM:E550
ROM:E553 50 16                jnc  ROM_E56B
ROM:E553
ROM:E555 90 FC F1              mov  DPTR, #XRAM_FCF1
ROM:E558 E0                    movx  A, @DPTR
ROM:E559 FF                    mov  R7, A
ROM:E55A 90 FB 9A              mov  DPTR, #XRAM_FB9A
ROM:E55D E0                    movx  A, @DPTR
ROM:E55E 24 01                add  A, #1
ROM:E560 FD                    mov  R5, A
ROM:E561 90 FB 99              mov  DPTR, #XRAM_FB99
ROM:E564 E0                    movx  A, @DPTR
ROM:E565 34 00                addc  A, #0
ROM:E567 FC                    mov  R4, A
ROM:E568 12 B4 84              lcall ROM_B484
ROM:E568
ROM:E56B
ROM:E56B            ROM_E56B:                              ; CODE XREF: fgFlMnOnIrNext+20 j
ROM:E56B                                                    ; fgFlMnOnIrNext+31 j
ROM:E56B D3                    setb  C
ROM:E56C 22                    ret
ROM:E56C
ROM:E56C            ; END OF FUNCTION CHUNK FOR fgFlMnOnIrNext

Аналогично правим и fgFlMnOnIrPrev только теперь ищем 7F 00 12 DE 44 вот готовые процедуры:
CODE
ROM:ED7A            ; --------------- S U B R O U T I N E ---------------------------------------
ROM:ED7A
ROM:ED7A
ROM:ED7A            fgFlMnOnIrPrev:                        ; DATA XREF: ROM:_fgFlMnOnIrPrev o
ROM:ED7A
ROM:ED7A            ; FUNCTION CHUNK AT ROM:ED7F SIZE 00000039 BYTES
ROM:ED7A            ; FUNCTION CHUNK AT ROM:FFB1 SIZE 00000016 BYTES
ROM:ED7A
ROM:ED7A 02 FF B1              ljmp  Skip_prev
ROM:ED7A
ROM:ED7A            ; End of function fgFlMnOnIrPrev
ROM:ED7A
ROM:ED7A            ; ---------------------------------------------------------------------------
ROM:ED7D DE                    .byte 0xDE ; ¦
ROM:ED7E 44                    .byte 0x44 ; D
ROM:ED7F            ; ---------------------------------------------------------------------------
ROM:ED7F            ; START OF FUNCTION CHUNK FOR fgFlMnOnIrPrev
ROM:ED7F
ROM:ED7F            ROM_ED7F:                              ; CODE XREF: fgFlMnOnIrPrev+124A j
ROM:ED7F 90 FB 99              mov  DPTR, #XRAM_FB99
ROM:ED82 EE                    mov  A, R6
ROM:ED83 F0                    movx  @DPTR, A
ROM:ED84 A3                    inc  DPTR
ROM:ED85 EF                    mov  A, R7
ROM:ED86 F0                    movx  @DPTR, A
ROM:ED87 D3                    setb  C
ROM:ED88 94 05                subb  A, #5
ROM:ED8A EE                    mov  A, R6
ROM:ED8B 94 00                subb  A, #0
ROM:ED8D 40 27                jc    ROM_EDB6
ROM:ED8D
ROM:ED8F 12 E4 D7              lcall ROM_E4D7
ROM:ED8F
ROM:ED92 90 FC FD              mov  DPTR, #XRAM_FCFD
ROM:ED95 E0                    movx  A, @DPTR
ROM:ED96 54 F8                anl  A, #0xF8
ROM:ED98 F0                    movx  @DPTR, A
ROM:ED99 7F 0C                mov  R7, #0xC
ROM:ED9B 12 F7 DA              lcall ROM_F7DA
ROM:ED9B
ROM:ED9E 50 16                jnc  ROM_EDB6
ROM:ED9E
ROM:EDA0 90 FC F1              mov  DPTR, #XRAM_FCF1
ROM:EDA3 E0                    movx  A, @DPTR
ROM:EDA4 FF                    mov  R7, A
ROM:EDA5 90 FB 9A              mov  DPTR, #XRAM_FB9A
ROM:EDA8 E0                    movx  A, @DPTR
ROM:EDA9 24 FA                add  A, #0xFA ; '•'
ROM:EDAB FD                    mov  R5, A
ROM:EDAC 90 FB 99              mov  DPTR, #XRAM_FB99
ROM:EDAF E0                    movx  A, @DPTR
ROM:EDB0 34 FF                addc  A, #0xFF
ROM:EDB2 FC                    mov  R4, A
ROM:EDB3 12 B4 84              lcall ROM_B484
ROM:EDB3
ROM:EDB6
ROM:EDB6            ROM_EDB6:                              ; CODE XREF: fgFlMnOnIrPrev+13 j
ROM:EDB6                                                    ; fgFlMnOnIrPrev+24 j
ROM:EDB6 D3                    setb  C
ROM:EDB7 22                    ret
ROM:EDB7
ROM:EDB7            ; END OF FUNCTION CHUNK FOR fgFlMnOnIrPrev


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

ROM:FFB1            Skip_prev:                              ; CODE XREF: fgFlMnOnIrPrev j
ROM:FFB1 7F 49                mov  R7, #0x49 ; 'I'
ROM:FFB3 7E 02                mov  R6, #2
ROM:FFB5 12 04 0F              lcall ARM_GetChar
ROM:FFB5
ROM:FFB8 EF                    mov  A, R7
ROM:FFB9 64 01                xrl  A, #1
ROM:FFBB 60 02                jz    ROM_FFBF
ROM:FFBB
ROM:FFBD C3                    clr  C
ROM:FFBE 22                    ret
ROM:FFBE
ROM:FFBF            ; ---------------------------------------------------------------------------
ROM:FFBF
ROM:FFBF            ROM_FFBF:                              ; CODE XREF: fgFlMnOnIrPrev+1241 j
ROM:FFBF 7F 00                mov  R7, #0
ROM:FFC1 12 DE 44              lcall DIR_GetPosition_wFlGetItemIdx
ROM:FFC1
ROM:FFC4 02 ED 7F              ljmp  ROM_ED7F

Вроде объяснил :wacko: , если что не понятно спроси!!!

QUOTE
Впрочем, как я понимаю речь пойдёт о прошивках "прошлого поколения"


что значит прошлого?? и с версиями не понял??
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 26-04-2007, 17:03 (post 707, #742421)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
По поводу поколений - объясню. В прошивках с версиями 05.00.04.хх и так далее, скип уже реализован изначально, а самые новые плейеры уже укомплектовывают версией 05.00.07.хх, насколько мне известно.

Поэтому прошивки без скипа (версии 05.00.03.хх и младше) я назвал "прошлым поколением".

За патч - огромное спасибо !
На днях попробую найти время для проверки на Апексе и Юндае и обязательно отчитаюсь.
PM Email Poster
Top Bottom
 Rvs Member is Offline
 Posted: 26-04-2007, 17:21 (post 708, #742433)

Member

Group: Members
Posts: 126
Warn:0%-----
cax

QUOTE
По поводу поколений - объясню

ага, а смотреть надо по Version или 8032, а то у меня вот такая инфа:

Version : 00.00.00.02
Sub :
8032 : 05.00.04.02
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 26-04-2007, 17:36 (post 709, #742438)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
А вот и первые "непонятки" с Апексом:

1) нашёл DIR_GetPosition по сигнатуре CD EF CD 90 ?? ?? E0 FF 13 13 13 54 0F FF, по адресу DBA8.

2) искал 7F 05 12 DB А8 - тут всё безупречно, найдено 1 раз и то, что надо.

А вот найти 7F 00 12 DB А8 мне не удалось, зато E4 FF 12 DB A8 находится целых 6 раз. Какой из них мне нужен ?
Ещё нашёл один раз 7F 06 12 DB А8, других 7F xx 12 DB А8 не было.

Апдейт: в Юндае та же бодяга.

This post has been edited by cax on 26-04-2007, 17:38
PM Email Poster
Top Bottom
 Rvs Member is Offline
 Posted: 26-04-2007, 18:16 (post 710, #742453)

Member

Group: Members
Posts: 126
Warn:0%-----
cax

У меня в процедуре fgFlMnOnIrPrev то что я привёл в примере есть последовательнось:

ROM:ED7F 90 FB 99 mov DPTR, #XRAM_FB99
ROM:ED82 EE mov A, R6
ROM:ED83 F0 movx @DPTR, A
ROM:ED84 A3 inc DPTR
ROM:ED85 EF mov A, R7
ROM:ED86 F0 movx @DPTR, A
ROM:ED87 D3 setb C
ROM:ED88 94 05 subb A, #5
ROM:ED8A EE mov A, R6
ROM:ED8B 94 00 subb A, #0
ROM:ED8D 40 27 jc ROM_EDB6

и у тебя она тоже есть по адресу 1_E8CF значит это и есть нужная процедура fgFlMnOnIrPrev = 1_E8CF. Ну дальше по плану :)
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 26-04-2007, 18:34 (post 711, #742465)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Так и запишем: fgFlMnOnIrPrev искать по сигнатуре

E4 FF 12 xx xx 90 ?? ?? EE F0 A3 EF F0 D3
где xx xx - адрес DIR_GetPosition.

А если ещё немного поиграться, то получаем, что знать DIR_GetPosition нам и вовсе не надо, а цепочки для next/prev такие:

для next - 7F 05 12 ?? ?? 90 ?? ?? EE F0 A3
для prev - E4 FF 12 ?? ?? 90 ?? ?? EE F0 A3 EF F0 D3

Ещё раз спасибо !

Теперь осталось допатчить и проверить, но это уже будет не сегодня.
PM Email Poster
Top Bottom
 vboroda Member is Offline
 Posted: 26-04-2007, 20:26 (post 712, #742517)

Newbie

Group: Members
Posts: 21
Warn:0%-----
QUOTE (Andy007)
Поддержку в LFN я умею. New Age научил:)
Но геморройно очень - десяток функций в арме надо переписывать почти с нуля.

Andy007, а можно, пожалуйста, немного подробнее на этот счет? Я прочитал сообщения NA на эту тему в mt13x9 на Yahoo, о том как искать ф-ции, читающие файловые системы, и далее:
QUOTE
If you deep analyze and do some memdumps with the FindFirst, FindNext routines you'll find that the LFN name also processed but never used. If you patch the FAT_FUNC_2 for using the LFN name then playing anything wont work because the whole arm code based on 8.2 short names.
The workaround I managed to do is this in short words:

- there is a fixed 50 chars long buffer used for filenames
- since 8.3 name + \0x00 uses maxium 13 chars from that I copy the lfn name after the 8.3 into this buffer (patched the routine that is called from findfirst and findnext function that fills the filename record)
- when I display the filenames I display this instead of 8.3

This solution has one problem: the subtitle loader routine still will use the 8.3 names that causes filename matching problems. But if you patch those routines too this problem is also solved.

Не уверен, что пользуясь такой инструкцией можно браться за это дело. Есть ли что-то более конкретное - откомментированный дизассемблер хотя бы? Т.е. сам факт того, что LFN прошивка уже собирает, хотя и не использует, обнадеживающий, но как его приложить к моей конкретной прошивке? Ф-цию FAT_FUNC_2 я нашел без особого труда, но она ссылается на десятки других, следовать по всем этим вызовам, пытаясь собрать примерную картину происходящего было бы очень трудоемко.
Спасибо! :hi:
PM Email Poster
Top Bottom
 vboroda Member is Offline
 Posted: 27-04-2007, 20:09 (post 713, #743007)

Newbie

Group: Members
Posts: 21
Warn:0%-----
Если можно - несколько вопросов к знатокам.

1) Сколько в ARM коде свободного места для того, чтобы пихать свой код? Иными словами, какого размера функции можно безопасно туда вставлять? UnicodeToCP - функция крошечная, а как насчет, скажем, уникодных таблиц, или дополнительного модуля для поддержки LFN?

Я тут начал разбираться в коде New Age для Medion, где он добавил поддержку длинных имен файлов в FAT. Идея примерно ясна, код более-менее понятен (с.б., человек писал, а не компиллятор - но как бы пригодились листинги с комментариями!). New Age добавил несколько килобайт кода и таблиц (а значит, под мою систему - править и править) - безопасно ли вставлять такое количество кода в прошивку? Свой код New Age разместил примерно начиная с того места (сообщения об ошибках C-компиллятора), которое было рекомендовано cax для UnicodeToCP.

2) Существует ли простенький фриварный ARM ассемблер? Замучаешься все бинарные коды вручную составлять (ну BL с помощью BCalc ладно, но все остальное...).

3) Есть ли где-нибудь примерный перечень граблей, на которые лучше не наступать? :rolleyes: Я имею в виду, изменяя что и где легче всего заработать плеер, который придется оживлять кабелем (т.е. не способный принимать прошивку с диска)? Кабель из старого нокиевского я сделать смогу, но предпочел бы не тратить на это время.

Вопросов на самом деле гораздо больше, но я пытаюсь разбираться самостоятельно. Спасибо!

This post has been edited by vboroda on 27-04-2007, 21:10
PM Email Poster
Top Bottom
 Rvs Member is Offline
 Posted: 28-04-2007, 09:32 (post 714, #743190)

Member

Group: Members
Posts: 126
Warn:0%-----
cax

ну как результат??

vboroda

У NewAge есть утилита для увелечения размера ARM. Насколько я знаю можно лепить сколько угодно большие куски своего кода. Главное что бы место было свободное. NewAge часто если не сказать всегда расширяет ARM, т.к. для его патчей, того места что есть ни когда не хватате. А насчёт кабеля зря ты так. Я себе спаял на двух транзисторах и забыл заморочки с дисками. Заливаеться быстро и в любой момент и если где то накасячу, то даже об этом не задумываюсь. Плюс есть возможность просматривать память, тем более если ты будешь работать с файлами, то результаты работы ты легко увидишь в памяти.
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 29-04-2007, 16:48 (post 715, #743721)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Rvs,

и последние (я надеюсь) 2 вопроса по теме (для плохо знающих IDA и скрипты).

CODE
ROM:FF9B 7F 49                mov  R7, #0x49 ; 'I'
ROM:FF9D 7E 02                mov  R6, #2
ROM:FF9F 12 04 0F              lcall ARM_GetChar

1) Как найти PREF_GetChar я знаю, а вот как найти ARM_GetChar ?
Я прочесал скрипты, но не нашёл.

2) 0x249 - этот адрес верен для любой прошивки ?
PM Email Poster
Top Bottom
 Rvs Member is Offline
 Posted: 03-05-2007, 09:56 (post 716, #745147)

Member

Group: Members
Posts: 126
Warn:0%-----
cax

Не смог сразу ответить, на майские праздники ездил отдыхать!!! :)

1. ARM_GetChar сигнатура есть в файле MT1389_Misc_v3 или MT1389_Misc вот она D3 10 AF 01 C3 C0 D0 8E ? 8F ? 90 F8 60.
2. До последнего момента был уверен, что да, но с появлением исходников нет. Как раз в них другой адрес. Но радует одно, что кроме как в исходниках я разницу и нашёл.

А у тебя есть сомнения??? Говори!!!
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 03-05-2007, 15:21 (post 717, #745217)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
QUOTE (Rvs @ 03-05-2007, 06:56)
cax

Не смог сразу ответить, на майские праздники ездил отдыхать!!! :)

1. ARM_GetChar сигнатура есть в файле MT1389_Misc_v3 или MT1389_Misc вот она D3 10 AF 01 C3 C0 D0 8E ? 8F ? 90 F8 60.
2. До последнего момента был уверен, что да, но с появлением исходников нет. Как раз в них другой адрес. Но радует одно, что кроме как в исходниках я разницу и нашёл.

А у тебя есть сомнения??? Говори!!!
1) Такая сигнатура в Юндае есть дважды (EC21 и EF8F), я полагаю, что скрипт использует первую из них ? А сколько раз она встречается у тебя ?

2) Сомнения у меня от того, что я не знаю происхождения этого магического числа.
Если б его можно было вычислить по каким-либо признакам из кода самой прошивки - я был бы спокоен.
PM Email Poster
Top Bottom
 Rvs Member is Offline
 Posted: 03-05-2007, 18:09 (post 718, #745278)

Member

Group: Members
Posts: 126
Warn:0%-----
cax

1. У меня тоже находит два раза, но оказываеться в одном случае это ARM_GetChar, а в другом ARM_PutChar у них разные концовки. В скрипте ARM_PutChar ищут по такой сигнатуре ED F0 D0 D0 92 AF 22.

2. Ну это конечно не магическое число :) в исходниках это SI_MP3_MOD - trick mode. Смысл ячейки ясен, а вот как её найти наверняка.... Я поглядел у себя, косвенно через процедуру fgFlMnOnIrPlay и то через IDA её можно найти, а так сложно....

This post has been edited by Rvs on 03-05-2007, 18:13
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 08-05-2007, 10:24 (post 719, #746588)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Rvs, ещё раз спасибо ! Пока проверил только на Юндае, работает безупречно !

Вот "путевой лист":

Hyundai 3899 servo 02.09: next/prev mp3 skipping mod.

CODE

0) find ARM_GetChar by searching D3 10 AF 01 C3 C0 D0 8E ? 8F ? 90 F8 60
Found twice: at EC21 and EF8F
Let's search for 22 from the subprogram beginning to find it's end.

EC21: ends with E0 FF D0 D0 92 AF 22
EF8F: ends with ED F0 D0 D0 92 AF 22 !!!
This ending means we've found is ARM_PutChar, so at EC21 we have ARM_GetChar.

Looking for 90 EC 21 02, found at 0409, 10409, etc., so
ARM_GetChar = gg gg = 04 09

============

1.1) find "next" - 7F 05 12 mm mm 90 ?? ?? EE F0 A3, at address NN NN
Calculate nn nn = (NN NN + 5), write down mm mm.

(found at 1DCFB, mm mm = D5 78, nn nn = DCFB+5 = DD00)

1.2) put the following code in free area (ss ss):

7F 49 7E 02 12 gg gg EF 64 01 60 02 C3 22 7F 05 12 mm mm 02 nn nn

(here: 7F 49 7E 02 12 04 09 EF 64 01 60 02 C3 22 7F 05 12 D5 78 02 DD 00
at ss ss = 1F400)

1.3) put "02 ss ss" at NN NN

(here: 02 F4 00 at 1DCFB)

============

2.1) find "prev" - E4 FF 12 mm mm 90 ?? ?? EE F0 A3 EF F0 D3, at address NN NN
Calculate nn nn = (NN NN + 5). As you see, mm mm is the same as in "next" subroutine.

(found at 1E40D, mm mm = D5 78, nn nn = E40D+5 = E412)

2.2) put the following code in free area (ss ss):

7F 49 7E 02 12 gg gg EF 64 01 60 02 C3 22 7F 00 12 mm mm 02 nn nn

(here: 7F 49 7E 02 12 04 09 EF 64 01 60 02 C3 22 7F 00 12 D5 78 02 E4 12
at ss ss = 1F420)

2.3) put "02 ss ss" at NN NN

(here: 02 F4 20 at 1E40D)


This post has been edited by cax on 08-05-2007, 10:25
PM Email Poster
Top Bottom
 Rvs Member is Offline
 Posted: 08-05-2007, 15:42 (post 720, #746689)

Member

Group: Members
Posts: 126
Warn:0%-----
cax

Отлично!!!
Думаю будет работать везде.
PM Email Poster
Top Bottom
Topic Options Pages: (52) 1 2 3 .. 6 .. 9 .. 12 .. 15 .. 18 .. 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 46 47 [48] 49 50 51 52