selfpatch-slr/selfpatch/src/spslr_list.h

66 lines
1.3 KiB
C

#ifndef SPSLR_LIST_H
#define SPSLR_LIST_H
#include "spslr_types.h"
#define __packed __attribute__((packed))
#define SPSLR_IPIN_OP_PATCH 1
#define SPSLR_IPIN_OP_ADD_INITIAL_OFFSET 2
#define SPSLR_IPIN_OP_SUB_INITIAL_OFFSET 3
#define SPSLR_IPIN_OP_ADD_OFFSET 4
#define SPSLR_IPIN_OP_SUB_OFFSET 5
#define SPSLR_IPIN_OP_ADD_CONST 6
#define SPSLR_FLAG_FIELD_FIXED 1
struct spslr_target {
spslr_u32 size;
spslr_u32 fieldcnt;
spslr_u32 fieldoff; // Offset into spslr_target_field array
} __packed;
struct spslr_target_field {
spslr_u32 offset;
spslr_u32 size;
spslr_u32 alignment;
spslr_u32 flags;
} __packed;
struct spslr_ipin {
spslr_u64 addr;
spslr_u32 size;
spslr_u32 program; // Index in spslr_ipin_op array
} __packed;
struct spslr_ipin_op {
spslr_u32 code;
union {
spslr_u32 patch_unused;
spslr_u32 add_initial_offset_target;
spslr_u32 sub_initial_offset_target;
spslr_u32 add_offset_target;
spslr_u32 sub_offset_target;
spslr_s32 add_const_value;
} op0;
union {
spslr_u32 patch_unused;
spslr_u32 add_initial_offset_field;
spslr_u32 sub_initial_offset_field;
spslr_u32 add_offset_field;
spslr_u32 sub_offset_field;
spslr_u32 add_const_unused;
} op1;
} __packed;
struct spslr_dpin {
spslr_u64 addr;
spslr_u32 target; // Index in spslr_target array
} __packed;
#undef __packed
#endif