Files

93 lines
3.8 KiB
Lua

-- sources: Y2JB kernel_offset.js, ps5-payload-dev SDK, PS5_KernelOffset.java
fw_offsets = {
["4.00"] = { ALLPROC=0x027EDCB8, SECURITY_FLAGS=0x06506474, ROOTVNODE=0x066E74C0, KERNEL_PMAP_STORE=0x03257A78, GVMSPACE=0x064C3F80 },
["4.02"] = "4.00", ["4.03"] = "4.00", ["4.50"] = "4.00", ["4.51"] = "4.00",
["5.00"] = { ALLPROC=0x0291DD00, SECURITY_FLAGS=0x066466EC, ROOTVNODE=0x06853510, KERNEL_PMAP_STORE=0x03398A88, GVMSPACE=0x06603FB0 },
["5.02"] = "5.00", ["5.10"] = "5.00",
["5.50"] = { ALLPROC=0x0291DD00, SECURITY_FLAGS=0x066466EC, ROOTVNODE=0x06853510, KERNEL_PMAP_STORE=0x03394A88, GVMSPACE=0x06603FB0 },
["6.xx"] = { ALLPROC=0x02869D20, SECURITY_FLAGS=0x065968EC, ROOTVNODE=0x0679F510, KERNEL_PMAP_STORE=0x032E4358, GVMSPACE=0x065540F0 },
["7.xx"] = { ALLPROC=0x02859D50, SECURITY_FLAGS=0x00AC8064, ROOTVNODE=0x030C7510, KERNEL_PMAP_STORE=0x02E2C848, GVMSPACE=0x02E76090 },
["8.xx"] = { ALLPROC=0x02875D50, SECURITY_FLAGS=0x00AC3064, ROOTVNODE=0x030FB510, KERNEL_PMAP_STORE=0x02E48848, GVMSPACE=0x02EAA090 },
["9.00"] = { ALLPROC=0x02755D50, SECURITY_FLAGS=0x00D72064, ROOTVNODE=0x02FDB510, KERNEL_PMAP_STORE=0x02D28B78, GVMSPACE=0x02D8A570 },
["9.05"] = { ALLPROC=0x02755D50, SECURITY_FLAGS=0x00D73064, ROOTVNODE=0x02FDB510, KERNEL_PMAP_STORE=0x02D28B78, GVMSPACE=0x02D8A570 },
["9.xx"] = "9.05",
["10.xx"] = { ALLPROC=0x02765D70, SECURITY_FLAGS=0x00D79064, ROOTVNODE=0x02FA3510, KERNEL_PMAP_STORE=0x02CF0EF8, GVMSPACE=0x02D52570 },
["11.xx"] = { ALLPROC=0x02875D70, SECURITY_FLAGS=0x00D8C064, ROOTVNODE=0x030B7510, KERNEL_PMAP_STORE=0x02E04F18, GVMSPACE=0x02E66570 },
["12.xx"] = { ALLPROC=0x02885E00, SECURITY_FLAGS=0x00D83064, ROOTVNODE=0x030D7510, KERNEL_PMAP_STORE=0x02E1CFB8, GVMSPACE=0x02E7E570 },
["13.00"] = { ALLPROC=0x028C5E00, SECURITY_FLAGS=0x00D99064, ROOTVNODE=0x03133510, KERNEL_PMAP_STORE=0x02E74FF8, GVMSPACE=0x02ED6570 },
["13.20"] = { ALLPROC=0x028C5E00, SECURITY_FLAGS=0x00D99064, ROOTVNODE=0x03133510, KERNEL_PMAP_STORE=0x02E74FF8, GVMSPACE=0x02ED6570 }
}
local struct_offsets = {
-- proc
PROC_PID = 0xBC,
PROC_UCRED = 0x40,
PROC_FD = 0x48,
PROC_VM_SPACE = 0x200,
-- ucred
UCRED_CR_UID = 0x04,
UCRED_CR_RUID = 0x08,
UCRED_CR_SVUID = 0x0C,
UCRED_CR_NGROUPS= 0x10,
UCRED_CR_RGID = 0x14,
UCRED_CR_PRISON = 0x30,
UCRED_CR_SCEAUTHID = 0x58,
UCRED_CR_SCECAPS0 = 0x60,
UCRED_CR_SCECAPS1 = 0x68,
UCRED_CR_SCEATTRS = 0x83,
-- filedesc
FILEDESC_OFILES = 0x00,
FDESCENTTBL_HDR = 8,
FILEDESCENT_SIZE= 0x30,
-- fd
FD_RDIR = 0x10,
FD_JDIR = 0x18,
KQ_FDP = 0xA8,
KL_LOCK = 0x68,
-- net
INPCB_PKTOPTS = 0x120,
IP6PO_RTHDR = 0x70,
-- pipe sigio
PIPE_SIGIO = 0xD8,
-- pmap
PMAP_CR3 = 0x28,
PMAP_PML4 = 0x20,
-- gpu vmspace
SIZEOF_GVMSPACE = 0x100,
GVMSPACE_START_VA = 0x08,
GVMSPACE_SIZE = 0x10,
GVMSPACE_PAGE_DIR = 0x38,
TARGET_ID_REL = 0x09,
QA_FLAGS_REL = 0x24,
UTOKEN_REL = 0x8C,
}
local function resolve_entry(key)
local entry = fw_offsets[key]
for _ = 1, 5 do
if type(entry) ~= "string" then break end
entry = fw_offsets[entry]
end
return type(entry) == "table" and entry or nil
end
function get_offsets(fw_version)
local major, minor = fw_version:match("(%d+)%.(%d+)")
if not major then return nil end
local exact_key = tostring(tonumber(major)) .. "." .. minor
local entry = resolve_entry(exact_key)
if not entry then
entry = resolve_entry(tostring(tonumber(major)) .. ".xx")
end
if not entry then return nil end
local OFF = {}
for k, v in pairs(entry) do OFF[k] = v end
for k, v in pairs(struct_offsets) do OFF[k] = v end
return OFF
end