THUMB EXTERN main ; --------------------------------------------------------------------------- RSEG PATCH_JUMP:CODE(2) ; пустое место для подготовки к запуску патча l_patch_jump: mov r1, lr adds r1, #0x04 ; r1=новый адрес возврата cmp r0, #2 ; кусок beq l_exit_quiet ; кода ldr r0, [sp, #4] ldr r0, [r0, #0x18] ; из lsls r0, r0, #2 ; прошивки bpl l_exit ; не наш случай - выход (BMI не сработает) ldr r0, [sp, #4] ; r0=r7=адрес массива WSHDR push {r1} blx main tst r0, r0 pop {pc} l_exit_quiet: tst r1, r1 ; r1=0xAxxxxxxx, т.е. старший бит включен => выполняется усл. MI l_exit: bx r1 ; --------------------------------------------------------------------------- RSEG PATCH_ENTRY:CODE(2) ; место врезки!! ldr r1, =l_patch_jump blx r1 ; --------------------------------------------------------------------------- END