shithub: drawcpu

ref: e4df0925260ce4f14ba6db4025d1ed4913b0f9ec
dir: /posix-arm64/patch.c/

View raw version
#include <u.h>
#include <libc.h>
#include "mem.h"

int
patch(void* text, int size)
{
    ulong i;
    int ret = -1;
    for(i = 0; i < size - BY2WD; i++){
        // MOV X0, #immediate (could be D2800000 | syscall_number)
        // BL X0 (could be D4000000 | offset)
        // 0xD63F0000 is our BLR X0
        if ((*(ulong*)&text[i] & 0xFFFF0000) == 0xD2800000 && (*(ulong*)&text[i+BY2SE] & 0xFFFF0000) == 0xD4000000) {
            long *ptr = (ulong*)&text[i];
            ptr[1] = 0xD6;
            ptr[0] = 0x3F;
            ret++;
        }
    }
    return ret;
}