From cc2dfffda1b96950648f79d4ee3608fe1e61c5ba Mon Sep 17 00:00:00 2001 From: Angad Date: Wed, 13 Sep 2023 14:33:36 -0700 Subject: [PATCH 1/7] feat: add hook helpers, update PCH.h (a few C++23 headers were missing) --- CommonLibSF/include/SFSE/API.h | 25 +++++ CommonLibSF/include/SFSE/Impl/PCH.h | 161 +++++++++++++++++++++------- 2 files changed, 148 insertions(+), 38 deletions(-) diff --git a/CommonLibSF/include/SFSE/API.h b/CommonLibSF/include/SFSE/API.h index e83bc981..30901d48 100644 --- a/CommonLibSF/include/SFSE/API.h +++ b/CommonLibSF/include/SFSE/API.h @@ -19,4 +19,29 @@ namespace SFSE Trampoline& GetTrampoline(); void AllocTrampoline(std::size_t a_size, bool a_trySFSEReserve = true); + + namespace stl + { + template + constexpr void write_thunk_call() noexcept + { + SFSE::AllocTrampoline(14); + auto& trampoline{ SFSE::GetTrampoline() }; + T::func = trampoline.write_call<5>(T::address, T::Thunk); + } + + template + constexpr void write_vfunc() noexcept + { + REL::Relocation vtbl{ TDest::VTABLE[0] }; + TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); + } + + template + constexpr void write_vfunc(const REL::Offset a_offset) noexcept + { + REL::Relocation vtbl{ a_offset }; + T::func = vtbl.write_vfunc(T::idx, T::Thunk); + } + } } // namespace SFSE diff --git a/CommonLibSF/include/SFSE/Impl/PCH.h b/CommonLibSF/include/SFSE/Impl/PCH.h index 78ba539e..e6bcbc3d 100644 --- a/CommonLibSF/include/SFSE/Impl/PCH.h +++ b/CommonLibSF/include/SFSE/Impl/PCH.h @@ -1,58 +1,143 @@ #pragma once -#include -#include -#include -#include -#include -#include +/* +++++++++++++++++++++++++ C++23 Standard Library +++++++++++++++++++++++++ */ + +// Concepts library #include + +// Utilities library +#include +#include +#include +#include +#include +#include #include #include -#include -#include #include -#include #include -#include -#include -#include -#include -#include -#include -#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include #include -#include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include -#include #include #include +#include #include #include #include +#include + +// Dynamic memory management +#include +#include +#include +#include + +// Numeric limits +#include +#include +#include +#include +#include +#include + +// Error handling +#include +#include +#include +#include +#include +#include + +// Strings library +#include +#include +#include +#include +#include +#include +#include +#include + +// Containers library +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +// Iterators library +#include + +// Ranges library +#include + +// Algorithms library +#include +#include + +// Numerics library +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Localization library +#include +#include + +// Input/output library +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Filesystem library +#include + +// Regular Expressions library +#include + +// Atomic Operations library +#include + +// Thread support library +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ + static_assert(std::is_integral_v && sizeof(std::time_t) == sizeof(std::size_t), "wrap std::time_t instead"); #pragma warning(push) From ce6e0d5e8524126d73a392f7129fd09e2c645eff Mon Sep 17 00:00:00 2001 From: Angad Date: Wed, 13 Sep 2023 14:37:43 -0700 Subject: [PATCH 2/7] fix: remove --- CommonLibSF/include/SFSE/Impl/PCH.h | 1 - 1 file changed, 1 deletion(-) diff --git a/CommonLibSF/include/SFSE/Impl/PCH.h b/CommonLibSF/include/SFSE/Impl/PCH.h index e6bcbc3d..5b17fdb2 100644 --- a/CommonLibSF/include/SFSE/Impl/PCH.h +++ b/CommonLibSF/include/SFSE/Impl/PCH.h @@ -41,7 +41,6 @@ #include #include #include -#include // Error handling #include From 85c6cc3741928d6916541e7049b0eed9bad532e7 Mon Sep 17 00:00:00 2001 From: Angad Date: Wed, 13 Sep 2023 14:40:51 -0700 Subject: [PATCH 3/7] fix: revert PCH.h --- CommonLibSF/include/SFSE/Impl/PCH.h | 160 +++++++--------------------- 1 file changed, 38 insertions(+), 122 deletions(-) diff --git a/CommonLibSF/include/SFSE/Impl/PCH.h b/CommonLibSF/include/SFSE/Impl/PCH.h index 5b17fdb2..78ba539e 100644 --- a/CommonLibSF/include/SFSE/Impl/PCH.h +++ b/CommonLibSF/include/SFSE/Impl/PCH.h @@ -1,141 +1,57 @@ #pragma once -/* +++++++++++++++++++++++++ C++23 Standard Library +++++++++++++++++++++++++ */ - -// Concepts library -#include - -// Utilities library -#include +#include +#include +#include #include -#include -#include -#include -#include +#include +#include +#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Dynamic memory management -#include -#include -#include -#include - -// Numeric limits -#include -#include -#include #include -#include - -// Error handling -#include -#include -#include -#include -#include -#include - -// Strings library -#include -#include +#include +#include #include -#include +#include #include #include -#include -#include - -// Containers library -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Iterators library -#include - -// Ranges library -#include - -// Algorithms library -#include +#include #include - -// Numerics library -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Localization library -#include -#include - -// Input/output library -#include +#include +#include #include +#include #include #include -#include -#include #include -#include -#include -#include -#include -#include -#include -#include - -// Filesystem library -#include - -// Regular Expressions library -#include - -// Atomic Operations library -#include - -// Thread support library -#include -#include -#include -#include +#include +#include +#include +#include +#include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include - -/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#include +#include +#include +#include +#include +#include static_assert(std::is_integral_v && sizeof(std::time_t) == sizeof(std::size_t), "wrap std::time_t instead"); From cb0353b44ac7a0be563acc6ebc3fc6d89899db89 Mon Sep 17 00:00:00 2001 From: Angad Date: Wed, 13 Sep 2023 17:18:25 -0700 Subject: [PATCH 4/7] fix: address PR comments --- CommonLibSF/include/SFSE/API.h | 25 ------------------ CommonLibSF/include/SFSE/SFSE.h | 1 + CommonLibSF/include/SFSE/Utilities.h | 39 ++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 25 deletions(-) create mode 100644 CommonLibSF/include/SFSE/Utilities.h diff --git a/CommonLibSF/include/SFSE/API.h b/CommonLibSF/include/SFSE/API.h index 30901d48..e83bc981 100644 --- a/CommonLibSF/include/SFSE/API.h +++ b/CommonLibSF/include/SFSE/API.h @@ -19,29 +19,4 @@ namespace SFSE Trampoline& GetTrampoline(); void AllocTrampoline(std::size_t a_size, bool a_trySFSEReserve = true); - - namespace stl - { - template - constexpr void write_thunk_call() noexcept - { - SFSE::AllocTrampoline(14); - auto& trampoline{ SFSE::GetTrampoline() }; - T::func = trampoline.write_call<5>(T::address, T::Thunk); - } - - template - constexpr void write_vfunc() noexcept - { - REL::Relocation vtbl{ TDest::VTABLE[0] }; - TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); - } - - template - constexpr void write_vfunc(const REL::Offset a_offset) noexcept - { - REL::Relocation vtbl{ a_offset }; - T::func = vtbl.write_vfunc(T::idx, T::Thunk); - } - } } // namespace SFSE diff --git a/CommonLibSF/include/SFSE/SFSE.h b/CommonLibSF/include/SFSE/SFSE.h index 94178045..89aa6e9d 100644 --- a/CommonLibSF/include/SFSE/SFSE.h +++ b/CommonLibSF/include/SFSE/SFSE.h @@ -8,4 +8,5 @@ #include "SFSE/Interfaces.h" #include "SFSE/Logger.h" #include "SFSE/Trampoline.h" +#include "SFSE/Utilities.h" #include "SFSE/Version.h" diff --git a/CommonLibSF/include/SFSE/Utilities.h b/CommonLibSF/include/SFSE/Utilities.h new file mode 100644 index 00000000..1d6deed9 --- /dev/null +++ b/CommonLibSF/include/SFSE/Utilities.h @@ -0,0 +1,39 @@ +#pragma once + +#include "REL/Relocation.h" +#include "SFSE/API.h" + +namespace SFSE +{ + namespace stl + { + template + constexpr void write_thunk_call() noexcept + { + SFSE::AllocTrampoline(14); + auto& trampoline{ SFSE::GetTrampoline() }; + T::func = trampoline.write_call(T::address, T::Thunk); + } + + template + constexpr void write_vfunc() noexcept + { + REL::Relocation vtbl{ TDest::VTABLE[0] }; + TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); + } + + template + constexpr void write_vfunc(const unsigned a_vtable_idx) noexcept + { + REL::Relocation vtbl{ TDest::VTABLE[a_vtable_idx] }; + TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); + } + + template + constexpr void write_vfunc(const REL::Offset a_offset) noexcept + { + REL::Relocation vtbl{ a_offset }; + T::func = vtbl.write_vfunc(T::idx, T::Thunk); + } + } // namespace stl +} // namespace SFSE From 0aeb54cfdb6ef02215716be623611f310c3840af Mon Sep 17 00:00:00 2001 From: Angad Date: Wed, 13 Sep 2023 18:54:00 -0700 Subject: [PATCH 5/7] fix: change unsigned to std::size_t --- CommonLibSF/include/SFSE/Utilities.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CommonLibSF/include/SFSE/Utilities.h b/CommonLibSF/include/SFSE/Utilities.h index 1d6deed9..476ddff3 100644 --- a/CommonLibSF/include/SFSE/Utilities.h +++ b/CommonLibSF/include/SFSE/Utilities.h @@ -7,12 +7,12 @@ namespace SFSE { namespace stl { - template + template constexpr void write_thunk_call() noexcept { SFSE::AllocTrampoline(14); auto& trampoline{ SFSE::GetTrampoline() }; - T::func = trampoline.write_call(T::address, T::Thunk); + T::func = trampoline.write_call(T::address, T::Thunk); } template @@ -23,7 +23,7 @@ namespace SFSE } template - constexpr void write_vfunc(const unsigned a_vtable_idx) noexcept + constexpr void write_vfunc(const std::size_t a_vtable_idx) noexcept { REL::Relocation vtbl{ TDest::VTABLE[a_vtable_idx] }; TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); From 79f7a8c221238f77f5f636e8ae859890283ad9ae Mon Sep 17 00:00:00 2001 From: Angad Date: Wed, 13 Sep 2023 19:01:56 -0700 Subject: [PATCH 6/7] fix: appeasement --- CommonLibSF/include/SFSE/Utilities.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CommonLibSF/include/SFSE/Utilities.h b/CommonLibSF/include/SFSE/Utilities.h index 476ddff3..c245f8a6 100644 --- a/CommonLibSF/include/SFSE/Utilities.h +++ b/CommonLibSF/include/SFSE/Utilities.h @@ -11,28 +11,28 @@ namespace SFSE constexpr void write_thunk_call() noexcept { SFSE::AllocTrampoline(14); - auto& trampoline{ SFSE::GetTrampoline() }; + auto& trampoline = SFSE::GetTrampoline(); T::func = trampoline.write_call(T::address, T::Thunk); } template constexpr void write_vfunc() noexcept { - REL::Relocation vtbl{ TDest::VTABLE[0] }; + REL::Relocation vtbl{ TDest::VTABLE[0] }; TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); } template constexpr void write_vfunc(const std::size_t a_vtable_idx) noexcept { - REL::Relocation vtbl{ TDest::VTABLE[a_vtable_idx] }; + REL::Relocation vtbl{ TDest::VTABLE[a_vtable_idx] }; TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); } template constexpr void write_vfunc(const REL::Offset a_offset) noexcept { - REL::Relocation vtbl{ a_offset }; + REL::Relocation vtbl{ a_offset }; T::func = vtbl.write_vfunc(T::idx, T::Thunk); } } // namespace stl From 56a1035425b2888791b51b90ddf3c360e100afc3 Mon Sep 17 00:00:00 2001 From: Angad Date: Wed, 13 Sep 2023 19:57:08 -0700 Subject: [PATCH 7/7] chore: rename template parameters --- CommonLibSF/include/SFSE/Utilities.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CommonLibSF/include/SFSE/Utilities.h b/CommonLibSF/include/SFSE/Utilities.h index c245f8a6..4a0656f7 100644 --- a/CommonLibSF/include/SFSE/Utilities.h +++ b/CommonLibSF/include/SFSE/Utilities.h @@ -15,18 +15,18 @@ namespace SFSE T::func = trampoline.write_call(T::address, T::Thunk); } - template + template constexpr void write_vfunc() noexcept { - REL::Relocation vtbl{ TDest::VTABLE[0] }; - TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); + REL::Relocation vtbl{ To::VTABLE[0] }; + From::func = vtbl.write_vfunc(From::idx, From::Thunk); } - template + template constexpr void write_vfunc(const std::size_t a_vtable_idx) noexcept { - REL::Relocation vtbl{ TDest::VTABLE[a_vtable_idx] }; - TSource::func = vtbl.write_vfunc(TSource::idx, TSource::Thunk); + REL::Relocation vtbl{ To::VTABLE[a_vtable_idx] }; + From::func = vtbl.write_vfunc(From::idx, From::Thunk); } template