THUMB EXTERN main ; --------------------------------------------------------------------------- RSEG PATCH_JUMP:CODE(2) ; пустое место для подготовки к запуску патча l_patch_jump: mov r1, lr adds r1, #0x06 ; r1=новый адрес возврата ldrb r0, [r6] cmp r0, #2 ; кусок beq l_exit_quiet ; кода ldr r0, [r7, #0x14] ; из lsls r0, r0, #2 ; прошивки bpl l_exit ; не наш случай - выход (BMI не сработает) adds r0, r7, #0 ; 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