Fix pointer extraction for MSVC in metadata <21.

This change causes the Inspector to properly parse DLLs generated with
Il2Cpp versions 5.3.0f4 through 5.3.4f1 (excluding 5.3.2f1, which is a
separate problem).
This commit is contained in:
Robert Xiao
2020-04-07 01:38:16 -07:00
committed by Katy
parent b9dffd3500
commit 5b78fc3f3c
2 changed files with 12 additions and 5 deletions

View File

@@ -214,7 +214,7 @@ namespace Il2CppInspector
offset = nextLea?.foundOffset + leaSize ?? buff2Size;
}
if (leas.Count == 3) {
if ((image.Version < 21 && leas.Count == 2) || (image.Version >= 21 && leas.Count == 3)) {
// Register-based argument passing?
var leaRSI = leas.FirstOrDefault(l => l.Value == RSI).Key.address;
var leaRDI = leas.FirstOrDefault(l => l.Value == RDI).Key.address;

View File

@@ -32,10 +32,17 @@ namespace Il2CppInspector
return (0, 0);
// Jump to Il2CppCodegenRegistration
image.Position = image.MapVATR((ulong) pCgr + 6);
metadata = image.ReadUInt32();
image.Position = image.MapVATR((ulong) pCgr + 11);
code = image.ReadUInt32();
if(image.Version < 21) {
image.Position = image.MapVATR((ulong)pCgr + 1);
metadata = image.ReadUInt32();
image.Position = image.MapVATR((ulong)pCgr + 6);
code = image.ReadUInt32();
} else {
image.Position = image.MapVATR((ulong)pCgr + 6);
metadata = image.ReadUInt32();
image.Position = image.MapVATR((ulong)pCgr + 11);
code = image.ReadUInt32();
}
return (code, metadata);
}