From 91136a61c49a9bad3fe693442feae59863429fd7 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 18 Mar 2026 21:12:18 +0300 Subject: [PATCH] improvement --- include/omath/rev_eng/internal_rev_object.hpp | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/include/omath/rev_eng/internal_rev_object.hpp b/include/omath/rev_eng/internal_rev_object.hpp index 64d4008..601301a 100644 --- a/include/omath/rev_eng/internal_rev_object.hpp +++ b/include/omath/rev_eng/internal_rev_object.hpp @@ -21,6 +21,25 @@ namespace omath::rev_eng { + template + struct FixedString final + { + char data[N]{}; + // ReSharper disable once CppNonExplicitConvertingConstructor + constexpr FixedString(const char (&str)[N]) noexcept // NOLINT(*-explicit-constructor) + { + for (std::size_t i = 0; i < N; ++i) + data[i] = str[i]; + } + // ReSharper disable once CppNonExplicitConversionOperator + constexpr operator std::string_view() const noexcept // NOLINT(*-explicit-constructor) + { + return {data, N - 1}; + } + }; + template + FixedString(const char (&)[N]) -> FixedString; + class InternalReverseEngineeredObject { protected: @@ -57,31 +76,31 @@ namespace omath::rev_eng return reinterpret_cast(const_cast(ptr))(this, arg_list...); } - template + template ReturnType call_method(auto... arg_list) { - static const auto* address = resolve_pattern(module_name, pattern); + static const auto* address = resolve_pattern(ModuleName, Pattern); return call_method(address, arg_list...); } - template + template ReturnType call_method(auto... arg_list) const { - static const auto* address = resolve_pattern(module_name, pattern); + static const auto* address = resolve_pattern(ModuleName, Pattern); return call_method(address, arg_list...); } - template + template ReturnType call_virtual_method(auto... arg_list) { const auto vtable = *reinterpret_cast(this); - return call_method(vtable[id], arg_list...); + return call_method(vtable[Id], arg_list...); } - template + template ReturnType call_virtual_method(auto... arg_list) const { const auto vtable = *reinterpret_cast(this); - return call_method(vtable[id], arg_list...); + return call_method(vtable[Id], arg_list...); } private: @@ -91,11 +110,11 @@ namespace omath::rev_eng assert(base && "Failed to find module"); #ifdef _WIN32 - auto result = PePatternScanner::scan_for_pattern_in_loaded_module(base, pattern); + const auto result = PePatternScanner::scan_for_pattern_in_loaded_module(base, pattern); #elif defined(__APPLE__) - auto result = MachOPatternScanner::scan_for_pattern_in_loaded_module(base, pattern); + const auto result = MachOPatternScanner::scan_for_pattern_in_loaded_module(base, pattern); #else - auto result = ElfPatternScanner::scan_for_pattern_in_loaded_module(base, pattern); + const auto result = ElfPatternScanner::scan_for_pattern_in_loaded_module(base, pattern); #endif assert(result.has_value() && "Pattern scan failed"); return reinterpret_cast(*result); @@ -104,7 +123,7 @@ namespace omath::rev_eng static const void* get_module_base(const std::string_view module_name) { #ifdef _WIN32 - return static_cast(GetModuleHandleA(module_name.data())); + return GetModuleHandleA(module_name.data()); #elif defined(__APPLE__) // On macOS, iterate loaded images to find the module by name const auto count = _dyld_image_count();