Merge pull request #80 from orange-cpp/feature/rev_eng

Feature: Reverse Engineering classes
This commit is contained in:
2025-10-04 10:09:07 +03:00
committed by GitHub
25 changed files with 152 additions and 31 deletions

View File

@@ -3,8 +3,8 @@
//
#pragma once
#include "omath/linear_algebra/triangle.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include "omath/triangle.hpp"
#include <array>
namespace omath::primitives

View File

@@ -3,8 +3,8 @@
//
#pragma once
#include "omath/linear_algebra/triangle.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include "omath/triangle.hpp"
#include <array>
namespace omath::primitives

View File

@@ -3,8 +3,8 @@
//
#pragma once
#include "omath/linear_algebra/triangle.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include "omath/triangle.hpp"
namespace omath::collision
{

View File

@@ -5,8 +5,8 @@
#pragma once
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/view_angles.hpp>
#include <omath/trigonometry/angle.hpp>
#include <omath/trigonometry/view_angles.hpp>
namespace omath::iw_engine
{

View File

@@ -5,8 +5,8 @@
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/view_angles.hpp>
#include <omath/trigonometry/angle.hpp>
#include <omath/trigonometry/view_angles.hpp>
namespace omath::opengl_engine
{

View File

@@ -5,8 +5,8 @@
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/view_angles.hpp>
#include <omath/trigonometry/angle.hpp>
#include <omath/trigonometry/view_angles.hpp>
namespace omath::source_engine
{

View File

@@ -6,8 +6,8 @@
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/view_angles.hpp>
#include <omath/trigonometry/angle.hpp>
#include <omath/trigonometry/view_angles.hpp>
namespace omath::unity_engine
{

View File

@@ -6,8 +6,8 @@
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/view_angles.hpp>
#include <omath/trigonometry/angle.hpp>
#include <omath/trigonometry/view_angles.hpp>
namespace omath::unreal_engine
{

View File

@@ -2,7 +2,7 @@
// Created by Orange on 11/13/2024.
//
#pragma once
#include "linear_algebra/vector3.hpp"
#include "vector3.hpp"
namespace omath
{

View File

@@ -4,7 +4,7 @@
#pragma once
#include "omath/angle.hpp"
#include "omath/trigonometry/angle.hpp"
#include "omath/linear_algebra/vector2.hpp"
#include <cstdint>
#include <expected>

View File

@@ -6,8 +6,8 @@
#pragma once
// Basic math utilities
#include "omath/angles.hpp"
#include "omath/angle.hpp"
#include "omath/trigonometry/angles.hpp"
#include "omath/trigonometry/angle.hpp"
// Vector classes (in dependency order)
#include "omath/linear_algebra/vector2.hpp"
@@ -18,11 +18,11 @@
#include "omath/linear_algebra/mat.hpp"
// Color functionality
#include "omath/color.hpp"
#include "omath/utility/color.hpp"
// Geometric primitives
#include "omath/triangle.hpp"
#include "omath/view_angles.hpp"
#include "omath/linear_algebra/triangle.hpp"
#include "omath/trigonometry/view_angles.hpp"
// 3D primitives
#include "omath/3d_primitives/box.hpp"
@@ -82,3 +82,7 @@
#include "omath/engines/unreal_engine/camera.hpp"
#include "omath/engines/unreal_engine/traits/camera_trait.hpp"
#include "omath/engines/unreal_engine/traits/pred_engine_trait.hpp"
// Reverse Engineering
#include "omath/rev_eng/external_rev_object.hpp"
#include "omath/rev_eng/internal_rev_object.hpp"

View File

@@ -7,8 +7,8 @@
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include "omath/projection/error_codes.hpp"
#include <omath/trigonometry/angle.hpp>
#include <expected>
#include <omath/angle.hpp>
#include <type_traits>
#ifdef OMATH_BUILD_TESTS

View File

@@ -0,0 +1,35 @@
//
// Created by Vlad on 10/4/2025.
//
#pragma once
#include <cstddef>
#include <cstdint>
namespace omath::rev_eng
{
template<class ExternalMemoryManagementTrait>
class ExternalReverseEngineeredObject
{
public:
explicit ExternalReverseEngineeredObject(const std::uintptr_t addr): m_object_address(addr)
{
}
private:
std::uintptr_t m_object_address{};
protected:
template<class Type>
[[nodiscard]]
Type get_by_offset(const std::ptrdiff_t offset) const
{
return ExternalMemoryManagementTrait::read_memory(m_object_address+offset);
}
template<class Type>
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

View File

@@ -0,0 +1,33 @@
//
// Created by Vlad on 8/8/2025.
//
#pragma once
#include <cstddef>
#include <cstdint>
namespace omath::rev_eng
{
class InternalReverseEngineeredObject
{
protected:
template<class Type>
[[nodiscard]] Type& get_by_offset(const std::ptrdiff_t offset)
{
return *reinterpret_cast<Type*>(reinterpret_cast<std::uintptr_t>(this) + offset);
}
template<class Type>
[[nodiscard]] const Type& get_by_offset(const std::ptrdiff_t offset) const
{
return *reinterpret_cast<Type*>(reinterpret_cast<std::uintptr_t>(this) + offset);
}
template<std::size_t id, class ReturnType>
ReturnType call_virtual_method(auto... arg_list)
{
using VirtualMethodType = ReturnType(__thiscall*)(void*, decltype(arg_list)...);
return (*reinterpret_cast<VirtualMethodType**>(this))[id](this, arg_list...);
}
};
} // namespace omath::rev_eng

View File

@@ -3,7 +3,7 @@
//
#pragma once
#include "omath/angles.hpp"
#include "omath/trigonometry/angles.hpp"
#include <algorithm>
#include <format>
#include <utility>

View File

@@ -4,7 +4,7 @@
#pragma once
#include "linear_algebra/vector4.hpp"
#include "omath/linear_algebra/vector4.hpp"
#include <cstdint>
namespace omath

View File

@@ -2,10 +2,10 @@
// Created by Orange on 11/30/2024.
//
#include <omath/trigonometry/angle.hpp>
#include <cmath>
#include <gtest/gtest.h>
#include <numbers>
#include <omath/angle.hpp>
using namespace omath;

View File

@@ -1,8 +1,8 @@
//
// Created by Orange on 11/30/2024.
//
#include <omath/trigonometry/angles.hpp>
#include <gtest/gtest.h>
#include <omath/angles.hpp>
TEST(unit_test_angles, radians_to_deg)
{

View File

@@ -1,9 +1,8 @@
//
// Created by Vlad on 01.09.2024.
//
#include <omath/utility/color.hpp>
#include <gtest/gtest.h>
#include <omath/color.hpp>
using namespace omath;

View File

@@ -2,9 +2,9 @@
// Revised unittest suite for LineTracer (segmentbased MöllerTrumbore)
// Pure ASCII: avoids nonstandard characters that MSVC rejects.
//
#include "omath/linear_algebra/vector3.hpp"
#include "omath/linear_algebra/triangle.hpp"
#include "omath/collision/line_tracer.hpp"
#include "omath/triangle.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include "gtest/gtest.h"
#include <cmath>

View File

@@ -0,0 +1,50 @@
//
// Created by Vlad on 10/4/2025.
//
#include "omath/linear_algebra/vector3.hpp"
#include <gtest/gtest.h>
#include <omath/rev_eng/internal_rev_object.hpp>
class Player final
{
public:
virtual int foo() {return 1;}
virtual int bar() {return 2;}
omath::Vector3<float> m_origin{1.f, 2.f, 3.f};
int m_health{123};
};
class RevPlayer : omath::rev_eng::InternalReverseEngineeredObject
{
public:
omath::Vector3<float> get_origin()
{
return get_by_offset<omath::Vector3<float>>(sizeof(std::uintptr_t));
}
int get_health()
{
return get_by_offset<int>(sizeof(std::uintptr_t)+sizeof(omath::Vector3<float>));
}
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<RevPlayer*>(&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());
}

View File

@@ -1,7 +1,7 @@
//
// Created by Orange on 1/6/2025.
//
#include "omath/triangle.hpp"
#include "omath/linear_algebra/triangle.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <cmath> // For std::sqrt, std::isinf, std::isnan
#include <gtest/gtest.h>

View File

@@ -1,4 +1,4 @@
//
// Created by Orange on 11/30/2024.
//
#include <omath/view_angles.hpp>
#include <omath/trigonometry/view_angles.hpp>