Псевдоплейлист конечно удобнее :) Возьмем за основу мою версию 5.0 для 49R ;эта строка патчит функцию переключения трека, чтоб она читала значение автоповтора 003369AE: 220B01D218A5B08246694804F26BF827466B7818B00270E869611C30E001000006FC ;эта функция патчит создание меню, меняет указатель с подменю_для_музыки на подменю_для_плелиста (чтоб появился пункт перемешать) 00337DAA: 308C ;это таблица событий плеера - событие конца песни, здесь поменяли указатель на наш обработчик в дополнительной области памяти 0033B584: 10C20301 ;это аналогичная таблица для бэкграунд плеера 0033B64C: 10C20301 ;а это и есть наш обработчик за концом сг1 00BA0300: B5F0B0821C051C0E48154669F000F820466B78181C312801D0031C28F000F808E0021C28F000F80CB002BCF0BC084718 ;тут дальние переходы, по сути продолжение обработчика 00BA0330: 477846C0E59FC000E12FFF1C103B603D477846C0E59FC000E12FFF1C103B69A7477846C0E59FC000E12FFF1C10621A0D ;а это просто данные (номер сима, отвечающего за переход/непереход) 00BA0360: 000006FB Итак, в первую очередь надо найти таблицы событий плеера. 1. Откроем в IDA обе прошивки - исходную (49 не патченую) и новую (на которую портируем) 2. в патче возьмем адрес ;это таблица событий плеера - событие конца песни, здесь поменяли указатель на наш обработчик в дополнительной области памяти 0033B584: 10C20301 и пересчитаем его с учетом смещеня сг1 . для 373_49 это +1008000 итого реально это код лежит по адресу 103BB584. перейдем туда и сгруппируем данные по 4 байта У меня в ида этот кусок выглядит так ROM:103BB4EC DCD loc_103B54A6+1 ; AP_Play_HandleItunesPlay ROM:103BB4F0 DCD 0xC1011 ROM:103BB4F4 DCD loc_103B551E+1 ; AP_Play_HandleMediaError ROM:103BB4F8 DCD 0x20B9 ROM:103BB4FC DCD loc_103B6494+1 ; AP_Play_HandleMenu ROM:103BB500 DCD 0x2059 ROM:103BB504 DCD loc_103B64AA+1 ; AP_Play_HandleSend ROM:103BB508 DCD 0xC100C ROM:103BB50C DCD loc_103B63F2+1 ; AP_Play_HandleMarker ROM:103BB510 DCD 0x2058 ROM:103BB514 DCD loc_103B62AE+1 ; AP_Play_HandleSelect ROM:103BB518 DCD 0x2020 ; назад в плеере ROM:103BB51C DCD sub_103B8BAA+1 ; AP_Utility_HandleDone ROM:103BB520 DCD 0x2106 ROM:103BB524 DCD loc_103B5DB4+1 ; AP_Play_HandleMPlayerFFRew ROM:103BB528 DCD 0x2105 ROM:103BB52C DCD loc_103B5DB4+1 ; AP_Play_HandleMPlayerFFRew ROM:103BB530 DCD 0x2118 ROM:103BB534 DCD loc_103B5DFE+1 ; AP_Play_HandleFFRewRelease ROM:103BB538 DCD 0x2117 ROM:103BB53C DCD loc_103B5DFE+1 ; AP_Play_HandleFFRewRelease ROM:103BB540 DCD 0x2103 ; стоп или пауза стандартного плеера. не конец песни ROM:103BB544 DCD loc_103B5C6E+1 ; AP_Play_HandleMPlayerPauseStop ROM:103BB548 DCD 0x2104 ; стоп или пауза стандартного плеера. не конец песни ROM:103BB54C DCD loc_103B5C6E+1 ; AP_Play_HandleMPlayerPauseStop ROM:103BB550 DCD 0x2102 ; плей в стандартном плеере ROM:103BB554 DCD AP_Play_HandleMPlayerPlay+1 ; AP_Play_HandleMPlayerPlay ROM:103BB558 DCD 0xC1000 ROM:103BB55C DCD loc_103B593C+1 ; AP_Play_HandleSuccessMediaOpen ROM:103BB560 DCD 0xC1001 ROM:103BB564 DCD loc_103B551E+1 ; AP_Play_HandleMediaError ROM:103BB568 DCD 0xC81 ROM:103BB56C DCD loc_103B64F2+1 ; AP_Play_HandleFSSResponse ROM:103BB570 DCD 0xC1003 ROM:103BB574 DCD loc_103B5F56+1 ; AP_Play_HandleSeekStatus ROM:103BB578 DCD 0xC1002 ROM:103BB57C DCD loc_103B5F56+1 ; AP_Play_HandleSeekStatus ROM:103BB580 DCD 0xC100D ; конец песни ROM:103BB584 DCD loc_103B603C+1 ; AP_Play_HandleMediaComplete ROM:103BB588 DCD 0xC1013 ROM:103BB58C DCD loc_103B61D4+1 ; AP_Play_HandleMediaStatus ROM:103BB590 DCD 0x8205A ROM:103BB594 DCD loc_103B6834+1 ; AP_Play_HandleExpiredTimer ROM:103BB598 DCD 0x14 ROM:103BB59C DCD sub_103B4DF4+1 ; AP_Play_HandleGainFocus ROM:103BB5A0 DCD 0x210A ; предыдущая песня ROM:103BB5A4 DCD sub_103B69A6+1 ; AP_Play_HandleMPlayerAudioNextPrev ROM:103BB5A8 DCD 0x210B ROM:103BB5AC DCD sub_103B69A6+1 ; AP_Play_HandleMPlayerAudioNextPrev ROM:103BB5B0 DCD 0x2109 ROM:103BB5B4 DCD sub_1031BE4E+1 ; APP_ConsumeEv ROM:103BB5B8 DCD 0xC7E ROM:103BB5BC DCD loc_103B86A8+1 ; AP_Utility_HandleFSSStatus ROM:103BB5C0 DCD 0xC1014 ; непонятно что ROM:103BB5C4 DCD loc_103B6C6E+1 ; AP_Play_HandleCloseComplete ROM:103BB5C8 DCD 0x2134 ; 0 в плеере (пометка) ROM:103BB5CC DCD loc_103B6C0E+1 ; AP_Play_HandleZeroPressed ROM:103BB5D0 DCD 0xDA4 ROM:103BB5D4 DCD loc_103B6A0A+1 ; AP_Play_HandleOmaDrmServiceResponse ROM:103BB5D8 DCD 0x6AB ROM:103BB5DC DCD loc_103B6E1C+1 ; AP_Play_HandleKeypadLock ROM:103BB5E0 DCD 0xFFFFFFFF ROM:103BB5E4 DCD 0 ROM:103BB5E8 dword_103BB5E8 DCD 0xC1011 ; DATA XREF: ROM:103BA3A8o ROM:103BB5E8 ; AP_BACKGROUND_EV_TABLE ROM:103BB5EC DCD loc_103B551E+1 ; AP_Play_HandleMediaError ROM:103BB5F0 DCD 0xC100C ROM:103BB5F4 DCD loc_103B63F2+1 ; AP_Play_HandleMarker ROM:103BB5F8 DCD 0x2102 ROM:103BB5FC DCD AP_Play_HandleMPlayerPlay+1 ; AP_Play_HandleMPlayerPlay ROM:103BB600 DCD 0x2106 ROM:103BB604 DCD loc_103B5DB4+1 ; AP_Play_HandleMPlayerFFRew ROM:103BB608 DCD 0x2105 ROM:103BB60C DCD loc_103B5DB4+1 ; AP_Play_HandleMPlayerFFRew ROM:103BB610 DCD 0x2118 ROM:103BB614 DCD loc_103B5DFE+1 ; AP_Play_HandleFFRewRelease ROM:103BB618 DCD 0x2117 ROM:103BB61C DCD loc_103B5DFE+1 ; AP_Play_HandleFFRewRelease ROM:103BB620 DCD 0xC1000 ROM:103BB624 DCD loc_103B593C+1 ; AP_Play_HandleSuccessMediaOpen ROM:103BB628 DCD 0xC1001 ROM:103BB62C DCD loc_103B551E+1 ; AP_Play_HandleMediaError ROM:103BB630 DCD 0x7D9 ROM:103BB634 DCD loc_103B70D8+1 ; AP_Background_HandleEndKey ROM:103BB638 DCD 0xC1003 ROM:103BB63C DCD loc_103B5F56+1 ; AP_Play_HandleSeekStatus ROM:103BB640 DCD 0xC1002 ROM:103BB644 DCD loc_103B5F56+1 ; AP_Play_HandleSeekStatus ROM:103BB648 DCD 0xC100D ROM:103BB64C DCD loc_103B603C+1 ; AP_Play_HandleMediaComplete ROM:103BB650 DCD 0xC1013 ROM:103BB654 DCD loc_103B61D4+1 ; AP_Play_HandleMediaStatus ROM:103BB658 DCD 0x8205A ROM:103BB65C DCD loc_103B6834+1 ; AP_Play_HandleExpiredTimer ROM:103BB660 DCD 0xCB8 ROM:103BB664 DCD loc_103B70D8+1 ; AP_Background_HandleEndKey ROM:103BB668 DCD 0xC1014 ROM:103BB66C DCD loc_103B6C6E+1 ; AP_Play_HandleCloseComplete ROM:103BB670 DCD 0xDA4 ROM:103BB674 DCD loc_103B6A0A+1 ; AP_Play_HandleOmaDrmServiceResponse ROM:103BB678 DCD 0x825EB ROM:103BB67C DCD loc_103B5DFE+1 ; AP_Play_HandleFFRewRelease ROM:103BB680 DCD 0x825EC ROM:103BB684 DCD loc_103B5DFE+1 ; AP_Play_HandleFFRewRelease ROM:103BB688 DCD 0x825EA ROM:103BB68C DCD loc_103B70D8+1 ; AP_Background_HandleEndKey ROM:103BB690 DCD 0x825ED ROM:103BB694 DCD loc_103B70E2+1 ; AP_Play_HandleJavaPause ROM:103BB698 DCD 0xFFFFFFFF ROM:103BB69C DCB 0 ROM:103BB69D DCB 0 ROM:103BB69E DCB 0 ROM:103BB69F DCB 0 Надписи вида ROM:103BB694 DCD loc_103B70E2+1 ; AP_Play_HandleJavaPause являются адресами процедур и уникальны для каждой прошивки, а вот ROM:103BB4F0 DCD 0xC1011 это коды событий с с большой вероятностью они не меняются. моожно искать по этим 4-м байтам, но они встречаются многократно, удобнее взять кусок на стыка таблиц плеера и бэкграунд плеера ROM:103BB5E0 DCD 0xFFFFFFFF ROM:103BB5E4 DCD 0 ROM:103BB5E8 dword_103BB5E8 DCD 0xC1011 ; DATA XREF: ROM:103BA3A8o здесь мы имеем постоянную паттерну длиной 12 байт, таких в прошивке гораздо меньше. Теперь переходим в нашу новую прошивку и ищем в ней эти 12 байт FF FF FF FF 00 00 00 00 00 0C 10 11 Сколько раз нашлась такая последовательность?