diff --git a/LibCpp2IL/Il2CppBinary.cs b/LibCpp2IL/Il2CppBinary.cs index 74267474..e13c0e76 100644 --- a/LibCpp2IL/Il2CppBinary.cs +++ b/LibCpp2IL/Il2CppBinary.cs @@ -60,15 +60,15 @@ public abstract class Il2CppBinary(MemoryStream input) : ClassReadingBinaryReade /// public virtual ClassReadingBinaryReader Reader => this; - private float _metadataVersion; - public sealed override float MetadataVersion => _metadataVersion; + private float? _metadataVersion; + public sealed override float MetadataVersion => _metadataVersion ?? 0; + + internal void SetMetadataVersion(float version) => _metadataVersion = version; public int InBinaryMetadataSize { get; private set; } public void Init(ulong pCodeRegistration, ulong pMetadataRegistration, Il2CppMetadata metadata) { - _metadataVersion = metadata.MetadataVersion; - var cr = pCodeRegistration > 0 ? ReadReadableAtVirtualAddress(pCodeRegistration) : null; var mr = pMetadataRegistration > 0 ? ReadReadableAtVirtualAddress(pMetadataRegistration) : null; @@ -487,6 +487,9 @@ public virtual bool TryGetExportedFunctionName(ulong addr, [NotNullWhen(true)] o public virtual (ulong pCodeRegistration, ulong pMetadataRegistration) FindCodeAndMetadataReg(Il2CppMetadata metadata) { + if (!_metadataVersion.HasValue) + throw new InvalidOperationException("MetadataVersion must be set before searching for code and metadata registration. Call SetMetadataVersion first."); + LibLogger.VerboseNewline("\tAttempting to locate code and metadata registration functions..."); var methodCount = metadata.methodDefs.Count(x => x.methodIndex >= 0); diff --git a/LibCpp2IL/LibCpp2IlBinaryRegistry.cs b/LibCpp2IL/LibCpp2IlBinaryRegistry.cs index 6f7b280b..090a4b58 100644 --- a/LibCpp2IL/LibCpp2IlBinaryRegistry.cs +++ b/LibCpp2IL/LibCpp2IlBinaryRegistry.cs @@ -67,6 +67,7 @@ internal static Il2CppBinary CreateAndInit(byte[] buffer, Il2CppMetadata metadat var start = DateTime.Now; var binary = match.FactoryFunc(memStream); + binary.SetMetadataVersion(metadata.MetadataVersion); LibCpp2IlMain.Binary = binary;