From df335574778cfee6fa44a5d63a2ef869c5706c11 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Mon, 22 Jul 2024 20:54:24 +0200 Subject: [PATCH] Cleanup. --- Penumbra.Api | 2 +- .../Hooks/ResourceLoading/PapRewriter.cs | 22 +++++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Penumbra.Api b/Penumbra.Api index f4c6144c..86249598 160000 --- a/Penumbra.Api +++ b/Penumbra.Api @@ -1 +1 @@ -Subproject commit f4c6144ca2012b279e6d8aa52b2bef6cc2ba32d9 +Subproject commit 86249598afb71601b247f9629d9c29dbecfe6eb1 diff --git a/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs b/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs index afe00b8d..2fb1623d 100644 --- a/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs +++ b/Penumbra/Interop/Hooks/ResourceLoading/PapRewriter.cs @@ -11,10 +11,10 @@ public sealed class PapRewriter(PapRewriter.PapResourceHandlerPrototype papResou { public unsafe delegate int PapResourceHandlerPrototype(void* self, byte* path, int length); - private readonly PeSigScanner _scanner = new(); - private readonly Dictionary _hooks = []; - private readonly Dictionary<(nint, Register, ulong), nint> _nativeAllocPaths = []; - private readonly List _nativeAllocCaves = []; + private readonly PeSigScanner _scanner = new(); + private readonly Dictionary _hooks = []; + private readonly Dictionary<(nint, Register, ulong), nint> _nativeAllocPaths = []; + private readonly List _nativeAllocCaves = []; public void Rewrite(string sig, string name) { @@ -26,13 +26,13 @@ public void Rewrite(string sig, string name) foreach (var hookPoint in hookPoints) { - var stackAccesses = ScanStackAccesses(funcInstructions, hookPoint).ToList(); + var stackAccesses = ScanStackAccesses(funcInstructions, hookPoint).ToList(); var stringAllocation = NativeAllocPath( address, hookPoint.MemoryBase, hookPoint.MemoryDisplacement64, Utf8GamePath.MaxGamePathLength - ); + ); WriteToAlloc(stringAllocation, Utf8GamePath.MaxGamePathLength, name); - + // We'll need to grab our true hook point; the location where we can change the path at our leisure. // This is going to be the first call instruction after our 'hookPoint', so, we'll find that. // Pretty scuffed, this might need a refactoring at some point. @@ -150,7 +150,7 @@ private unsafe nint NativeAllocCave(nuint size) return caveLoc; } - + // This is a bit conked but, if we identify a path by: // 1) The function it belongs to (starting address, 'funcAddress') // 2) The stack register (not strictly necessary - should always be rbp - but abundance of caution, so I don't hit myself in the future) @@ -158,9 +158,7 @@ private unsafe nint NativeAllocCave(nuint size) // Then we ensure we have a unique identifier for the specific variable location of that specific function // This is useful because sometimes the stack address is reused within the same function for different GetResourceAsync calls private unsafe nint NativeAllocPath(nint funcAddress, Register stackRegister, ulong stackDisplacement, nuint size) - { - return _nativeAllocPaths.GetOrAdd((funcAddress, stackRegister, stackDisplacement), _ => (nint)NativeMemory.Alloc(size)); - } + => _nativeAllocPaths.GetOrAdd((funcAddress, stackRegister, stackDisplacement), _ => (nint)NativeMemory.Alloc(size)); private static unsafe void NativeFree(nint mem) => NativeMemory.Free((void*)mem); @@ -181,7 +179,7 @@ public void Dispose() NativeFree(mem); _nativeAllocCaves.Clear(); - + foreach (var mem in _nativeAllocPaths.Values) NativeFree(mem);