Первый урок будет посящен разбору патча... Я решил не брать какой-нить замудрённый патч )) Вот исходник патча:
;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.
Ну и собсно дальше адреса ф-ий...
Вроде всё ) Если что непонятно, пишите )) Дополним, переделаем...