From 3252d256ca4b8eabd292a7c8bf66cad5716fece1 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Mon, 3 Nov 2025 20:10:36 +0100 Subject: [PATCH] [Emulator] Removed windows rdrand ntdll patch --- src/xenia/ui/windowed_app_main_win.cc | 67 +-------------------------- 1 file changed, 2 insertions(+), 65 deletions(-) diff --git a/src/xenia/ui/windowed_app_main_win.cc b/src/xenia/ui/windowed_app_main_win.cc index 1aed7bf07..0baf4f5f4 100644 --- a/src/xenia/ui/windowed_app_main_win.cc +++ b/src/xenia/ui/windowed_app_main_win.cc @@ -19,69 +19,13 @@ // Autogenerated by `xb premake`. #include "build/version.h" +#include + DEFINE_bool(enable_console, false, "Open a console window with the main window", "Logging"); static uintptr_t g_xenia_exe_base = 0; static size_t g_xenia_exe_size = 0; -#if XE_ARCH_AMD64 == 1 -DEFINE_bool(enable_rdrand_ntdll_patch, true, - "Hot-patches ntdll at the start of the process to not use rdrand " - "as part of the RNG for heap randomization. Can reduce CPU usage " - "significantly, but is untested on all Windows versions.", - "Win32"); - -// begin ntdll hack -#include -static bool g_didfailtowrite = false; -static void write_process_memory(HANDLE process, uintptr_t offset, - unsigned size, const unsigned char* bvals) { - if (!WriteProcessMemory(process, (void*)offset, bvals, size, nullptr)) { - if (!g_didfailtowrite) { - MessageBoxA(nullptr, "Failed to write to process!", "Failed", MB_OK); - g_didfailtowrite = true; - } - } -} - -static constexpr unsigned char pattern_cmp_processorfeature_28_[] = { - 0x80, 0x3C, 0x25, 0x90, - 0x02, 0xFE, 0x7F, 0x00}; // cmp byte ptr ds:7FFE0290h, 0 -static constexpr unsigned char pattern_replacement[] = { - 0x48, 0x39, 0xe4, // cmp rsp, rsp = always Z - 0x0F, 0x1F, 0x44, 0x00, 0x00 // 5byte nop -}; -static void patch_ntdll_instance(HANDLE process, uintptr_t ntdll_base) { - MODULEINFO modinfo; - - GetModuleInformation(process, (HMODULE)ntdll_base, &modinfo, - sizeof(MODULEINFO)); - - std::vector possible_places{}; - - unsigned char* strt = (unsigned char*)modinfo.lpBaseOfDll; - - for (unsigned i = 0; i < modinfo.SizeOfImage; ++i) { - for (unsigned j = 0; j < sizeof(pattern_cmp_processorfeature_28_); ++j) { - if (strt[i + j] != pattern_cmp_processorfeature_28_[j]) { - goto miss; - } - } - possible_places.push_back((uintptr_t)(&strt[i])); - miss:; - } - - for (auto&& place : possible_places) { - write_process_memory(process, place, sizeof(pattern_replacement), - pattern_replacement); - } -} - -static void do_ntdll_hack_this_process() { - patch_ntdll_instance(GetCurrentProcess(), - (uintptr_t)GetModuleHandleA("ntdll.dll")); -} -#endif static HMODULE probe_for_module(void* addr) { // get 65k aligned addr downwards to probe for MZ @@ -107,8 +51,6 @@ static HMODULE probe_for_module(void* addr) { } } -// end ntdll hack - static constexpr auto XENIA_ERROR_LANGUAGE = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT); @@ -376,11 +318,6 @@ int WINAPI wWinMain(HINSTANCE hinstance, HINSTANCE hinstance_prev, xe::InitializeWin32App(app->GetName()); if (app->OnInitialize()) { -#if XE_ARCH_AMD64 == 1 - if (cvars::enable_rdrand_ntdll_patch) { - do_ntdll_hack_this_process(); - } -#endif // TODO(Triang3l): Rework this, need to initialize the console properly, // disable has_console_attached_ by default in windowed apps, and attach // only if needed.