From df89374886689beeed68004987acf723bd504df1 Mon Sep 17 00:00:00 2001 From: FakeMichau <49685661+FakeMichau@users.noreply.github.com> Date: Wed, 20 May 2026 15:14:59 +0200 Subject: [PATCH] Optionally hook ascii version of OutputDebug --- OptiScaler/hooks/Kernel_Hooks.cpp | 15 +++++++++++++++ OptiScaler/hooks/Kernel_Hooks.h | 3 +++ OptiScaler/proxies/Kernel32_Proxy.h | 1 + 3 files changed, 19 insertions(+) diff --git a/OptiScaler/hooks/Kernel_Hooks.cpp b/OptiScaler/hooks/Kernel_Hooks.cpp index 3fd9c1ce..a958d989 100644 --- a/OptiScaler/hooks/Kernel_Hooks.cpp +++ b/OptiScaler/hooks/Kernel_Hooks.cpp @@ -248,6 +248,21 @@ VOID WINAPI KernelHooks::hk_K32_OutputDebugStringW(LPCWSTR lpOutputString) LOG_TRACE(L"{}", result); } +VALIDATE_HOOK(hk_K32_OutputDebugStringA, Kernel32Proxy::PFN_OutputDebugStringA) +VOID WINAPI KernelHooks::hk_K32_OutputDebugStringA(LPCSTR lpOutputString) +{ + o_K32_OutputDebugStringA(lpOutputString); + + std::string result(lpOutputString); + + while (!result.empty() && (result.back() == '\n' || result.back() == '\r')) + { + result.pop_back(); + } + + LOG_TRACE("{}", result); +} + // Load Library checks VALIDATE_HOOK(hk_K32_LoadLibraryW, Kernel32Proxy::PFN_LoadLibraryW) diff --git a/OptiScaler/hooks/Kernel_Hooks.h b/OptiScaler/hooks/Kernel_Hooks.h index fb69f0e6..ca45d9ad 100644 --- a/OptiScaler/hooks/Kernel_Hooks.h +++ b/OptiScaler/hooks/Kernel_Hooks.h @@ -32,6 +32,7 @@ class KernelHooks inline static Kernel32Proxy::PFN_GetFileAttributesW o_K32_GetFileAttributesW = nullptr; inline static Kernel32Proxy::PFN_CreateFileW o_K32_CreateFileW = nullptr; inline static Kernel32Proxy::PFN_OutputDebugStringW o_K32_OutputDebugStringW = nullptr; + inline static Kernel32Proxy::PFN_OutputDebugStringA o_K32_OutputDebugStringA = nullptr; inline static KernelBaseProxy::PFN_FreeLibrary o_KB_FreeLibrary = nullptr; inline static KernelBaseProxy::PFN_LoadLibraryA o_KB_LoadLibraryA = nullptr; @@ -51,6 +52,7 @@ class KernelHooks LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); static VOID WINAPI hk_K32_OutputDebugStringW(LPCWSTR lpOutputString); + static VOID WINAPI hk_K32_OutputDebugStringA(LPCSTR lpOutputString); static HMODULE hk_K32_LoadLibraryW(LPCWSTR lpLibFileName); static HMODULE hk_K32_LoadLibraryA(LPCSTR lpLibFileName); @@ -80,6 +82,7 @@ class KernelHooks #ifdef HOOK_OUTPUT_DEBUG o_K32_OutputDebugStringW = Kernel32Proxy::Hook_OutputDebugStringW(hk_K32_OutputDebugStringW); + o_K32_OutputDebugStringA = Kernel32Proxy::Hook_OutputDebugStringA(hk_K32_OutputDebugStringA); #endif if (!Config::Instance()->UseNtdllHooks.value_or_default()) diff --git a/OptiScaler/proxies/Kernel32_Proxy.h b/OptiScaler/proxies/Kernel32_Proxy.h index 8fec606f..c6b6e025 100644 --- a/OptiScaler/proxies/Kernel32_Proxy.h +++ b/OptiScaler/proxies/Kernel32_Proxy.h @@ -24,6 +24,7 @@ X(GetModuleHandleExW) \ X(GetFileAttributesW) \ X(CreateFileW) \ + X(OutputDebugStringA) \ X(OutputDebugStringW) class Kernel32Proxy