|
| 1 | +#ifndef __KSU_H_ARCH |
| 2 | +#define __KSU_H_ARCH |
| 3 | + |
| 4 | +#include <linux/version.h> |
| 5 | + |
| 6 | +#if defined(__aarch64__) |
| 7 | + |
| 8 | +#define __PT_PARM1_REG regs[0] |
| 9 | +#define __PT_PARM2_REG regs[1] |
| 10 | +#define __PT_PARM3_REG regs[2] |
| 11 | +#define __PT_SYSCALL_PARM4_REG regs[3] |
| 12 | +#define __PT_CCALL_PARM4_REG regs[3] |
| 13 | +#define __PT_PARM5_REG regs[4] |
| 14 | +#define __PT_PARM6_REG regs[5] |
| 15 | +#define __PT_RET_REG regs[30] |
| 16 | +#define __PT_FP_REG regs[29] /* Works only with CONFIG_FRAME_POINTER */ |
| 17 | +#define __PT_RC_REG regs[0] |
| 18 | +#define __PT_SP_REG sp |
| 19 | +#define __PT_IP_REG pc |
| 20 | + |
| 21 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) |
| 22 | +#define SYS_EXECVE_SYMBOL "__arm64_sys_execve" |
| 23 | +#else |
| 24 | +#define SYS_EXECVE_SYMBOL "sys_execve" |
| 25 | +#endif |
| 26 | + |
| 27 | +#elif defined(__arm__) |
| 28 | + |
| 29 | +// https://elixir.bootlin.com/linux/v6.17-rc6/source/tools/lib/bpf/bpf_tracing.h |
| 30 | +#define __PT_PARM1_REG uregs[0] |
| 31 | +#define __PT_PARM2_REG uregs[1] |
| 32 | +#define __PT_PARM3_REG uregs[2] |
| 33 | +#define __PT_PARM4_REG uregs[3] |
| 34 | + |
| 35 | +// seems to work atleast on 3.0 on samsung galaxy s3 |
| 36 | +// nfi what im doing |
| 37 | +#define __PT_SYSCALL_PARM4_REG uregs[3] |
| 38 | +#define __PT_CCALL_PARM4_REG uregs[3] |
| 39 | + |
| 40 | +#define __PT_PARM1_SYSCALL_REG __PT_PARM1_REG |
| 41 | +#define __PT_PARM2_SYSCALL_REG __PT_PARM2_REG |
| 42 | +#define __PT_PARM3_SYSCALL_REG __PT_PARM3_REG |
| 43 | +#define __PT_PARM4_SYSCALL_REG __PT_PARM4_REG |
| 44 | +#define __PT_PARM5_SYSCALL_REG uregs[4] |
| 45 | +#define __PT_PARM6_SYSCALL_REG uregs[5] |
| 46 | +#define __PT_PARM7_SYSCALL_REG uregs[6] |
| 47 | + |
| 48 | +#define __PT_RET_REG uregs[14] |
| 49 | +#define __PT_FP_REG uregs[11] /* Works only with CONFIG_FRAME_POINTER */ |
| 50 | +#define __PT_RC_REG uregs[0] |
| 51 | +#define __PT_SP_REG uregs[13] |
| 52 | +#define __PT_IP_REG uregs[12] |
| 53 | + |
| 54 | +#define SYS_EXECVE_SYMBOL "sys_execve" |
| 55 | + |
| 56 | +#elif defined(__x86_64__) |
| 57 | + |
| 58 | +#define __PT_PARM1_REG di |
| 59 | +#define __PT_PARM2_REG si |
| 60 | +#define __PT_PARM3_REG dx |
| 61 | +/* syscall uses r10 for PARM4 */ |
| 62 | +#define __PT_SYSCALL_PARM4_REG r10 |
| 63 | +#define __PT_CCALL_PARM4_REG cx |
| 64 | +#define __PT_PARM5_REG r8 |
| 65 | +#define __PT_PARM6_REG r9 |
| 66 | +#define __PT_RET_REG sp |
| 67 | +#define __PT_FP_REG bp |
| 68 | +#define __PT_RC_REG ax |
| 69 | +#define __PT_SP_REG sp |
| 70 | +#define __PT_IP_REG ip |
| 71 | + |
| 72 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) |
| 73 | +#define SYS_EXECVE_SYMBOL "__x64_sys_execve" |
| 74 | +#else |
| 75 | +#define SYS_EXECVE_SYMBOL "sys_execve" |
| 76 | +#endif |
| 77 | + |
| 78 | +#else |
| 79 | +#error "Unsupported arch" |
| 80 | +#endif |
| 81 | + |
| 82 | +/* allow some architecutres to override `struct pt_regs` */ |
| 83 | +#ifndef __PT_REGS_CAST |
| 84 | +#define __PT_REGS_CAST(x) (x) |
| 85 | +#endif |
| 86 | + |
| 87 | +#define PT_REGS_PARM1(x) (__PT_REGS_CAST(x)->__PT_PARM1_REG) |
| 88 | +#define PT_REGS_PARM2(x) (__PT_REGS_CAST(x)->__PT_PARM2_REG) |
| 89 | +#define PT_REGS_PARM3(x) (__PT_REGS_CAST(x)->__PT_PARM3_REG) |
| 90 | +#define PT_REGS_SYSCALL_PARM4(x) (__PT_REGS_CAST(x)->__PT_SYSCALL_PARM4_REG) |
| 91 | +#define PT_REGS_CCALL_PARM4(x) (__PT_REGS_CAST(x)->__PT_CCALL_PARM4_REG) |
| 92 | +#define PT_REGS_PARM5(x) (__PT_REGS_CAST(x)->__PT_PARM5_REG) |
| 93 | +#define PT_REGS_PARM6(x) (__PT_REGS_CAST(x)->__PT_PARM6_REG) |
| 94 | +#define PT_REGS_RET(x) (__PT_REGS_CAST(x)->__PT_RET_REG) |
| 95 | +#define PT_REGS_FP(x) (__PT_REGS_CAST(x)->__PT_FP_REG) |
| 96 | +#define PT_REGS_RC(x) (__PT_REGS_CAST(x)->__PT_RC_REG) |
| 97 | +#define PT_REGS_SP(x) (__PT_REGS_CAST(x)->__PT_SP_REG) |
| 98 | +#define PT_REGS_IP(x) (__PT_REGS_CAST(x)->__PT_IP_REG) |
| 99 | + |
| 100 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) |
| 101 | +#define PT_REAL_REGS(regs) ((struct pt_regs *)PT_REGS_PARM1(regs)) |
| 102 | +#else |
| 103 | +#define PT_REAL_REGS(regs) ((regs)) |
| 104 | +#endif |
| 105 | + |
| 106 | +#endif |
0 commit comments