欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

如何使用ReadProcessMemory读取多重指针

时间:2023-04-27

1、多重指针通常是指多个指针的嵌套,每个指针里存放的是其他指针的地址,简单点说就是在一个变量中存入了一个数,而这个数正好是一个变量的地址,通过这个地址就可以去操作那个变量

2、注意事项:使用ReadProcessMemory读取指针是要注意读取的是该地址里的数据,这个数据表示一个地址

3、代码如下:实现的功能是读取CS1.6中自己的坐标。在读数据时需要注意,最后一层指针指向的就是我们需要的数据,所以千万不要再去读取最后一层指针的地址

#pragma once#include#include#include "iHook.h"void ReadFBmem(HANDLE hProcess, PDWORD dstAddr, DWORD dwCount);HANDLE iOpenProcess(DWORD PID);int main(){LPCSTR szAppName = "Counter-Strike";LPCSTR szModName = "cstrike.exe";DWORD bsAddr = 0;DWORD PID = 0;DWORD dstAddr = 0; DWORD offSet[] = {0x00, 0x0, 0x4B9C, 0x88 };DWORD cOffset = sizeof(offSet) / sizeof(DWORD);FindPID(szAppName, PID);iDumpModule(szModName, bsAddr, PID);offSet[0] = bsAddr + 0x95A244;HANDLE hProcess = iOpenProcess(PID);while (1){ReadFBmem(hProcess, offSet, cOffset);Sleep(100);}//printf("%0xn", offSet[0]);//CloseHandle(hProcess);return 0;}void ReadFBmem(HANDLE hProcess, PDWORD lpdstAddr, DWORD dwCount){FLOAT szBuffer[4] = { 0 };DWORD dwRead = lpdstAddr[0];DWORD lpBuffer[2];for (int i = 0; i < dwCount - 1; i++){if (i != 0){//需要加偏移dwRead = lpBuffer[0] + lpdstAddr[i];}ReadProcessMemory(hProcess, (LPVOID)dwRead, &lpBuffer[0],sizeof(DWORD), NULL);}//最后一级指针是数据ReadProcessMemory(hProcess, (LPVOID)(lpBuffer[0] + lpdstAddr[dwCount - 1]),&szBuffer, 3*sizeof(FLOAT), NULL);for (int j = 0; j < 3; j++){printf("%.2fn", szBuffer[j]);}}HANDLE iOpenProcess(DWORD PID){HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);if (hProcess == INVALID_HANDLE_VALUE){printf("打开进程句柄失败");return 0;}return hProcess;}

多级指针的读写多级指针写内存(地址指针, 数组大小){ 地址缓存数组 = {0};中转变量 = 地址指针[0];//读指针循环(I =0 ; I < 数组大小 – 1; i++){ if(I != 0)中转变量 = 地址缓存[0] + 地址指针[i]; 读内存(中转变量);}//读数据读内存(地址缓存数组[0] + 地址指针[数组大小 - 1];}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。