D118 - The real library table, found by prediction rather than by guessing

decided ยท 2026-08-19

D117 established that library attribution was fabricated. This is the fix, and the method is worth as much as the result.

Do not guess which tag it is - dump them all and test a prediction that can fail. The correct table had to satisfy two things nothing else would: it must hold at least 55 entries (the observed library ids run 0..=54, and DT_NEEDED holds 52), and it must put socket functions somewhere sane.

Two vendor tags in the OS-specific range carry (id, name) pairs:

Tag Entries Indexed by
0x61000049 55 an import's library id, exactly 0..=54
0x61000045 52 an import's module id, exactly 1..=52
DT_NEEDED 52 nothing - a different list with different contents

The value packs an id in the top sixteen bits and a string-table offset in the bottom thirty-two.

The prediction held. setsockopt, socket, bind, recv and pthread_mutex_lock all resolve to libScePosix; printf, malloc and memcpy to libc; sceKernelDirectMemoryQuery to libkernel. Under the old mapping every one of the POSIX calls sat in a graphics driver. libScePosix does not appear in DT_NEEDED at all, which is the clearest possible sign the two lists are unrelated.

Nothing was read to find this. The file says what it contains; the work was deciding what question to ask of it.