ajhahn.de
← FlashOS
Assembly 44 lines
/*
 * Trace hook entry. Patched function prologues `bl` here.
 */
.globl hook
hook:
/*
    mov x10, lr
    mov lr, x9
    br  x10
*/
    sub sp, sp, #96 /* create space */

    /* save function arguments, return address, callee address and fp */
    stp x0, x1,    [sp, #16 * 0]
    stp x2, x3,    [sp, #16 * 1]
    stp x4, x5,    [sp, #16 * 2]
    stp x6, x7,    [sp, #16 * 3]
    stp x8, x9,    [sp, #16 * 4]
    stp x29, x30,  [sp, #16 * 5]

    /* prepare arguments and call into C */
    mov x0, x30
    bl traced

    /* restore function arguments and fp */
    ldp x0, x1,    [sp, #16 * 0]
    ldp x2, x3,    [sp, #16 * 1]
    ldp x4, x5,    [sp, #16 * 2]
    ldp x6, x7,    [sp, #16 * 3]
    ldp x8, x9,    [sp, #16 * 4]
    ldp x29, x30,  [sp, #16 * 5]

    /* execute the function */
    blr x30

    /* return to caller */
    ldr x30,       [sp, #16 * 4 + 8]

    /* restore sp position */
    add sp, sp, #96

    ret