summaryrefslogtreecommitdiff
path: root/mempoke/mempoke-target.c
diff options
context:
space:
mode:
Diffstat (limited to 'mempoke/mempoke-target.c')
-rw-r--r--mempoke/mempoke-target.c67
1 files changed, 67 insertions, 0 deletions
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 <windows.h>
+#endif
+
+#ifdef __linux__
+# include <unistd.h>
+#endif
+
+#include <assert.h>
+#include <inttypes.h>
+#include <stdint.h>
+#include <stdio.h>
+
+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);
+ }
+}
+