exlaunch icon indicating copy to clipboard operation
exlaunch copied to clipboard

Mods made with exlaunch are not compatible with each other.

Open MediaMoots opened this issue 1 year ago • 0 comments

2 mods are installed, one in subsdk8 and the other, subsdk9.

subsdk8 = Mod A subsdk9 = Mod B

RTLD seems to load Mod B first (Print strings in Mod B are called) Then, Mod B's exl::hook::Initialize(); is called, causing the game to crash.

Ryujinx gives this error (host memory):

00:00:29.937 |W| HLE.GuestThread.42 KernelSvc : MapProcessMemory() = InvalidSize
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at ARMeilleure.Translation.Translator.Execute(ARMeilleure.State.ExecutionContext, UInt64)
   at Ryujinx.Cpu.Jit.JitCpuContext.Execute(Ryujinx.Cpu.IExecutionContext, UInt64)
   at Ryujinx.HLE.HOS.ArmProcessContext`1[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Execute(Ryujinx.Cpu.IExecutionContext, UInt64)
   at Ryujinx.HLE.HOS.Kernel.Threading.KThread.ThreadStart()

Ryujinx log with software memory:

00:00:28.952 |W| HLE.GuestThread.42 KernelSvc : MapProcessMemory() = InvalidSize
00:00:28.990 |E| HLE.GuestThread.42 Application : Unhandled exception caught: Ryujinx.Memory.InvalidMemoryRegionException: va=0x6969696969696969, size=0x0000000000000008
   at Ryujinx.Cpu.Jit.MemoryManager.Write(UInt64 va, ReadOnlySpan`1 data) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 170
   at Ryujinx.Cpu.Jit.MemoryManager.Write[T](UInt64 va, T value) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 164
   at ARMeilleure.Instructions.NativeInterface.WriteUInt64(UInt64 address, UInt64 value) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Instructions\NativeInterface.cs:line 136
   at ARMeilleure.Translation.Translator.Execute(ExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Translation\Translator.cs:line 155
   at Ryujinx.Cpu.Jit.JitCpuContext.Execute(IExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\JitCpuContext.cs:line 32
   at Ryujinx.HLE.HOS.ArmProcessContext`1.Execute(IExecutionContext context, UInt64 codeAddress) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\ArmProcessContext.cs:line 60
   at Ryujinx.HLE.HOS.Kernel.Threading.KThread.ThreadStart() in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\Kernel\Threading\KThread.cs:line 1264
Unhandled exception. Ryujinx.Memory.InvalidMemoryRegionException: va=0x6969696969696969, size=0x0000000000000008
   at Ryujinx.Cpu.Jit.MemoryManager.Write(UInt64 va, ReadOnlySpan`1 data) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 170
   at Ryujinx.Cpu.Jit.MemoryManager.Write[T](UInt64 va, T value) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 164
   at ARMeilleure.Instructions.NativeInterface.WriteUInt64(UInt64 address, UInt64 value) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Instructions\NativeInterface.cs:line 136
   at ARMeilleure.Translation.Translator.Execute(ExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Translation\Translator.cs:line 155
   at Ryujinx.Cpu.Jit.JitCpuContext.Execute(IExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\JitCpuContext.cs:line 32
   at Ryujinx.HLE.HOS.ArmProcessContext`1.Execute(IExecutionContext context, UInt64 codeAddress) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\ArmProcessContext.cs:line 60
   at Ryujinx.HLE.HOS.Kernel.Threading.KThread.ThreadStart() in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\Kernel\Threading\KThread.cs:line 1264

To test, if Mod B's exl::hook::Initialize(); is commented out, both Mod B and A will load (Of course, Mod B's hooks will not work)

The same behavior is observed if we swap Mod B with Mod A's subsdks.

MediaMoots avatar Oct 15 '23 16:10 MediaMoots