mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-01-02 15:02:11 +00:00
93 lines
2.0 KiB
C++
93 lines
2.0 KiB
C++
#pragma once
|
|
#include "Loader.h"
|
|
|
|
struct SceHeader
|
|
{
|
|
u32 se_magic;
|
|
u32 se_hver;
|
|
u16 se_flags;
|
|
u16 se_type;
|
|
u32 se_meta;
|
|
u64 se_hsize;
|
|
u64 se_esize;
|
|
|
|
void Load(vfsStream& f)
|
|
{
|
|
se_magic = Read32(f);
|
|
se_hver = Read32(f);
|
|
se_flags = Read16(f);
|
|
se_type = Read16(f);
|
|
se_meta = Read32(f);
|
|
se_hsize = Read64(f);
|
|
se_esize = Read64(f);
|
|
}
|
|
|
|
void Show()
|
|
{
|
|
ConLog.Write("Magic: %08x", se_magic);
|
|
ConLog.Write("Class: %s", "SELF");
|
|
ConLog.Write("hver: 0x%08x", se_hver);
|
|
ConLog.Write("flags: 0x%04x", se_flags);
|
|
ConLog.Write("type: 0x%04x", se_type);
|
|
ConLog.Write("meta: 0x%08x", se_meta);
|
|
ConLog.Write("hsize: 0x%llx", se_hsize);
|
|
ConLog.Write("esize: 0x%llx", se_esize);
|
|
}
|
|
|
|
bool CheckMagic() const { return se_magic == 0x53434500; }
|
|
};
|
|
|
|
struct SelfHeader
|
|
{
|
|
u64 se_htype;
|
|
u64 se_appinfooff;
|
|
u64 se_elfoff;
|
|
u64 se_phdroff;
|
|
u64 se_shdroff;
|
|
u64 se_secinfoff;
|
|
u64 se_sceveroff;
|
|
u64 se_controloff;
|
|
u64 se_controlsize;
|
|
u64 pad;
|
|
|
|
void Load(vfsStream& f)
|
|
{
|
|
se_htype = Read64(f);
|
|
se_appinfooff = Read64(f);
|
|
se_elfoff = Read64(f);
|
|
se_phdroff = Read64(f);
|
|
se_shdroff = Read64(f);
|
|
se_secinfoff = Read64(f);
|
|
se_sceveroff = Read64(f);
|
|
se_controloff = Read64(f);
|
|
se_controlsize = Read64(f);
|
|
pad = Read64(f);
|
|
}
|
|
|
|
void Show()
|
|
{
|
|
ConLog.Write("header type: 0x%llx", se_htype);
|
|
ConLog.Write("app info offset: 0x%llx", se_appinfooff);
|
|
ConLog.Write("elf offset: 0x%llx", se_elfoff);
|
|
ConLog.Write("program header offset: 0x%llx", se_phdroff);
|
|
ConLog.Write("section header offset: 0x%llx", se_shdroff);
|
|
ConLog.Write("section info offset: 0x%llx", se_secinfoff);
|
|
ConLog.Write("sce version offset: 0x%llx", se_sceveroff);
|
|
ConLog.Write("control info offset: 0x%llx", se_controloff);
|
|
ConLog.Write("control info size: 0x%llx", se_controlsize);
|
|
}
|
|
};
|
|
|
|
class SELFLoader : public LoaderBase
|
|
{
|
|
vfsStream& self_f;
|
|
|
|
SceHeader sce_hdr;
|
|
SelfHeader self_hdr;
|
|
|
|
public:
|
|
SELFLoader(vfsStream& f);
|
|
|
|
virtual bool LoadInfo();
|
|
virtual bool LoadData(u64 offset = 0);
|
|
}; |