The NID patcher rebuilds .dynstr keeping only the DT_NEEDED and DT_SONAME strings, so DT_RUNPATH kept a stale offset and the patched libraries shipped with an empty runpath. A library could then load only those sibling prx that the executable already loads itself: libSceVideoOut.prx needs libSceKeyboard.prx, which a title that does not import libSceKeyboard never loads, so it fails at startup. The patcher now keeps DT_RPATH and DT_RUNPATH strings, and the prx libraries are linked with a $ORIGIN runpath instead of the build directory, so they find each other wherever they are copied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| BinaryPatcherFactory.cpp | ||
| ElfNidPatcher.cpp | ||
| ExportExclusions.cpp | ||
| NidCompute.cpp | ||
| NidResolver.cpp | ||
| PeNidPatcher.cpp | ||
| Sha1.cpp | ||
| main.cpp | ||