sys_spu: Fix sys_spu_image_open

This commit is contained in:
elad335 2025-04-17 18:36:03 +03:00
parent b8d1d7cdf1
commit c2bfcb0bde
2 changed files with 19 additions and 3 deletions

View file

@ -1371,7 +1371,10 @@ fs::file decrypt_self(const fs::file& elf_or_self, const u8* klic_key, SelfAddit
elf_or_self.seek(0);
// Check SELF header first. Check for a debug SELF.
if (elf_or_self.size() >= 4 && elf_or_self.read<u32>() == "SCE\0"_u32)
u32 file_type = umax;
elf_or_self.read_at(0, &file_type, sizeof(file_type));
if (file_type == "SCE\0"_u32)
{
if (fs::file res = CheckDebugSelf(elf_or_self))
{

View file

@ -94,7 +94,7 @@ void sys_spu_image::load(const fs::file& stream)
const s32 nsegs = sys_spu_image::get_nsegs(obj.progs);
const u32 mem_size = nsegs * sizeof(sys_spu_segment) + ::size32(stream);
const vm::ptr<sys_spu_segment> segs = vm::cast(vm::alloc(mem_size, vm::main));
const vm::ptr<sys_spu_segment> segs = vm::cast(vm::reserve_map(vm::user64km 0, 0x10000000)->alloc(mem_size));
//const u32 entry = obj.header.e_entry;
@ -517,7 +517,20 @@ error_code sys_spu_image_open(ppu_thread& ppu, vm::ptr<sys_spu_image> img, vm::c
u128 klic = g_fxo->get<loaded_npdrm_keys>().last_key();
const fs::file elf_file = decrypt_self(std::move(file), reinterpret_cast<u8*>(&klic));
fs::file elf_file;
// Check for SELF header
u32 file_type = umax;
file.read_at(0, &file_type, sizeof(file_type));
if (file_type == "SCE\0"_u32)
{
elf_file = decrypt_self(file, reinterpret_cast<u8*>(&klic));
}
else
{
elf_file = std::move(file);
}
if (!elf_file)
{