栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

如何使用ReadProcessMemory读取多重指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用ReadProcessMemory读取多重指针

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];
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号