From f5f267418f27c26e87074ba2ab74d2913932c67f Mon Sep 17 00:00:00 2001 From: Hunter Kvalevog Date: Thu, 18 Jun 2026 14:16:07 -0500 Subject: --- mempoke/mempoke-target.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 mempoke/mempoke-target.c (limited to 'mempoke/mempoke-target.c') diff --git a/mempoke/mempoke-target.c b/mempoke/mempoke-target.c new file mode 100644 index 0000000..2c34780 --- /dev/null +++ b/mempoke/mempoke-target.c @@ -0,0 +1,67 @@ +// ================================================================================================ +// Example showing how to read/write process memory remotely. +// +// License: +// Copyright (c) 2026 Hunter Kvalevog +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted. +// +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE. +// ================================================================================================ + +#ifdef _WIN32 +# include +#endif + +#ifdef __linux__ +# include +#endif + +#include +#include +#include +#include + +int tgtnum = 1; + +static inline uintptr_t get_process_base_address(void) +{ + uintptr_t base = 0; +#ifdef _WIN32 + base = (uintptr_t)GetModuleHandleW(0); +#endif +#ifdef __linux__ + FILE *maps = fopen("/proc/self/maps", "r"); + fscanf(maps, "%" SCNxPTR "-", &base); + fclose(maps); +#endif + assert(base); + return base; +} + +static inline void sleep_ms(unsigned ms) +{ +#ifdef _WIN32 + Sleep(ms); +#endif +#ifdef __linux__ + usleep(ms * 1000); +#endif +} + +int main(int argc, const char **argv) +{ + (void)argc; + (void)argv; + + printf("offset: 0x%" PRIxPTR "\n", (uintptr_t)&tgtnum - get_process_base_address()); + sleep_ms(3000); + + while (1) { + sleep_ms(1000); + printf("tgtnum: %d\n", tgtnum); + } +} + -- cgit v1.2.3