#pragma once #include "FunctionAddressProvider.h" #include "PatchedFunctionData.h" #include "utils/logger.h" #include #include #include #include #include #include #include #include #include #include class PatchedFunctionData { public: ~PatchedFunctionData(); explicit PatchedFunctionData(std::shared_ptr functionAddressProvider) : functionAddressProvider(std::move(functionAddressProvider)) { } static std::optional> make_shared(std::shared_ptr functionAddressProvider, function_replacement_data_t *replacementData, MEMHeapHandle heapHandle); bool updateFunctionAddresses(); void generateJumpToOriginal(); void generateReplacementJump(); uint32_t getHandle() { return (uint32_t) this; } uint32_t *jumpToOriginal{}; uint32_t *jumpData{}; uint32_t realEffectiveFunctionAddress{}; uint32_t realPhysicalFunctionAddress{}; uint32_t *realCallFunctionAddressPtr{}; uint32_t replacementFunctionAddress{}; uint32_t replacedInstruction{}; uint32_t replaceWithInstruction{}; uint32_t jumpDataSize = 15; MEMHeapHandle heapHandle = nullptr; bool isPatched{}; function_replacement_library_type_t library{}; FunctionPatcherTargetProcess targetProcess{}; std::optional functionName = {}; std::shared_ptr functionAddressProvider; };