Files
phantomptrandClaude Opus 5.5 0d254e5433 6.5.0: Collection, Move to, Android on Android 17, helper on FW 5.50, web UI pairing
New:
- Collection: every game in your folders (local or on a NAS, scanned in
  place), grouped with updates and DLC, what each PS5 has, one-click
  installs, install links, organize / de-duplicate / clean up. Replaces PS
  Game Library (with an importer).
- Send a game folder as one image (.ffpfsc / .ffpkg / .exfat); Convert
  writes .ffpkg and .ffpfs too.
- Files: Move to... (instant or cross-drive, with a fit check) and Set
  permissions (777).
- Offline PSN sign-in from Profile.

Fixed:
- Android 17: local network permission (6.x could not connect).
- FW 5.50: own build of the SDK startup code, so the helper, installer and
  elfldr start.
- Web UI: Send helper (pairs it); no "ready" while unpaired.
- Screenshots decode in a child process (Linux crash loop).
- Installs no longer start queued uploads.
- Cross-drive moves check the copy before removing the original.
- Finished installs show as done after a reload; engine-unreachable
  explained with Restart engine; Health starts the installer.
- Dev: make run-client renders on macOS 27.

Better: "declined" installs explain Sony's code and how far it got;
0x80B21104 explained; Connection failures readable; keep-awake for all
installs; Games cards. Translations, FAQ, README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VM5Gzyt1uxKyJiWZAgd1w9
2026-10-08 09:31:54 -07:00

173 lines
4.4 KiB
C

/* Copyright (C) 2024 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#pragma once
#include "payload.h"
#define KERNEL_DLSYM(handle, sym) \
(sym=(void*)kernel_dynlib_dlsym(-1, handle, #sym))
/**
* dynamic library loaded in kernel memory.
**/
typedef struct dynlib_dynsec {
struct {
unsigned long le_next;
unsigned long le_prev;
} list_entry;
unsigned long sysvec;
unsigned int refcount;
unsigned long size;
unsigned long symtab;
unsigned long symtabsize;
unsigned long strtab;
unsigned long strtabsize;
unsigned long pltrela;
unsigned long pltrelasize;
unsigned long rela;
unsigned long relasize;
unsigned long hash;
unsigned long hashsize;
unsigned long dynamic;
unsigned long dynamicsize;
unsigned long sce_comment;
unsigned long sce_commentsize;
unsigned long sce_dynlib;
unsigned long sce_dynlibsize;
unsigned long unknown1; // execpath?
unsigned long unknown1size;
unsigned long buckets;
unsigned long bucketssize;
unsigned int nbuckets;
unsigned long chains;
unsigned long chainssize;
unsigned int nchains;
unsigned long unknown2[7];
} dynlib_dynsec_t;
/**
* an ELF loaded in kernel memory.
**/
typedef struct dynlib_obj {
unsigned long next;
unsigned long path;
unsigned long unknown0[2];
unsigned int refcount;
unsigned long handle;
unsigned long mapbase;
unsigned long mapsize;
unsigned long textsize;
unsigned long database;
unsigned long datasize;
unsigned long unknown1;
unsigned long unknown1size;
unsigned long entry;
unsigned long unknown2;
unsigned long vaddrbase;
unsigned int tlsindex;
unsigned long tlsinit;
unsigned long tlsinitsize;
unsigned long tlssize;
unsigned long tlsoffset;
unsigned long tlsalign;
unsigned long pltgot;
unsigned long unknown3[6];
unsigned long init;
unsigned long fini;
unsigned long eh_frame_hdr;
unsigned long eh_frame_hdr_size;
unsigned long eh_frame;
unsigned long eh_frame_size;
int status;
int flags;
unsigned long unknown4[5];
unsigned long dynsec;
unsigned long unknown5[6]; //fingerprint?
} dynlib_obj_t;
extern const unsigned long KERNEL_OFFSET_PROC_P_VMSPACE;
extern unsigned long KERNEL_OFFSET_VMSPACE_VM_PMAP;
extern unsigned long KERNEL_ADDRESS_DMAP_BASE;
extern unsigned long KERNEL_ADDRESS_IOMMU_SOFTC;
int kernel_copyout(unsigned long kaddr, void *uaddr, unsigned long len);
int kernel_copyin(const void *uaddr, unsigned long kaddr, unsigned long len);
unsigned long kernel_get_proc(int pid);
int kernel_proc_getpaddr(int pid, unsigned long vaddr,
unsigned long *paddr, unsigned long *plen);
unsigned long kernel_get_ucred_authid(int pid);
int kernel_set_ucred_authid(int pid, unsigned long authid);
int kernel_get_ucred_attrs(int pid, unsigned char attrs[32]);
int kernel_set_ucred_attrs(int pid, const unsigned char attrs[32]);
unsigned long kernel_get_ucred_prison(int pid);
int kernel_set_ucred_prison(int pid, unsigned long prison);
int kernel_get_ucred_caps(int pid, unsigned char caps[16]);
int kernel_set_ucred_caps(int pid, const unsigned char caps[16]);
unsigned long kernel_get_root_vnode(void);
unsigned long kernel_get_proc_rootdir(int pid);
int kernel_set_proc_rootdir(int pid, unsigned long vnode);
int kernel_dynlib_obj(int pid, unsigned int handle, dynlib_obj_t* obj);
int kernel_dynlib_handle(int pid, const char* basename, unsigned int *handle);
int kernel_dynlib_find_handle(int pid, unsigned long addr, unsigned int* handle);
unsigned long kernel_dynlib_mapbase_addr(int pid, unsigned int handle);
unsigned long kernel_dynlib_dlsym(int pid, unsigned int handle, const char* sym);
int kernel_dynlib_path(int pid, unsigned int handle, char* path, unsigned long size);
int kernel_mprotect(int pid, unsigned long addr, unsigned long size, int prot);
int __kernel_init(payload_args_t* args);