[Runtime] Search prx/ for adjacent modules

Titles ship third-party middleware in prx/ rather than sce_module/, so
those modules were never mapped and every NID they export resolved to the
unresolved stub. That stub returns 0x80020002, which a caller storing the
result as a pointer then dereferences.

DOOM + DOOM II (PPSA21444) carries libcohtml.Prospero (Gameface UI),
libRenoirCore.PS5, MediaDecoders.Prospero, libPlayFabMultiplayer and
party.prx there. Loading them resolves seven previously unknown NIDs and
replaces an access violation during UI init with real middleware code.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
shadowbeat070
2026-07-19 14:00:57 +02:00
parent 8e7d5a3285
commit cb9fc5139b
@@ -637,6 +637,7 @@ public sealed class SharpEmuRuntime : ISharpEmuRuntime
{
(Path: Path.Combine(ebootDirectory, "sce_module"), StartAtBoot: true),
(Path: Path.Combine(ebootDirectory, "sce_modules"), StartAtBoot: true),
(Path: Path.Combine(ebootDirectory, "prx"), StartAtBoot: true),
(Path: Path.Combine(ebootDirectory, "Media", "Modules"), StartAtBoot: true),
// Unity native plugins are loaded later through sceKernelLoadStartModule. Map
// them up front so the HLE loader can return a real module handle and dlsym