From 4b7cdc86b95cb78aacc2cbe6ddf9380b31f86862 Mon Sep 17 00:00:00 2001 From: 8dcc <8dcc.git@gmail.com> Date: Tue, 25 Jul 2023 18:49:34 +0200 Subject: [PATCH] Add new_flags parameter to protect_addr --- src/globals.c | 3 ++- src/include/util.h | 2 +- src/util.c | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/globals.c b/src/globals.c index 8484155..d2ebc2f 100644 --- a/src/globals.c +++ b/src/globals.c @@ -2,6 +2,7 @@ #include #include #include +#include /* PROT_* */ #include "include/globals.h" #include "include/sdk.h" @@ -54,7 +55,7 @@ bool globals_init(void) { return false; } - if (!unprotect_addr(i_studiomodelrenderer)) { + if (!protect_addr(i_studiomodelrenderer, PROT_READ | PROT_WRITE)) { printf("hl-cheat: globals_init: couldn't unprotect address of SMR\n"); return false; } diff --git a/src/include/util.h b/src/include/util.h index d31a4f2..406de59 100644 --- a/src/include/util.h +++ b/src/include/util.h @@ -35,6 +35,6 @@ float angle_delta_rad(float a, float b); bool world_to_screen(vec3_t vec, vec2_t screen); void gl_drawbox(int x, int y, int w, int h, rgb_t c); void gl_drawline(int x0, int y0, int x1, int y1, float w, rgb_t col); -bool unprotect_addr(void* ptr); +bool protect_addr(void* ptr, int new_flags); #endif /* UTIL_H_ */ diff --git a/src/util.c b/src/util.c index a1aa41a..91f993b 100644 --- a/src/util.c +++ b/src/util.c @@ -139,12 +139,12 @@ void gl_drawline(int x0, int y0, int x1, int y1, float w, rgb_t col) { #define PAGE_ALIGN(x) ((x + PAGE_SIZE - 1) & PAGE_MASK) #define PAGE_ALIGN_DOWN(x) (PAGE_ALIGN(x) - PAGE_SIZE) -bool unprotect_addr(void* ptr) { +bool protect_addr(void* ptr, int new_flags) { void* p = (void*)PAGE_ALIGN_DOWN((int)ptr); int pgsz = getpagesize(); - if (mprotect(p, pgsz, PROT_READ | PROT_WRITE) == -1) { - printf("hl-cheat: error unprotecting %p\n", ptr); + if (mprotect(p, pgsz, new_flags) == -1) { + printf("hl-cheat: error protecting %p\n", ptr); return false; }