mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2024-12-29 15:23:02 +05:00
Memory::Patch with std::initializer_list
This commit is contained in:
parent
e4a3d81e81
commit
b002512132
1 changed files with 41 additions and 0 deletions
|
@ -21,6 +21,11 @@
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
#ifndef _MEMORY_NO_CRT
|
||||||
|
#include <initializer_list>
|
||||||
|
#include <iterator>
|
||||||
|
#endif
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PATCH_CALL,
|
PATCH_CALL,
|
||||||
|
@ -422,6 +427,15 @@ namespace Memory
|
||||||
inline void Patch(AT address, T value)
|
inline void Patch(AT address, T value)
|
||||||
{*(T*)address = value; }
|
{*(T*)address = value; }
|
||||||
|
|
||||||
|
#ifndef _MEMORY_NO_CRT
|
||||||
|
template<typename AT>
|
||||||
|
inline void Patch(AT address, std::initializer_list<uint8_t> list )
|
||||||
|
{
|
||||||
|
uint8_t* const addr = (uint8_t*)address;
|
||||||
|
std::copy( list.begin(), list.end(), stdext::checked_array_iterator<uint8_t*>(addr, list.size()) );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename AT>
|
template<typename AT>
|
||||||
inline void Nop(AT address, size_t count)
|
inline void Nop(AT address, size_t count)
|
||||||
#ifndef _MEMORY_NO_CRT
|
#ifndef _MEMORY_NO_CRT
|
||||||
|
@ -474,6 +488,14 @@ namespace Memory
|
||||||
Memory::Patch(DynBaseAddress(address), value);
|
Memory::Patch(DynBaseAddress(address), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _MEMORY_NO_CRT
|
||||||
|
template<typename AT>
|
||||||
|
inline void Patch(AT address, std::initializer_list<uint8_t> list )
|
||||||
|
{
|
||||||
|
Memory::Patch(DynBaseAddress(address), std::move(list));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename AT>
|
template<typename AT>
|
||||||
inline void Nop(AT address, size_t count)
|
inline void Nop(AT address, size_t count)
|
||||||
{
|
{
|
||||||
|
@ -510,6 +532,17 @@ namespace Memory
|
||||||
VirtualProtect((void*)address, sizeof(T), dwProtect[0], &dwProtect[1]);
|
VirtualProtect((void*)address, sizeof(T), dwProtect[0], &dwProtect[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _MEMORY_NO_CRT
|
||||||
|
template<typename AT>
|
||||||
|
inline void Patch(AT address, std::initializer_list<uint8_t> list )
|
||||||
|
{
|
||||||
|
DWORD dwProtect[2];
|
||||||
|
VirtualProtect((void*)address, list.size(), PAGE_EXECUTE_READWRITE, &dwProtect[0]);
|
||||||
|
Memory::Patch(address, std::move(list));
|
||||||
|
VirtualProtect((void*)address, list.size(), dwProtect[0], &dwProtect[1]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename AT>
|
template<typename AT>
|
||||||
inline void Nop(AT address, size_t count)
|
inline void Nop(AT address, size_t count)
|
||||||
{
|
{
|
||||||
|
@ -553,6 +586,14 @@ namespace Memory
|
||||||
VP::Patch(DynBaseAddress(address), value);
|
VP::Patch(DynBaseAddress(address), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef _MEMORY_NO_CRT
|
||||||
|
template<typename AT>
|
||||||
|
inline void Patch(AT address, std::initializer_list<uint8_t> list )
|
||||||
|
{
|
||||||
|
VP::Patch(DynBaseAddress(address), std::move(list));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template<typename AT>
|
template<typename AT>
|
||||||
inline void Nop(AT address, size_t count)
|
inline void Nop(AT address, size_t count)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue