Skip to content

Stack overflow in GenericMethod_GetMethod_Hook when calling ClassInjector.RegisterTypeInIl2Cpp<T> #235

Description

@jim972329667

What happened?

The tool crashes during the process startup phase when running on the game Lost Castle 2. Same critical error as in issue #215, but with an important discovery and a subsequent error.

First Error (with UnityLogListening enabled)

ErrorLog.log
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at Il2CppInterop.Runtime.Injection.Hooks.GenericMethod_GetMethod_Hook.Hook(Il2CppInterop.Runtime.Runtime.Il2CppGenericMethod*, Boolean)
   at BepInEx.Unity.IL2CPP.IL2CPPChainloader.OnInvokeMethod(IntPtr, IntPtr, IntPtr, IntPtr)
   at Il2CppInterop.Runtime.IL2CPP.il2cpp_runtime_invoke(IntPtr, IntPtr, Void**, IntPtr ByRef)
   at Il2CppSystem.Type.GetMethod(System.String)
   at Il2CppInterop.Runtime.DelegateSupport.ConvertDelegate[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Delegate)
   at UnityEngine.Application+LogCallback.op_Implicit(System.Action`3<System.String,System.String,UnityEngine.LogType>)
   at BepInEx.Unity.IL2CPP.Logging.IL2CPPUnityLogSource..ctor()
   at BepInEx.Unity.IL2CPP.IL2CPPChainloader.OnInvokeMethod(IntPtr, IntPtr, IntPtr, IntPtr)

Disabling UnityLogListening allows the mod to load normally, bypassing the first error.

Second Error (after disabling UnityLogListening)

ErrorLog.log
Stack overflow.
   at Il2CppInterop.Runtime.Injection.Hooks.GenericMethod_GetMethod_Hook.Hook(Il2CppInterop.Runtime.Runtime.Il2CppGenericMethod*, Boolean)
   at BepInEx.Unity.IL2CPP.IL2CPPChainloader.OnInvokeMethod(IntPtr, IntPtr, IntPtr, IntPtr)
   at Il2CppInterop.Runtime.IL2CPP.il2cpp_runtime_invoke(IntPtr, IntPtr, Void**, IntPtr ByRef)
   at Il2CppSystem.Reflection.MethodInfo.MakeGenericMethod(Il2CppInterop.Runtime.InteropTypes.Arrays.Il2CppReferenceArray`1<Il2CppSystem.Type>)
   at UnityEngine.GameObject+MethodInfoStoreGeneric_AddComponent_Public_T_0`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]..cctor()
   at UnityEngine.GameObject.AddComponent[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]()
   at UniverseLib.UniversalBehaviour.Setup()
   at UniverseLib.Universe.Init(Single, System.Action, System.Action`2<System.String,UnityEngine.LogType>, UniverseLib.Config.UniverseLibConfig)
   at ZGScriptTrainer.ZGScriptTrainer.Init()
   at ZGScriptTrainer.ZGScriptTrainer.Load()
   at BepInEx.Unity.IL2CPP.IL2CPPChainloader.LoadPlugin(BepInEx.PluginInfo, System.Reflection.Assembly)
   at BepInEx.Bootstrap.BaseChainloader`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].LoadPlugins(System.Collections.Generic.IList`1<BepInPluginInfo>)
   at BepInEx.Bootstrap.BaseChainloader`1[[System.__Canon, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Execute()
   at BepInEx.Unity.IL2CPP.IL2CPPChainloader.OnInvokeMethod(IntPtr, IntPtr, IntPtr, IntPtr)
LogOutput.log
[Message: Preloader] BepInEx 6.0.0-be.738 - LostCastle2 (2025/9/29 21:58:02)
[Message: Preloader] Built from commit af0cba71fb69324aa4dfd651422bfa020309ce15
[Info   :   BepInEx] System platform: Windows 10 64-bit
[Info   :   BepInEx] Process bitness: 64-bit (x64)
[Info   :   BepInEx] Running under Unity 6000.0.57f1
[Info   :   BepInEx] Runtime version: 6.0.7
[Info   :   BepInEx] Runtime information: .NET 6.0.7
[Info   : Preloader] 0 patcher plugins loaded
[Info   : Preloader] 0 assemblies discovered
[Message:AssemblyPatcher] Executing 0 patch(es)
[Message:   BepInEx] Chainloader initialized
[Debug  : Preloader] Runtime invoke pointer: 0x7FFE07368360
[Debug  :DobbyDetour] Preparing detour from 0x7FFE07368360 to 0x7FFE166A3264
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7370000
[Debug  :DobbyDetour] Original: 7FFE07368360, Trampoline: 7FFDC7370000, diff: 3FFF8360
[Debug  : Preloader] Runtime invoke patched
[Debug  :InteropManager] Preloaded 200 interop assemblies in 692ms
[Debug  :   BepInEx] Examining 'E:\program files (x86)\steam\steamapps\common\Lost Castle 2\BepInEx\plugins\UniverseLib.IL2CPP.Interop.dll'
[Debug  :   BepInEx] Examining 'E:\program files (x86)\steam\steamapps\common\Lost Castle 2\BepInEx\plugins\ZGScriptTrainer.dll'
[Info   :   BepInEx] 1 plugin to load
[Info   :   BepInEx] Loading [失落城堡2内置修改器 1.1.0]
[Debug  :Il2CppInterop] il2cpp_object_get_virtual_method: 0x7FFE07368260
[Debug  :Il2CppInterop] Object::GetVirtualMethod: 0x7FFE07348290
[Debug  :Il2CppInterop] GenericMethod::GetMethod found: 0x7FFE07377880
[Debug  :DobbyDetour] Preparing detour from 0x7FFE07377880 to 0x7FFE166A3424
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7380000
[Debug  :DobbyDetour] Original: 7FFE07377880, Trampoline: 7FFDC7380000, diff: 3FFF7880
[Debug  :Il2CppInterop] il2cpp_image_get_class: 0x7FFE07367F10
[Debug  :Il2CppInterop] Image::GetType: 0x7FFE0736E410
[Debug  :Il2CppInterop] imageGetTypeXrefs.Length: 2
[Debug  :Il2CppInterop] getTypeInfoFromHandle: 7FFE07356B00
[Debug  :Il2CppInterop] MetadataCache::GetTypeInfoFromTypeDefinitionIndex found: 0x7FFE0731B220
[Debug  :DobbyDetour] Preparing detour from 0x7FFE0731B220 to 0x7FFE166A3464
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7370020
[Debug  :DobbyDetour] Original: 7FFE0731B220, Trampoline: 7FFDC7370020, diff: 3FFAB200
[Debug  :Il2CppInterop] Class::GetDefaultFieldValue found: 0x7FFE07319C80
[Debug  :DobbyDetour] Preparing detour from 0x7FFE07319C80 to 0x7FFE166A34A4
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7370040
[Debug  :DobbyDetour] Original: 7FFE07319C80, Trampoline: 7FFDC7370040, diff: 3FFA9C40
[Warning:Il2CppInterop] Class::Init signatures have been exhausted, using a substitute!
[Debug  :Il2CppInterop] Picked mono_class_instance_size as a Class::Init substitute
[Debug  :Il2CppInterop] Class::Init: 0x7FFE07368B70
[Debug  :Il2CppInterop] il2cpp_class_from_il2cpp_type: 0x7FFE07310A90
[Debug  :Il2CppInterop] Class::FromIl2CppType found: 0x7FFE073539A0
[Debug  :DobbyDetour] Preparing detour from 0x7FFE073539A0 to 0x7FFE166A34E4
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7370060
[Debug  :DobbyDetour] Original: 7FFE073539A0, Trampoline: 7FFDC7370060, diff: 3FFE3940
[Debug  :Il2CppInterop] il2cpp_class_from_name: 0x7FFE07367800
[Debug  :Il2CppInterop] Class::FromName found: 0x7FFE07353F00
[Debug  :DobbyDetour] Preparing detour from 0x7FFE07353F00 to 0x7FFE166A3524
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7370080
[Debug  :DobbyDetour] Original: 7FFE07353F00, Trampoline: 7FFDC7370080, diff: 3FFE3E80
[Debug  :Il2CppInterop] GarbageCollector::RunFinalizer found: 0x7FFE07343DC0
[Debug  :DobbyDetour] Preparing detour from 0x7FFE07343DC0 to 0x7FFE166A3564
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC73700A0
[Debug  :DobbyDetour] Original: 7FFE07343DC0, Trampoline: 7FFDC73700A0, diff: 3FFD3D20
[Info   :Il2CppInterop] Registered mono type ZGScriptTrainer.UI.Models.TooltipGUI in il2cpp domain
[Info   :  HarmonyX] ### Harmony id=ScriptTrainer.Jim97.Lost_Castle_2, version=2.10.2.0, location=E:\program files (x86)\steam\steamapps\common\Lost Castle 2\BepInEx\core\0Harmony.dll, env/clr=6.0.7, platform=Win32NT, ptrsize:runtime/env=8/Bits64, Windows
### Started from static void ZGScriptTrainer.ZGScriptTrainer::.cctor(), location E:\program files (x86)\steam\steamapps\common\Lost Castle 2\BepInEx\plugins\ZGScriptTrainer.dll
### At 2025-10-03 08.49.29
[Info   :  HarmonyX] Patching LC2.BagSystem+CheckPickUpType LC2.BagSystem::GetPickUpType(LC2.Item item) with 0 prefixes, 1 postfixes, 0 transpilers, 0 finalizers
1 postfixes:
* static void ZGScriptTrainer.ScriptPatch+BagSystemPatch::Postfix(LC2.BagSystem+CheckPickUpType& __result)

[Info   :  HarmonyX] Running ILHook manipulator on LC2.BagSystem+CheckPickUpType LC2.BagSystem::GetPickUpType(LC2.Item item)
[Info   :  HarmonyX] Writing postfixes
[Debug  :DobbyDetour] Preparing detour from 0x7FFE079689A0 to 0x7FFE166A3B24
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7970000
[Debug  :DobbyDetour] Original: 7FFE079689A0, Trampoline: 7FFDC7970000, diff: 3FFF89A0
[Info   :  HarmonyX] Patching LC2.BagSystem+CheckPickUpType LC2.BagSystem::GetPickUpType_Shop(LC2.Item item, int price) with 0 prefixes, 1 postfixes, 0 transpilers, 0 finalizers
1 postfixes:
* static void ZGScriptTrainer.ScriptPatch+BagSystemPatch::Postfix(LC2.BagSystem+CheckPickUpType& __result)

[Info   :  HarmonyX] Running ILHook manipulator on LC2.BagSystem+CheckPickUpType LC2.BagSystem::GetPickUpType_Shop(LC2.Item item, int price)
[Info   :  HarmonyX] Writing postfixes
[Debug  :DobbyDetour] Preparing detour from 0x7FFE07968400 to 0x7FFE166A3B64
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7970020
[Debug  :DobbyDetour] Original: 7FFE07968400, Trampoline: 7FFDC7970020, diff: 3FFF83E0
[Info   :  HarmonyX] Patching LC2.BagSystem+CheckPickUpType LC2.BagSystem::GetPickUpType_PassiveProps(LC2.PassiveProps passiveProps) with 0 prefixes, 1 postfixes, 0 transpilers, 0 finalizers
1 postfixes:
* static void ZGScriptTrainer.ScriptPatch+BagSystemPatch::Postfix(LC2.BagSystem+CheckPickUpType& __result)

[Info   :  HarmonyX] Running ILHook manipulator on LC2.BagSystem+CheckPickUpType LC2.BagSystem::GetPickUpType_PassiveProps(LC2.PassiveProps passiveProps)
[Info   :  HarmonyX] Writing postfixes
[Debug  :DobbyDetour] Preparing detour from 0x7FFE07967F20 to 0x7FFE166A3BA4
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7970040
[Debug  :DobbyDetour] Original: 7FFE07967F20, Trampoline: 7FFDC7970040, diff: 3FFF7EE0
[Info   :  HarmonyX] Patching LC2.Power.PowerEntry LC2.Weapon::GetNewPerk(bool addNewPerk) with 0 prefixes, 1 postfixes, 0 transpilers, 0 finalizers
1 postfixes:
* static void ZGScriptTrainer.ScriptPatch+WeaponOverridePatch_GetNewPerk::Postfix(LC2.Weapon __instance, LC2.Power.PowerEntry& __result)

[Info   :  HarmonyX] Running ILHook manipulator on LC2.Power.PowerEntry LC2.Weapon::GetNewPerk(bool addNewPerk)
[Info   :  HarmonyX] Writing postfixes
[Debug  :DobbyDetour] Preparing detour from 0x7FFE0767DBF0 to 0x7FFE166A3BE4
[Debug  :DobbyDetour] Prepared detour; Trampoline: 0x7FFDC7970060
[Debug  :DobbyDetour] Original: 7FFE0767DBF0, Trampoline: 7FFDC7970060, diff: 3FD0DB90
[Info   :  HarmonyX] ### Harmony id=com.sinai.universelib, version=2.10.2.0, location=E:\program files (x86)\steam\steamapps\common\Lost Castle 2\BepInEx\core\0Harmony.dll, env/clr=6.0.7, platform=Win32NT, ptrsize:runtime/env=8/Bits64, Windows
### Started from static void UniverseLib.Universe::.cctor(), location E:\program files (x86)\steam\steamapps\common\Lost Castle 2\BepInEx\plugins\UniverseLib.IL2CPP.Interop.dll
### At 2025-10-03 08.49.29
[Message:失落城堡2内置修改器] [UniverseLib] UniverseLib 1.5.1 initializing...
[Info   :Il2CppInterop] Registered mono type UniverseLib.UniversalBehaviour in il2cpp domain

Steps to Reproduce

  • Install BepInEx
  • With UnityLogListening enabled: Game crashes with AccessViolationException
  • With UnityLogListening disabled: Mod starts loading but crashes with StackOverflow during component initialization

BepInEx Distribution

  • BepInEx 6.0.0-be.738

Environment

  • OS: Win 11
  • Unity: 6000.0.57f1
  • Game: Lost Castle 2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions