mirror of
https://github.com/joel16/VitaShell.git
synced 2024-12-04 01:40:54 +00:00
153 lines
3.2 KiB
C
153 lines
3.2 KiB
C
|
|
/*************************************************************/
|
|
|
|
typedef struct
|
|
{
|
|
u32 e_magic;
|
|
u8 e_class;
|
|
u8 e_data;
|
|
u8 e_idver;
|
|
u8 e_pad[9];
|
|
u16 e_type;
|
|
u16 e_machine;
|
|
u32 e_version;
|
|
u32 e_entry;
|
|
u32 e_phoff;
|
|
u32 e_shoff;
|
|
u32 e_flags;
|
|
u16 e_ehsize;
|
|
u16 e_phentsize;
|
|
u16 e_phnum;
|
|
u16 e_shentsize;
|
|
u16 e_shnum;
|
|
u16 e_shstrndx;
|
|
} __attribute__((packed)) Elf32_Ehdr;
|
|
|
|
typedef struct
|
|
{
|
|
u32 p_type;
|
|
u32 p_offset;
|
|
u32 p_vaddr;
|
|
u32 p_paddr;
|
|
u32 p_filesz;
|
|
u32 p_memsz;
|
|
u32 p_flags;
|
|
u32 p_align;
|
|
} __attribute__((packed)) Elf32_Phdr;
|
|
|
|
typedef struct
|
|
{
|
|
u32 sh_name;
|
|
u32 sh_type;
|
|
u32 sh_flags;
|
|
u32 sh_addr;
|
|
u32 sh_offset;
|
|
u32 sh_size;
|
|
u32 sh_link;
|
|
u32 sh_info;
|
|
u32 sh_addralign;
|
|
u32 sh_entsize;
|
|
} __attribute__((packed)) Elf32_Shdr;
|
|
|
|
typedef struct {
|
|
u32 r_offset;
|
|
u32 r_info; /* sym, type: ELF32_R_... */
|
|
} Elf32_Rel;
|
|
|
|
/* Values for p_type. */
|
|
#define PT_LOAD 1 /* Loadable segment. */
|
|
|
|
/* Values for p_flags. */
|
|
#define PF_X 0x1 /* Executable. */
|
|
#define PF_W 0x2 /* Writable. */
|
|
#define PF_R 0x4 /* Readable. */
|
|
#define PF_RW (PF_R|PF_W)
|
|
|
|
/*************************************************************/
|
|
|
|
typedef struct {
|
|
u16 modattribute;
|
|
u8 modversion[2]; /* minor, major, etc... */
|
|
char modname[28];
|
|
void *gp_value;
|
|
void *ent_top;
|
|
void *ent_end;
|
|
void *stub_top;
|
|
void *stub_end;
|
|
} SceModuleInfo;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
u32 signature; //0
|
|
u16 mod_attribute; //4
|
|
u16 comp_attribute; //6 compress method:
|
|
// 0x0001=PRX Compress
|
|
// 0x0002=ELF Packed
|
|
// 0x0008=GZIP overlap
|
|
// 0x0200=KL4E(if not set, GZIP)
|
|
u8 module_ver_lo; //8
|
|
u8 module_ver_hi; //9
|
|
char modname[28]; //0xA
|
|
u8 mod_version; //0x26
|
|
u8 nsegments; //0x27
|
|
u32 elf_size; //0x28
|
|
u32 psp_size; //0x2C
|
|
u32 boot_entry; //0x30
|
|
u32 modinfo_offset; //0x34
|
|
int bss_size; //0x38
|
|
u16 seg_align[4]; //0x3C
|
|
u32 seg_address[4]; //0x44
|
|
int seg_size[4]; //0x54
|
|
u32 reserved[5]; //0x64
|
|
u32 devkit_version; //0x78
|
|
u8 decrypt_mode; //0x7C
|
|
u8 padding; //0x7D
|
|
u16 overlap_size; //0x7E
|
|
u8 key_data[0x30]; //0x80
|
|
u32 comp_size; //0xB0 kirk data_size
|
|
int _80; //0xB4 kirk data_offset
|
|
u32 unk_B8; //0xB8
|
|
u32 unk_BC; //0xBC
|
|
u8 key_data2[0x10]; //0xC0
|
|
u32 tag; //0xD0
|
|
u8 scheck[0x58]; //0xD4
|
|
u8 sha1_hash[0x14]; //0x12C
|
|
u8 key_data4[0x10]; //0x140
|
|
} __attribute__((packed)) PSP_Header2; //0x150
|
|
|
|
typedef struct
|
|
{
|
|
u32 signature; // 0
|
|
u16 attribute;
|
|
u8 module_ver_lo;
|
|
u8 module_ver_hi;
|
|
char modname[28];
|
|
u8 version; // 26
|
|
u8 nsegments; // 27
|
|
int elf_size; // 28
|
|
int psp_size; // 2C
|
|
u32 entry; // 30
|
|
u32 modinfo_offset; // 34
|
|
int bss_size; // 38
|
|
u16 seg_align[4]; // 3C
|
|
u32 seg_address[4]; // 44
|
|
int seg_size[4]; // 54
|
|
u32 reserved[5]; // 64
|
|
u32 devkitversion; // 78
|
|
u32 decrypt_mode; // 7C
|
|
u8 key_data0[0x30]; // 80
|
|
int comp_size; // B0
|
|
int _80; // B4
|
|
int reserved2[2]; // B8
|
|
u8 key_data1[0x10]; // C0
|
|
u32 tag; // D0
|
|
u8 scheck[0x58]; // D4
|
|
u32 key_data2; // 12C
|
|
u32 oe_tag; // 130
|
|
u8 key_data3[0x1C]; // 134
|
|
} __attribute__((packed)) PSP_Header;
|
|
|
|
/*************************************************************/
|
|
|