From cec28a1823fcbb228136705ff98733d70ca71c9e Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Sun, 21 Jul 2024 23:49:27 +0200 Subject: [PATCH] Provide actual hook names. --- .../Hooks/ResourceLoading/PapHandler.cs | 18 +++++++++--------- .../Hooks/ResourceLoading/PapRewriter.cs | 14 +++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Penumbra/Interop/Hooks/ResourceLoading/PapHandler.cs b/Penumbra/Interop/Hooks/ResourceLoading/PapHandler.cs index 65add13c..ea12a480 100644 --- a/Penumbra/Interop/Hooks/ResourceLoading/PapHandler.cs +++ b/Penumbra/Interop/Hooks/ResourceLoading/PapHandler.cs @@ -8,19 +8,19 @@ public sealed class PapHandler(PapRewriter.PapResourceHandlerPrototype papResour public void Enable() { - ReadOnlySpan signatures = + ReadOnlySpan<(string Sig, string Name)> signatures = [ - Sigs.LoadAlwaysResidentMotionPacks, - Sigs.LoadWeaponDependentResidentMotionPacks, - Sigs.LoadInitialResidentMotionPacks, - Sigs.LoadMotionPacks, - Sigs.LoadMotionPacks2, - Sigs.LoadMigratoryMotionPack, + (Sigs.LoadAlwaysResidentMotionPacks, nameof(Sigs.LoadAlwaysResidentMotionPacks)), + (Sigs.LoadWeaponDependentResidentMotionPacks, nameof(Sigs.LoadWeaponDependentResidentMotionPacks)), + (Sigs.LoadInitialResidentMotionPacks, nameof(Sigs.LoadInitialResidentMotionPacks)), + (Sigs.LoadMotionPacks, nameof(Sigs.LoadMotionPacks)), + (Sigs.LoadMotionPacks2, nameof(Sigs.LoadMotionPacks2)), + (Sigs.LoadMigratoryMotionPack, nameof(Sigs.LoadMigratoryMotionPack)), ]; var stopwatch = Stopwatch.StartNew(); - foreach (var sig in signatures) - _papRewriter.Rewrite(sig); + foreach (var (sig, name) in signatures) + _papRewriter.Rewrite(sig, name); Penumbra.Log.Debug( $"[PapHandler] Rewrote {signatures.Length} .pap functions for inlined GetResourceAsync in {stopwatch.ElapsedMilliseconds} ms."); } diff --git a/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs b/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs index af16d706..5a2b09bf 100644 --- a/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs +++ b/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs @@ -13,10 +13,10 @@ public sealed class PapRewriter(PapRewriter.PapResourceHandlerPrototype papResou private readonly Dictionary _hooks = []; private readonly List _nativeAllocList = []; - public void Rewrite(string sig) + public void Rewrite(string sig, string name) { if (!_scanner.TryScanText(sig, out var address)) - throw new Exception($"Signature [{sig}] could not be found."); + throw new Exception($"Signature for {name} [{sig}] could not be found."); var funcInstructions = _scanner.GetFunctionInstructions(address).ToArray(); var hookPoints = ScanPapHookPoints(funcInstructions).ToList(); @@ -68,20 +68,20 @@ public sealed class PapRewriter(PapRewriter.PapResourceHandlerPrototype papResou // Plop 'rax' (our return value, the path size) into r8, so it's the third argument for the subsequent Crc32() call "mov r8, rax", - ], "Pap Redirection" + ], $"{name}.PapRedirection" ); _hooks.Add(hookAddress, hook); hook.Enable(); // Now we're adjusting every single reference to the stack allocated 'path' to our substantially bigger 'stringLoc' - UpdatePathAddresses(stackAccesses, stringAllocation); + UpdatePathAddresses(stackAccesses, stringAllocation, name); } } - private void UpdatePathAddresses(IEnumerable stackAccesses, nint stringAllocation) + private void UpdatePathAddresses(IEnumerable stackAccesses, nint stringAllocation, string name) { - foreach (var stackAccess in stackAccesses) + foreach (var (stackAccess, index) in stackAccesses.WithIndex()) { var hookAddress = new IntPtr((long)stackAccess.IP + stackAccess.Length); @@ -95,7 +95,7 @@ public sealed class PapRewriter(PapRewriter.PapResourceHandlerPrototype papResou [ "use64", $"mov {targetRegister}, 0x{stringAllocation:x8}", - ], "Pap Stack Accesses" + ], $"{name}.PapStackAccess[{index}]" ); _hooks.Add(hookAddress, hook);