public static bool InitializeIl2Cpp(Process program)
        {
            string programPath = Path.GetDirectoryName(program.MainModule.FileName);
            string metaFile    = Path.Combine(programPath, @"oriwotw_Data\il2cpp_data\Metadata\global-metadata.dat");
            string ilFile      = Path.Combine(programPath, @"GameAssembly.dll");

            if (!File.Exists(metaFile) || !File.Exists(ilFile))
            {
                return(false);
            }

            byte[] metaDataBytes = File.ReadAllBytes(metaFile);
            byte[] il2CppBytes   = File.ReadAllBytes(ilFile);
            Il2CppReader.Init(il2CppBytes, metaDataBytes, out Metadata metaData, out Il2CppData il2Cpp);
            Il2CppExecutor executor = new Il2CppExecutor(metaData, il2Cpp);

            Decompiler = new Il2CppDecompiler(executor);
            return(true);
        }
        public IntPtr FindPointer(Process program, string asmName)
        {
            if (il2Cpp == null || lastPID != program.Id)
            {
                lastPID = program.Id;
                BasePtr = IntPtr.Zero;

                string programPath = Path.GetDirectoryName(program.MainModule.FileName);
                string metaFile    = Path.Combine(programPath, @"oriwotw_Data\il2cpp_data\Metadata\global-metadata.dat");
                string ilFile      = Path.Combine(programPath, @"GameAssembly.dll");
                if (!File.Exists(metaFile) || !File.Exists(ilFile))
                {
                    return(IntPtr.Zero);
                }

                byte[] metaDataBytes = File.ReadAllBytes(metaFile);
                byte[] il2CppBytes   = File.ReadAllBytes(ilFile);
                Il2CppReader.Init(il2CppBytes, metaDataBytes, out metaData, out il2Cpp);
                executor   = new Il2CppExecutor(metaData, il2Cpp);
                decompiler = new Il2CppDecompiler(executor);
            }

            return(ProgramPointer.DerefPointer(program, GetPointer(program, asmName), AutoDeref));
        }