From 74381eda5cb11f34fe197f2aac13df3d3a2dde2b Mon Sep 17 00:00:00 2001 From: Orange Date: Sat, 4 Oct 2025 09:47:48 +0300 Subject: [PATCH] added external class --- include/omath/rev_eng/external_rev_object.hpp | 35 +++++++++++++++++++ include/omath/rev_eng/internal_rev_object.hpp | 33 +++++++++++++++++ include/omath/rev_eng/rev_object.hpp | 27 -------------- 3 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 include/omath/rev_eng/external_rev_object.hpp create mode 100644 include/omath/rev_eng/internal_rev_object.hpp delete mode 100644 include/omath/rev_eng/rev_object.hpp diff --git a/include/omath/rev_eng/external_rev_object.hpp b/include/omath/rev_eng/external_rev_object.hpp new file mode 100644 index 0000000..9d42b72 --- /dev/null +++ b/include/omath/rev_eng/external_rev_object.hpp @@ -0,0 +1,35 @@ +// +// Created by Vlad on 10/4/2025. +// + +#pragma once +#include +#include + +namespace omath::rev_eng +{ + template + class ExternalReverseEngineeredObject + { + public: + explicit ExternalReverseEngineeredObject(const std::uintptr_t addr): m_object_address(addr) + { + } + private: + std::uintptr_t m_object_address{}; + + protected: + template + [[nodiscard]] + Type get_by_offset(const std::ptrdiff_t offset) const + { + return ExternalMemoryManagementTrait::read_memory(m_object_address+offset); + } + + template + void set_by_offset(const std::ptrdiff_t offset, const Type& value) const + { + return ExternalMemoryManagementTrait::write_memory(m_object_address+offset, value); + } + }; +} // namespace omath::rev_eng \ No newline at end of file diff --git a/include/omath/rev_eng/internal_rev_object.hpp b/include/omath/rev_eng/internal_rev_object.hpp new file mode 100644 index 0000000..f7c19ad --- /dev/null +++ b/include/omath/rev_eng/internal_rev_object.hpp @@ -0,0 +1,33 @@ +// +// Created by Vlad on 8/8/2025. +// + +#pragma once +#include +#include + +namespace omath::rev_eng +{ + class InternalReverseEngineeredObject + { + protected: + template + [[nodiscard]] Type& get_by_offset(const std::ptrdiff_t offset) + { + return *reinterpret_cast(reinterpret_cast(this) + offset); + } + + template + [[nodiscard]] const Type& get_by_offset(const std::ptrdiff_t offset) const + { + return *reinterpret_cast(reinterpret_cast(this) + offset); + } + + template + ReturnType call_virtual_method(auto&&... arg_list) + { + using VirtualMethodType = ReturnType(__thiscall*)(void*, decltype(arg_list)...); + return (*static_cast(this))[id](this, arg_list...); + } + }; +} // namespace omath::rev_eng diff --git a/include/omath/rev_eng/rev_object.hpp b/include/omath/rev_eng/rev_object.hpp deleted file mode 100644 index fe77b13..0000000 --- a/include/omath/rev_eng/rev_object.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// -// Created by Vlad on 8/8/2025. -// - -#pragma once -#include -#include - -namespace omath::rev_eng -{ - class ReverseEngineeredObject - { - protected: - template - [[nodiscard]] Type& get_by_offset(const std::ptrdiff_t offset) const - { - return *reinterpret_cast(reinterpret_cast(this) + offset); - } - - template - ReturnType call_virtual_method(auto... arg_list) - { - using Func = ReturnType(__thiscall*)(void*, decltype(arg_list)...); - return (*static_cast(this))[id](this, arg_list...); - } - }; -} // namespace orev