| Первый урок будет посящен разбору патча... Я решил не брать какой-нить замудрённый патч )) Вот исходник патча: ;K750 SW-R1CA021 ;Отключение плеера/радио при отсоединении гарнитуры ;© IronMaster ;(p) Joker XT patch equ 0x451E1FA0 org 0x4505BF5A bl patch org patch STRB R5, [R4] push {r0-r7} ldr r0, isAudioPlayerBook bl 0x4504D3B8 ;findBook cmp r0, 0 beq next bl 0x44E7AAA4 ;freeBook next: ldr r0, isFmRadioBook bl 0x4504D3B8 ;findBook cmp r0, 0 beq ex bl 0x44E7AAA4 ;freeBook ex: pop {r0-r7} ldr r7, rest mov pc, r7 align 4 rest DCD 0x4505BF8C+1 isAudioPlayerBook DCD 0x44F55518+1 isFmRadioBook DCD 0x4511EBB8+1 Теперь начнём разбирать)) org 0x4505BF5A bl patch Это врезка патча, собсно с помощью неё патч изнаёт када нужно запускаться ) После org patch идёт тело патча, те то, что будет выполняться при отсоединении гарнитуры... STRB R5, [R4] - это данные, который мы затёрли врезкой... Их всегда нужно восстанавливать! ldr r0, isAudioPlayerBook bl 0x4504D3B8 ;findBook cmp r0, 0 beq next bl 0x44E7AAA4 ;freeBook Тут идёт первая проверка на то, не запушен ли Плеер. Ф-ией findBook мы проверяем, создана ли AudioPlayerBook, если бука создана, то ф-ия findBook вернёт нам указатель на book, елси же нет, то она вернёт 0... cmp r0, 0 beq next Тут проверяем не ноль ли вышел из функции )) Если же ноль, то идём на вторую проверку... А если не ноль, но освобождаем буку ф-ией freeBook. Вторая проверка аналогична первой, только там мы проверяем не включено ли Радио. ldr r7, rest mov pc, r7 Этой крнструкцией мы переходим на адрес rest. align 4 rest DCD 0x4505BF8C+1 isAudioPlayerBook DCD 0x44F55518+1 isFmRadioBook DCD 0x4511EBB8+1 align 4 - это выровнять по адресу кратному 4. Ну и собсно дальше адреса ф-ий... Огромное спс за инфу Joker_XT Взято от сюда http://se-team.com/forum/59-874-1
|