Protect .text segment
This commit is contained in:
@ -104,7 +104,13 @@ namespace Utils
|
||||
|
||||
void Hook::Nop(void* place, size_t length)
|
||||
{
|
||||
DWORD oldProtect;
|
||||
VirtualProtect(place, length, PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
|
||||
memset(place, 0x90, length);
|
||||
|
||||
VirtualProtect(place, length, oldProtect, &oldProtect);
|
||||
FlushInstructionCache(GetCurrentProcess(), place, length);
|
||||
}
|
||||
|
||||
void Hook::Nop(DWORD place, size_t length)
|
||||
|
@ -49,7 +49,12 @@ namespace Utils
|
||||
|
||||
template <typename T> static void Set(void* place, T value)
|
||||
{
|
||||
DWORD oldProtect;
|
||||
VirtualProtect(place, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
|
||||
*static_cast<T*>(place) = value;
|
||||
|
||||
VirtualProtect(place, sizeof(T), oldProtect, &oldProtect);
|
||||
FlushInstructionCache(GetCurrentProcess(), place, sizeof(T));
|
||||
}
|
||||
|
||||
@ -60,7 +65,12 @@ namespace Utils
|
||||
|
||||
template <typename T> static void Xor(void* place, T value)
|
||||
{
|
||||
DWORD oldProtect;
|
||||
VirtualProtect(place, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
|
||||
*static_cast<T*>(place) ^= value;
|
||||
|
||||
VirtualProtect(place, sizeof(T), oldProtect, &oldProtect);
|
||||
FlushInstructionCache(GetCurrentProcess(), place, sizeof(T));
|
||||
}
|
||||
|
||||
@ -71,7 +81,12 @@ namespace Utils
|
||||
|
||||
template <typename T> static void Or(void* place, T value)
|
||||
{
|
||||
DWORD oldProtect;
|
||||
VirtualProtect(place, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
|
||||
*static_cast<T*>(place) |= value;
|
||||
|
||||
VirtualProtect(place, sizeof(T), oldProtect, &oldProtect);
|
||||
FlushInstructionCache(GetCurrentProcess(), place, sizeof(T));
|
||||
}
|
||||
|
||||
@ -82,7 +97,12 @@ namespace Utils
|
||||
|
||||
template <typename T> static void And(void* place, T value)
|
||||
{
|
||||
DWORD oldProtect;
|
||||
VirtualProtect(place, sizeof(T), PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||
|
||||
*static_cast<T*>(place) &= value;
|
||||
|
||||
VirtualProtect(place, sizeof(T), oldProtect, &oldProtect);
|
||||
FlushInstructionCache(GetCurrentProcess(), place, sizeof(T));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user