memreader.cpp

来自「基于VC++用来读指定进程内存数据的程序」· C++ 代码 · 共 109 行

CPP
109
字号
// MemReader.cpp: implementation of the MemReader class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MemoryReader.h"
#include "MemReader.h"

#include "winbase.h"
#include "tlhelp32.h"

#include "iostream.h"
#include "stdlib.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

MemReader::MemReader(LPCTSTR name)
{
	pId = GetProcessIdFromName(name);
	hProcess = OpenProcess(PROCESS_VM_READ, false, pId);

	if(hProcess == NULL)
	{
		cout << "Open Process Error!" << endl;
		return;
	}
}

MemReader::~MemReader()
{

}

DWORD MemReader::GetProcessIdFromName(LPCTSTR name)
{
	PROCESSENTRY32 pe;
	DWORD id = 0;
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	pe.dwSize = sizeof(PROCESSENTRY32);
	if(!Process32First(hSnapshot,&pe))
		return 0;
	do
	{
		pe.dwSize = sizeof(PROCESSENTRY32);
		if(!Process32Next(hSnapshot,&pe))
		break;
		if(strcmp(pe.szExeFile,name) == 0)
		{
			id = pe.th32ProcessID;
			break;
		}
	}while(TRUE);
	CloseHandle(hSnapshot);
	return id;
}

void MemReader::setProcess(char *procName)
{
	pId = GetProcessIdFromName(procName);
	hProcess = OpenProcess(PROCESS_VM_READ, false, pId);

	if(hProcess == NULL)
	{
		cout << "Open Process Error!" << endl;
		return;
	}
}

void MemReader::readMemory(LPCVOID addr, LPVOID valueBuffer, int bytes)
{
	if(!ReadProcessMemory(hProcess, addr, valueBuffer, bytes, NULL))
		cout << "Read Error!" << endl;
}

int MemReader::getSpeed()
{
	char speedStr[64];
	readMemory((LPCVOID)speedAddr, (LPVOID)speedStr, 8);
	cout << "speed string: " << speedStr << endl;
	return atoi(speedStr);
}

int MemReader::getGear()
{
	char gearStr[64];
	readMemory((LPCVOID)gearAddr, (LPVOID)gearStr, 8);
	cout << "gear string: " << gearStr << endl;
	return atoi(gearStr);
}


void MemReader::setSpeedAddress(long int addr)
{
	speedAddr = addr;
}

void MemReader::setGearAddress(long int addr)
{
	gearAddr = addr;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?