mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
add patch.h for testing
This commit is contained in:
parent
061f078f73
commit
f262004e13
55
inc/patch.h
Normal file
55
inc/patch.h
Normal file
@ -0,0 +1,55 @@
|
||||
#ifndef PATCH_H
|
||||
#define PATCH_H
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
static inline PROC patch_call(char *src, char *dst)
|
||||
{
|
||||
DWORD op = PAGE_EXECUTE_READ;
|
||||
VirtualProtect(src, 5, PAGE_EXECUTE_READWRITE, &op);
|
||||
src[0] = 0xE8;
|
||||
DWORD org = *((DWORD *)(&src[1]));
|
||||
*((DWORD *)(&src[1])) = dst - src - 5;
|
||||
VirtualProtect(src, 5, op, &op);
|
||||
return (PROC)(src + 5 + org);
|
||||
}
|
||||
|
||||
static inline void patch_ljmp(char *src, char *dst)
|
||||
{
|
||||
DWORD op = PAGE_EXECUTE_READ;
|
||||
VirtualProtect(src, 5, PAGE_EXECUTE_READWRITE, &op);
|
||||
src[0] = 0xE9;
|
||||
*((DWORD *)(&src[1])) = dst - src - 5;
|
||||
VirtualProtect(src, 5, op, &op);
|
||||
}
|
||||
|
||||
static inline void patch_clear(char *start, char value, char *end)
|
||||
{
|
||||
DWORD op = PAGE_EXECUTE_READ;
|
||||
VirtualProtect(start, end - start, PAGE_EXECUTE_READWRITE, &op);
|
||||
memset(start, value, end - start);
|
||||
VirtualProtect(start, end - start, op, &op);
|
||||
}
|
||||
|
||||
static inline DWORD patch_setdword(DWORD *dst, DWORD value)
|
||||
{
|
||||
DWORD op = PAGE_EXECUTE_READ;
|
||||
VirtualProtect(dst, sizeof(DWORD), PAGE_EXECUTE_READWRITE, &op);
|
||||
DWORD org = *dst;
|
||||
*dst = value;
|
||||
VirtualProtect(dst, sizeof(DWORD), op, &op);
|
||||
return org;
|
||||
}
|
||||
|
||||
static inline void patch_setbytes(char *dst, char *buf, size_t size)
|
||||
{
|
||||
DWORD op = PAGE_EXECUTE_READ;
|
||||
VirtualProtect(dst, size, PAGE_EXECUTE_READWRITE, &op);
|
||||
memcpy(dst, buf, size);
|
||||
VirtualProtect(dst, size, op, &op);
|
||||
}
|
||||
|
||||
#define PATCH_SET(a,b) patch_setbytes(a,b,sizeof(b)-1)
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user