MegamixATSync is an ATProto based mod for Project Diva MegaMix+
at main 76 lines 4.3 kB view raw
1//#include <MinHook.h> 2//#include <bits/stdc++.h> 3#include <stdbool.h> 4#include <stddef.h> 5#include <stdint.h> 6#include <stdio.h> 7#include <stdlib.h> 8#include <windows.h> 9 10typedef int8_t i8; 11typedef int16_t i16; 12typedef int32_t i32; 13typedef int64_t i64; 14typedef uint8_t u8; 15typedef uint16_t u16; 16typedef uint32_t u32; 17typedef uint64_t u64; 18typedef float f32; 19typedef double f64; 20 21#define FUNCTION_PTR(returnType, function, location, ...) returnType (*function) (__VA_ARGS__) = (returnType (*) (__VA_ARGS__)) (location) 22#define FUNCTION_PTR_H(returnType, function, ...) extern returnType (*function) (__VA_ARGS__) 23 24#define PROC_ADDRESS(libraryName, procName) GetProcAddress (LoadLibrary (TEXT (libraryName)), procName) 25 26#define HOOK(returnType, functionName, location, ...) \ 27 typedef returnType (*functionName) (__VA_ARGS__); \ 28 functionName original##functionName = NULL; \ 29 void *where##functionName = (void *)location; \ 30 returnType implOf##functionName (__VA_ARGS__) 31 32#define INSTALL_HOOK(functionName) \ 33 { \ 34 MH_Initialize (); \ 35 MH_CreateHook ((void *)where##functionName, (void *)implOf##functionName, (void **)(&original##functionName)); \ 36 MH_EnableHook ((void *)where##functionName); \ 37 } 38 39#define READ_MEMORY(location, type) *(type *)location 40 41#define WRITE_MEMORY(location, type, ...) \ 42 { \ 43 const type data[] = {__VA_ARGS__}; \ 44 DWORD oldProtect; \ 45 VirtualProtect ((void *)(location), sizeof (data), PAGE_EXECUTE_READWRITE, &oldProtect); \ 46 memcpy ((void *)(location), data, sizeof (data)); \ 47 VirtualProtect ((void *)(location), sizeof (data), oldProtect, &oldProtect); \ 48 } 49 50#define WRITE_MEMORY_STRING(location, data, length) \ 51 { \ 52 DWORD oldProtect; \ 53 VirtualProtect ((void *)(location), length, PAGE_EXECUTE_READWRITE, &oldProtect); \ 54 memcpy ((void *)(location), data, length); \ 55 VirtualProtect ((void *)(location), length, oldProtect, &oldProtect); \ 56 } 57 58#define WRITE_NOP(location, count) \ 59 { \ 60 DWORD oldProtect; \ 61 VirtualProtect ((void *)(location), (size_t)(count), PAGE_EXECUTE_READWRITE, &oldProtect); \ 62 for (size_t i = 0; i < (size_t)(count); i++) \ 63 *((uint8_t *)(location) + i) = 0x90; \ 64 VirtualProtect ((void *)(location), (size_t)(count), oldProtect, &oldProtect); \ 65 } 66 67#define WRITE_NULL(location, count) \ 68 { \ 69 DWORD oldProtect; \ 70 VirtualProtect ((void *)(location), (size_t)(count), PAGE_EXECUTE_READWRITE, &oldProtect); \ 71 for (size_t i = 0; i < (size_t)(count); i++) \ 72 *((uint8_t *)(location) + i) = 0x00; \ 73 VirtualProtect ((void *)(location), (size_t)(count), oldProtect, &oldProtect); \ 74 } 75 76#define COUNTOFARR(arr) sizeof (arr) / sizeof (arr[0])