diff --git a/Dalamud/Game/SigScanner.cs b/Dalamud/Game/SigScanner.cs
index 1242935ef..8449098a3 100644
--- a/Dalamud/Game/SigScanner.cs
+++ b/Dalamud/Game/SigScanner.cs
@@ -83,6 +83,21 @@ namespace Dalamud.Game
///
public int DataSectionSize { get; private set; }
+ ///
+ /// Gets the base address of the .rdata section search area.
+ ///
+ public IntPtr RDataSectionBase => new IntPtr(this.SearchBase.ToInt64() + this.RDataSectionOffset);
+
+ ///
+ /// Gets the offset of the .rdata section from the base of the module.
+ ///
+ public long RDataSectionOffset { get; private set; }
+
+ ///
+ /// Gets the size of the .rdata section.
+ ///
+ public int RDataSectionSize { get; private set; }
+
///
/// Gets the ProcessModule on which the search is performed.
///
@@ -126,7 +141,8 @@ namespace Dalamud.Game
instrAddr = IntPtr.Add(instrAddr, 1);
num = Marshal.ReadInt32(instrAddr) + (long)instrAddr + 4 - bAddr;
}
- while (!(num >= this.DataSectionOffset && num <= this.DataSectionOffset + this.DataSectionSize));
+ while (!(num >= this.DataSectionOffset && num <= this.DataSectionOffset + this.DataSectionSize)
+ && !(num >= this.RDataSectionOffset && num <= this.RDataSectionOffset + this.RDataSectionSize));
return IntPtr.Add(instrAddr, Marshal.ReadInt32(instrAddr) + 4);
}
@@ -322,6 +338,10 @@ namespace Dalamud.Game
this.DataSectionOffset = Marshal.ReadInt32(sectionCursor, 12);
this.DataSectionSize = Marshal.ReadInt32(sectionCursor, 8);
break;
+ case 0x61746164722E: // .rdata
+ this.RDataSectionOffset = Marshal.ReadInt32(sectionCursor, 12);
+ this.RDataSectionSize = Marshal.ReadInt32(sectionCursor, 8);
+ break;
}
sectionCursor += 40;