use same metareg scanner for < v27 and > v27, implement TryMapVATR in PEReader for performance
This commit is contained in:
@@ -197,7 +197,27 @@ namespace Il2CppInspector
|
|||||||
|
|
||||||
return exports.Values;
|
return exports.Values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool TryMapVATR(ulong uiAddr, out uint fileOffset)
|
||||||
|
{
|
||||||
|
if (uiAddr == 0)
|
||||||
|
{
|
||||||
|
fileOffset = 0;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var section = sections.FirstOrDefault(x => uiAddr - pe.ImageBase >= x.VirtualAddress &&
|
||||||
|
uiAddr - pe.ImageBase < x.VirtualAddress + x.SizeOfRawData);
|
||||||
|
if (section == null)
|
||||||
|
{
|
||||||
|
fileOffset = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fileOffset = (uint)(uiAddr - section.VirtualAddress - pe.ImageBase + section.PointerToRawData);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public override uint MapVATR(ulong uiAddr) {
|
public override uint MapVATR(ulong uiAddr) {
|
||||||
if (uiAddr == 0)
|
if (uiAddr == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -277,21 +277,12 @@ namespace Il2CppInspector
|
|||||||
|
|
||||||
vas = FindAllMappedWords(imageBytes, typesLength).Select(a => a - mrSize + ptrSize * 4);
|
vas = FindAllMappedWords(imageBytes, typesLength).Select(a => a - mrSize + ptrSize * 4);
|
||||||
|
|
||||||
// >= 19 && < 27
|
// >= 19
|
||||||
if (Image.Version < MetadataVersions.V270)
|
// Luke: Previously, a check comparing MetadataUsagesCount was used here,
|
||||||
foreach (var va in vas)
|
// but I know of at least one binary where this will break detection.
|
||||||
{
|
// Testing showed that we can just use the same heuristic used for v27+
|
||||||
var mr = Image.ReadMappedVersionedObject<Il2CppMetadataRegistration>(va);
|
// on older versions as well, so we'll just use it for all cases.
|
||||||
if (mr.MetadataUsagesCount == (ulong) metadata.MetadataUsageLists.Length)
|
if (Image.Version >= MetadataVersions.V190)
|
||||||
metadataRegistration = va;
|
|
||||||
}
|
|
||||||
|
|
||||||
// plagiarism. noun - https://www.lexico.com/en/definition/plagiarism
|
|
||||||
// the practice of taking someone else's work or ideas and passing them off as one's own.
|
|
||||||
// Synonyms: copying, piracy, theft, strealing, infringement of copyright
|
|
||||||
|
|
||||||
// >= 27
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
foreach (var va in vas)
|
foreach (var va in vas)
|
||||||
{
|
{
|
||||||
@@ -304,6 +295,7 @@ namespace Il2CppInspector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (metadataRegistration == 0)
|
if (metadataRegistration == 0)
|
||||||
return (0, 0);
|
return (0, 0);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user