Get 2019.3.7f1+ working by adding new '24.3' version

In 2019.3.7f1, the following fields were added to
Il2CppCodeRegistration:

     uint32_t interopDataCount;
     Il2CppInteropData* interopData;
+    uint32_t windowsRuntimeFactoryCount;
+    Il2CppWindowsRuntimeFactoryTableEntry* windowsRuntimeFactoryTable;
     uint32_t codeGenModulesCount;
     const Il2CppCodeGenModule** codeGenModules;

These two fields overlap the old codeGenModules fields, causing failures.
The current fix is simply to bump the version to 24.3 if these fields are
detected in order to get the correct codeGenModules pointer. Long term, a
better detection mechanism (probably based on examining the name string
pointer in codeGenModules[0]) will be necessary. However, this is pending
more samples of 2019.3.7+ for testing.
This commit is contained in:
Robert Xiao
2020-04-07 03:57:02 -07:00
committed by Katy
parent 4f074837b7
commit c9d65e5f2d
4 changed files with 25 additions and 10 deletions

View File

@@ -181,6 +181,13 @@ namespace Il2CppInspector
if (Image.Version >= 24.2) { if (Image.Version >= 24.2) {
Modules = new Dictionary<string, Il2CppCodeGenModule>(); Modules = new Dictionary<string, Il2CppCodeGenModule>();
// In v24.3, windowsRuntimeFactoryTable collides with codeGenModules. So far no samples have had windowsRuntimeFactoryCount > 0;
// if this changes we'll have to get smarter about disambiguating these two.
if (CodeRegistration.codeGenModulesCount == 0) {
Image.Version = 24.3;
CodeRegistration = image.ReadMappedObject<Il2CppCodeRegistration>(codeRegistration);
}
// Array of pointers to Il2CppCodeGenModule // Array of pointers to Il2CppCodeGenModule
var codeGenModulePointers = image.ReadMappedArray<ulong>(CodeRegistration.pcodeGenModules, (int) CodeRegistration.codeGenModulesCount); var codeGenModulePointers = image.ReadMappedArray<ulong>(CodeRegistration.pcodeGenModules, (int) CodeRegistration.codeGenModulesCount);
var modules = image.ReadMappedObjectPointerArray<Il2CppCodeGenModule>(CodeRegistration.pcodeGenModules, (int) CodeRegistration.codeGenModulesCount); var modules = image.ReadMappedObjectPointerArray<Il2CppCodeGenModule>(CodeRegistration.pcodeGenModules, (int) CodeRegistration.codeGenModulesCount);
@@ -233,8 +240,8 @@ namespace Il2CppInspector
// TODO: Function pointers as shown below // TODO: Function pointers as shown below
// reversePInvokeWrappers // reversePInvokeWrappers
// <=22: delegateWrappersFromManagedToNative, marshalingFunctions; // <=22: delegateWrappersFromManagedToNative, marshalingFunctions
// >=21 <=22: ccwMarhsalingFunctions // >=21 <=22: ccwMarshalingFunctions
// >=22: unresolvedVirtualCallPointers // >=22: unresolvedVirtualCallPointers
// >=23: interopData // >=23: interopData

View File

@@ -60,6 +60,11 @@ namespace Il2CppInspector
[Version(Min = 23)] [Version(Min = 23)]
public ulong interopData; public ulong interopData;
[Version(Min = 24.3)]
public ulong windowsRuntimeFactoryCount;
[Version(Min = 24.3)]
public ulong windowsRuntimeFactoryTable;
// Added in metadata v24.2 to replace methodPointers and methodPointersCount // Added in metadata v24.2 to replace methodPointers and methodPointersCount
[Version(Min = 24.2)] [Version(Min = 24.2)]
public ulong codeGenModulesCount; public ulong codeGenModulesCount;

View File

@@ -19,12 +19,14 @@ namespace Il2CppInspector
// Unity 5.3.5f1 -> v21 // Unity 5.3.5f1 -> v21
// Unity 5.4.0f3 -> v21 // Unity 5.4.0f3 -> v21
// Unity 5.5.0f3 -> v22 // Unity 5.5.0f3 -> v22
// Unity 5.6.2p3 -> v23 // Unity 5.6.0f3 -> v23
// Unity 5.6.4f1 -> v23 // Unity 5.6.4f1 -> v23
// Unity 2017.2f3 -> v24 // Unity 2019.1.0f3 -> v24
// Unity 2018.2.0f2 -> v24 // Unity 2018.2.0f2 -> v24
// Unity 2018.3.0f2 -> v24.1 // Unity 2018.3.0f2 -> v24.1
// Unity 2019.1.0f2 -> v24.2
// Unity 2019.2.8f1 -> v24.2 // Unity 2019.2.8f1 -> v24.2
// Unity 2019.3.7f1 -> v24.3
// https://unity3d.com/get-unity/download/archive // https://unity3d.com/get-unity/download/archive
// Metadata version is written at the end of Unity.IL2CPP.MetadataCacheWriter.WriteLibIl2CppMetadata or WriteMetadata (Unity.IL2CPP.dll) // Metadata version is written at the end of Unity.IL2CPP.MetadataCacheWriter.WriteLibIl2CppMetadata or WriteMetadata (Unity.IL2CPP.dll)

View File

@@ -168,15 +168,16 @@ Unity version | IL2CPP version | Support
4.6.1+ | First release | Unsupported 4.6.1+ | First release | Unsupported
5.2.x | 15 | Unsupported 5.2.x | 15 | Unsupported
5.3.0-5.3.1 | 16 | Working 5.3.0-5.3.1 | 16 | Working
5.3.2 | 19 | Untested 5.3.2 | 19 | Working
5.3.3-5.3.4 | 20 | Untested 5.3.3-5.3.4 | 20 | Working
5.3.5-5.4.x | 21 | Working 5.3.5-5.4.x | 21 | Working
5.5.x | 22 | Working 5.5.x | 22 | Working
5.6.x | 23 | Working 5.6.x | 23 | Working
2017.x-2018.2 | 24.0 | Working 2017.1.x-2018.2.x | 24.0 | Working
2018.3-2019.1 | 24.1 | Working 2018.3.x-2018.4.x | 24.1 | Working
2019.2-2019.3 | 24.2 | Working 2019.1.x-2019.3.6 | 24.2 | Working
2020.1 | 24.3 | Awaiting stable release 2019.3.7-2019.3.x | 24.3 | Untested
2020.1 | 24.? | Awaiting stable release
### Problems ### Problems