453. The guest was carrying the answer

2026-09-08 - directed, continuing 452

Nothing new on the bus this pass: six requests open, two of them mine, none claimed, and no sweep since 17:04. So all local.

Three passes of narrowing, answered by one run

Worklogs 451 and 452 both ended at the same sentence - the payload entered with the handoff argument calls a null pointer at image+0x28a163 and emits nothing - and 452 gave up on it explicitly: "going further needs that ELF's symbol table, and nothing on this machine reads one."

That was true and it was the wrong thing to conclude. D390 had already said the payloads carry symbol tables; what nothing here did was read one, because loading needs program headers and the section table is a link-time artefact every commercial title is stripped of.

Container::function_symbols now walks the section headers for SHT_SYMTAB, and every address the fault path prints gains the guest's own name for it:

orbistoun: the module names 1352 of its own functions, so a fault in it can say which
orbistoun: guest fault: instruction fetch from 0x0 while executing at 0x0
  from 0x40000028aaf3 (image+0x28aaf3 obs_sink_open+0x73)
  from 0x4000002878a5 (image+0x2878a5 obs_run_all+0x85)
  from 0x4000002b2d3e (image+0x2b2d3e obscene_start+0x12e)

obs_sink_open makes four sceKernelMkdir calls - which the trace shows completing - and then asks for the time. That call goes to zero (D628).

And it stopped there, deliberately

sceKernelGettimeofday has a stub slot: ORBISTOUN_DUMP arms it, and captures nothing. So the guest is not reaching the stub, it is calling 0 - the relocation binding that import was never applied, with a stub sitting there unpointed-at.

That is loader work and this project's brief confines it to user-space library and ABI-stub implementations. Recorded exactly rather than fixed: whoever picks it up has a function, an offset, a symbol name, and the knowledge that the stub already exists.

What the reader refuses to do

Surprises

Next