From 3b8daaeba76a870e1709f4d20ecb718a9924cb34 Mon Sep 17 00:00:00 2001 From: "Felipe Gatica (Paragati Das)" Date: Tue, 13 Jan 2026 22:20:41 -0300 Subject: [PATCH] New Class::Init pattern for unity 2021.3.56 Tested in linux --- Il2CppInterop.Runtime/Injection/InjectorHelpers.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Il2CppInterop.Runtime/Injection/InjectorHelpers.cs b/Il2CppInterop.Runtime/Injection/InjectorHelpers.cs index be0597e0..43187777 100644 --- a/Il2CppInterop.Runtime/Injection/InjectorHelpers.cs +++ b/Il2CppInterop.Runtime/Injection/InjectorHelpers.cs @@ -144,6 +144,12 @@ internal static IntPtr GetIl2CppMethodPointer(MethodBase proxyMethod) private static readonly MemoryUtils.SignatureDefinition[] s_ClassInitSignatures = { + new MemoryUtils.SignatureDefinition + { + pattern = "\xE8\x00\x00\x00\x00\x8B\x3B\x48\x83\xC3", + mask = "x????xxxxx", + xref = true + }, new MemoryUtils.SignatureDefinition { pattern = "\xE8\x00\x00\x00\x00\x0F\xB7\x47\x28\x83", @@ -162,7 +168,12 @@ private static d_ClassInit FindClassInit() { static nint GetClassInitSubstitute() { - if (TryGetIl2CppExport("mono_class_instance_size", out nint classInit)) + if (TryGetIl2CppExport("il2cpp_runtime_class_init", out nint classInit)) + { + Logger.Instance.LogTrace("Picked il2cpp_runtime_class_init as a Class::Init substitute"); + return classInit; + } + if (TryGetIl2CppExport("mono_class_instance_size", out classInit)) { Logger.Instance.LogTrace("Picked mono_class_instance_size as a Class::Init substitute"); return classInit;