From cbee8c2c955c6525bff30a7b35c8a4639de14922 Mon Sep 17 00:00:00 2001 From: Orange Date: Sat, 4 Oct 2025 10:04:34 +0300 Subject: [PATCH] finished test --- include/omath/rev_eng/internal_rev_object.hpp | 4 +- .../general/unit_test_reverse_enineering.cpp | 50 +++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 tests/general/unit_test_reverse_enineering.cpp diff --git a/include/omath/rev_eng/internal_rev_object.hpp b/include/omath/rev_eng/internal_rev_object.hpp index f7c19ad..63249fb 100644 --- a/include/omath/rev_eng/internal_rev_object.hpp +++ b/include/omath/rev_eng/internal_rev_object.hpp @@ -24,10 +24,10 @@ namespace omath::rev_eng } template - ReturnType call_virtual_method(auto&&... arg_list) + ReturnType call_virtual_method(auto... arg_list) { using VirtualMethodType = ReturnType(__thiscall*)(void*, decltype(arg_list)...); - return (*static_cast(this))[id](this, arg_list...); + return (*reinterpret_cast(this))[id](this, arg_list...); } }; } // namespace omath::rev_eng diff --git a/tests/general/unit_test_reverse_enineering.cpp b/tests/general/unit_test_reverse_enineering.cpp new file mode 100644 index 0000000..a7ddbda --- /dev/null +++ b/tests/general/unit_test_reverse_enineering.cpp @@ -0,0 +1,50 @@ +// +// Created by Vlad on 10/4/2025. +// +#include "omath/linear_algebra/vector3.hpp" +#include +#include + +class Player final +{ +public: + virtual int foo() {return 1;} + virtual int bar() {return 2;} + omath::Vector3 m_origin{1.f, 2.f, 3.f}; + int m_health{123}; +}; + +class RevPlayer : omath::rev_eng::InternalReverseEngineeredObject +{ +public: + omath::Vector3 get_origin() + { + return get_by_offset>(sizeof(std::uintptr_t)); + } + int get_health() + { + return get_by_offset(sizeof(std::uintptr_t)+sizeof(omath::Vector3)); + } + + int rev_foo() + { + return call_virtual_method<0, int>(); + } + int rev_bar() + { + return call_virtual_method<1, int>(); + } +}; + + +TEST(unit_test_reverse_enineering, read_test) +{ + Player player_original; + const auto player_reversed = reinterpret_cast(&player_original); + + EXPECT_EQ(player_original.m_origin, player_reversed->get_origin()); + EXPECT_EQ(player_original.m_health, player_reversed->get_health()); + + EXPECT_EQ(player_original.bar(), player_reversed->rev_bar()); + EXPECT_EQ(player_original.foo(), player_reversed->rev_foo()); +} \ No newline at end of file