From 3d32d9c59ca056cd966891ac119057b5d12e9c9b Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Mon, 18 Jan 2021 12:43:11 +0100 Subject: [PATCH] fix: use vtable Framework::free instead of sig --- Dalamud/Game/Internal/Framework.cs | 11 ++++++----- Dalamud/Game/Internal/FrameworkAddressResolver.cs | 5 ----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Dalamud/Game/Internal/Framework.cs b/Dalamud/Game/Internal/Framework.cs index aca8a594b..989278610 100644 --- a/Dalamud/Game/Internal/Framework.cs +++ b/Dalamud/Game/Internal/Framework.cs @@ -82,9 +82,6 @@ namespace Dalamud.Game.Internal { Gui = new GameGui(Address.GuiManager, scanner, dalamud); Network = new GameNetwork(scanner); - - this.destroyHook = - new Hook(Address.OnDestroy, new OnDestroyDelegate(HandleFrameworkDestroy), this); } private void HookVTable() { @@ -92,12 +89,16 @@ namespace Dalamud.Game.Internal { // Virtual function layout: // .rdata:00000001411F1FE0 dq offset Xiv__Framework___dtor // .rdata:00000001411F1FE8 dq offset Xiv__Framework__init - // .rdata:00000001411F1FF0 dq offset sub_1400936E0 - // .rdata:00000001411F1FF8 dq offset sub_1400939E0 + // .rdata:00000001411F1FF0 dq offset Xiv__Framework__destroy + // .rdata:00000001411F1FF8 dq offset Xiv__Framework__free // .rdata:00000001411F2000 dq offset Xiv__Framework__update var pUpdate = Marshal.ReadIntPtr(vtable, IntPtr.Size * 4); this.updateHook = new Hook(pUpdate, new OnUpdateDetour(HandleFrameworkUpdate), this); + + var pDestroy = Marshal.ReadIntPtr(vtable, IntPtr.Size * 3); + this.destroyHook = + new Hook(pDestroy, new OnDestroyDelegate(HandleFrameworkDestroy), this); } public void Enable() { diff --git a/Dalamud/Game/Internal/FrameworkAddressResolver.cs b/Dalamud/Game/Internal/FrameworkAddressResolver.cs index 6d130beac..14ea52ba8 100644 --- a/Dalamud/Game/Internal/FrameworkAddressResolver.cs +++ b/Dalamud/Game/Internal/FrameworkAddressResolver.cs @@ -9,9 +9,6 @@ namespace Dalamud.Game.Internal { public IntPtr ScriptManager { get; private set; } - public IntPtr OnDestroy { get; private set; } - - protected override void Setup64Bit(SigScanner sig) { SetupFramework(sig); @@ -21,8 +18,6 @@ namespace Dalamud.Game.Internal { // Called from Framework::Init ScriptManager = BaseAddress + 0x2C68; // note that no deref here - - OnDestroy = sig.ScanText("48 83 EC 48 48 8B 0D ?? ?? ?? ?? 48 85 C9"); } private void SetupFramework(SigScanner scanner) {