diff --git a/Il2CppInspector/FileFormatReaders/MachOReader.cs b/Il2CppInspector/FileFormatReaders/MachOReader.cs index 7660368..b7881e1 100644 --- a/Il2CppInspector/FileFormatReaders/MachOReader.cs +++ b/Il2CppInspector/FileFormatReaders/MachOReader.cs @@ -23,6 +23,11 @@ namespace Il2CppInspector protected override bool checkMagicBE(MachO magic) => magic == MachO.MH_CIGAM; protected override MachO lc_Segment => MachO.LC_SEGMENT; + + public override uint MapVATR(ulong uiAddr) { + var section = sections.First(x => uiAddr >= x.Address && uiAddr <= x.Address + x.Size); + return (uint) uiAddr - (section.Address - section.ImageOffset); + } } internal class MachOReader64 : MachOReader @@ -35,6 +40,10 @@ namespace Il2CppInspector protected override bool checkMagicBE(MachO magic) => magic == MachO.MH_CIGAM_64; protected override MachO lc_Segment => MachO.LC_SEGMENT_64; + public override uint MapVATR(ulong uiAddr) { + var section = sections.First(x => uiAddr >= x.Address && uiAddr <= x.Address + x.Size); + return (uint) (uiAddr - (section.Address - section.ImageOffset)); + } } // We need this convoluted generic TReader declaration so that "static T FileFormatReader.Load(Stream)" @@ -42,7 +51,7 @@ namespace Il2CppInspector internal abstract class MachOReader : FileFormatReader where TWord : struct where TReader : FileFormatReader { private MachOHeader header; - private readonly List> sections = new List>(); + protected readonly List> sections = new List>(); private MachOLinkEditDataCommand funcTab; private MachOSymtabCommand symTab; @@ -94,8 +103,7 @@ namespace Il2CppInspector var section = ReadObject>(); sections.Add(section); if (section.Name == "__text") { - GlobalOffset = (ulong) Convert.ChangeType(section.Address, typeof(ulong)) - - section.ImageOffset; + GlobalOffset = (ulong) Convert.ChangeType(section.Address, typeof(ulong)) - section.ImageOffset; } } } @@ -171,10 +179,5 @@ namespace Il2CppInspector } return symbols; } - - public override uint MapVATR(ulong uiAddr) { - var section = sections.First(x => uiAddr >= (uint)(object)x.Address && uiAddr <= (uint)(object)x.Address + (uint)(object)x.Size); - return (uint) (uiAddr - ((ulong) Convert.ChangeType(section.Address, typeof(ulong)) - section.ImageOffset)); - } } }