diff --git a/src/client/component/exception.cpp b/src/client/component/exception.cpp index 6d01ea12..2d572533 100644 --- a/src/client/component/exception.cpp +++ b/src/client/component/exception.cpp @@ -68,14 +68,15 @@ namespace exception void display_error_dialog() { - const std::string error_str = utils::string::va("Fatal error (0x%08X) at 0x%p.\n" - "A minidump has been written.\n\n", - exception_data.code, exception_data.address); + const std::string error_str = utils::string::va("Fatal error (0x%08X) at 0x%p (0x%p).\n" + "A minidump has been written.\n", + exception_data.code, exception_data.address, + reinterpret_cast(exception_data.address) - get_base()); utils::thread::suspend_other_threads(); show_mouse_cursor(); - MessageBoxA(nullptr, error_str.data(), "S1x ERROR", MB_ICONERROR); + MessageBoxA(nullptr, error_str.data(), "BOIII ERROR", MB_ICONERROR); TerminateProcess(GetCurrentProcess(), exception_data.code); } @@ -86,11 +87,12 @@ namespace exception recovery_data.last_recovery = std::chrono::high_resolution_clock::now(); ++recovery_data.recovery_counts; - game::Com_Error(game::ERR_DROP, "Fatal error (0x%08X) at 0x%p.\nA minidump has been written.\n\n" + game::Com_Error(game::ERR_DROP, "Fatal error (0x%08X) at 0x%p (0x%p).\nA minidump has been written.\n\n" "BOIII has tried to recover your game, but it might not run stable anymore.\n\n" "Make sure to update your graphics card drivers and install operating system updates!\n" "Closing or restarting Steam might also help.", - exception_data.code, exception_data.address); + exception_data.code, exception_data.address, + reinterpret_cast(exception_data.address) - get_base()); } else { @@ -137,6 +139,7 @@ namespace exception line("Timestamp: "s + get_timestamp()); line(utils::string::va("Exception: 0x%08X", exceptioninfo->ExceptionRecord->ExceptionCode)); line(utils::string::va("Address: 0x%llX", exceptioninfo->ExceptionRecord->ExceptionAddress)); + line(utils::string::va("Base: 0x%llX", get_base())); #pragma warning(push) #pragma warning(disable: 4996) diff --git a/src/client/loader/component_loader.cpp b/src/client/loader/component_loader.cpp index 94cb35a5..fa4617d3 100644 --- a/src/client/loader/component_loader.cpp +++ b/src/client/loader/component_loader.cpp @@ -136,17 +136,22 @@ std::vector>& component_loader::get_compone return *components; } -size_t operator"" _g(const size_t val) +size_t get_base() { static auto base = size_t(utils::nt::library{}.get_ptr()); assert(base && "Failed to resolve base"); + return base; +} + +size_t operator"" _g(const size_t val) +{ + static auto base = get_base(); return base + (val - 0x140000000); } size_t reverse_g(const size_t val) { - static auto base = size_t(utils::nt::library{}.get_ptr()); - assert(base && "Failed to resolve base"); + static auto base = get_base(); return (val - base) + 0x140000000; } diff --git a/src/client/loader/component_loader.hpp b/src/client/loader/component_loader.hpp index d7bce797..1e4a97d0 100644 --- a/src/client/loader/component_loader.hpp +++ b/src/client/loader/component_loader.hpp @@ -57,6 +57,7 @@ namespace \ static component_loader::installer __component; \ } +size_t get_base(); size_t operator"" _g(size_t val); size_t reverse_g(size_t val); size_t reverse_g(const void* val);