D496 - These modules declare no code to run at load, and DT_FINI is why that is a finding

measured - 2026-09-03 (six places checked, one asymmetry that settles it)

D495 found the guest calling sceKernelLoadStartModule by full path for both modules it ships, and orbistoun answering a handle without starting anything. The obvious next question is what "start" runs. These modules do not say.

Six places, checked

where what is there
DT_INIT_ARRAY / DT_INIT_ARRAYSZ both 0x0 (D491)
DT_PREINIT_ARRAY absent from the tag list entirely
module_start / module_stop / module_prolog exports none of the three hashes (D492)
ELF entry point 0x0, on all three modules the title ships
PT_SCE_MODULE_PARAM SDK versions at +0x10/+0x14, per selfish's own writer - not a start address
the sibling projects obSCEne and prosperous have nothing on it

And DT_INIT = 0x10 points at zeros

D491 recorded DT_INIT = 0x10 as "not an address - base + 0x10 is the ELF header". The conclusion was right and the reason was wrong, which is worth correcting because the reason is what a reader would reuse.

Segment 0 is PT_LOAD, executable, mapped at the module base, and its contents begin at file offset 0x4000 - so base + 0x10 is not the header. It is inside the executable segment, and the bytes there are:

vaddr 0x00:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
vaddr 0x10:  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Zeros. Calling it would execute add [rax], al until something faulted. Not a constructor, for a different reason than the one written down.

The asymmetry is the actual evidence

DT_FINI in the same module is 0x1487860 - a real offset, eighty-two bytes from the end of segment 0's copied run, which is where a last function in .text would sit.

So the same toolchain, writing the same table, emitted a genuine offset for the finaliser and left the initialiser pointing at padding. That makes the absence deliberate rather than a format quirk this project has failed to decode. One missing tag is a gap in understanding; one missing tag beside its populated twin is a statement.

What follows

These modules declare no code to run at load. So either the platform runs nothing on them at LoadStartModule - and the .bss is filled by the game calling in - or it runs something named by a mechanism none of the six places above describes.

The first is now the cheaper hypothesis, and it fits: the game calls two of the module's five bound exports and dies in the second, having written exactly one string (/app0/Media) into two of 318,492 .bss words (D495). A module being driven rather than started is the picture D492 already pointed at.

Not concluded: that the platform runs nothing. Six absences are not a proof, and the run that would settle it is on hardware - obSCEne can load a module it built and report whether anything of its own executed before the caller touched it.