diff --git a/memory_utils.h b/memory_utils.h deleted file mode 100644 index a5cffd598..000000000 --- a/memory_utils.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef MEMORY_UTILS_H -#define MEMORY_UTILS_H - -#include -#include -#include -#include -#include - -// --- 安全读取内存逻辑 (学习自“那份代码”) --- -// 使用 process_vm_readv 或者 pipe 探测法来防止非法地址读取导致的闪退 - -template -T Read(uintptr_t address) { - T data{}; - if (address < 0x1000000 || address > 0x7FFFFFFFFFFF) { - return data; // 过滤明显的非法指针 - } - - struct iovec local[1]; - struct iovec remote[1]; - - local[0].iov_base = &data; - local[0].iov_len = sizeof(T); - remote[0].iov_base = (void*)address; - remote[0].iov_len = sizeof(T); - - // 在内部注入时,如果 process_vm_readv 不可用,可以尝试使用安全拷贝 - // 这里的实现保证了如果地址无效,程序不会直接崩溃 - ssize_t nread = process_vm_readv(getpid(), local, 1, remote, 1, 0); - - if (nread < 0) { - // 如果系统不支持 vm_readv,回退到基本内存校验(可选实现) - return data; - } - - return data; -} - -// 专门用于读取 Il2cpp 字符串或游戏名称的工具 -inline char* ReadString(uintptr_t address, size_t size) { - static char buffer[256]; - memset(buffer, 0, sizeof(buffer)); - - struct iovec local[1]; - struct iovec remote[1]; - - local[0].iov_base = buffer; - local[0].iov_len = (size > 255) ? 255 : size; - remote[0].iov_base = (void*)address; - remote[0].iov_len = local[0].iov_len; - - process_vm_readv(getpid(), local, 1, remote, 1, 0); - return buffer; -} - -#endif // MEMORY_UTILS_H