本文说明已知其它进程变量所在地址,如何读取此进程变量地址所保存的信息
Win32ReadMemTest的代码如下
#include "stdafx.h"
#include "windows.h"
int add(int a,int b);
typedef int (*func)(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
DWORD number=10000;
DWORD *ptr=&number;
func myfunc=NULL;
myfunc=add;
printf("%p: %d\n",ptr,*ptr);
printf("func address:%p\n",myfunc);
system("pause");
return 0;
}
int add(int a,int b)
{
return a+b;
}
运行Win32ReadMemTest
就会显示ptr的地址:0x002df914
/************************************************************
FileName:win32SystemInfo
Version :
Date:2013.01.30
Description: //本模块说明
已知其它进程变量所在地址,如何读取其它进程变量地址所保存的信息
<author>
hbb0b0@163.com
</author>
***********************************************************/
#include "stdafx.h"
#include "windows.h"
#include "stdlib.h"
//typedef int (*func)(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
//窗口句柄
HWND hwnd=NULL;
//线程pid
DWORD pId;
//进程句柄
HANDLE hProcess;
//其他程序的变量基地址
LPVOID lpBaseAddress=(LPVOID)0x002df914;
//LPVOID lpFunctBaseAddres=(LPVOID)0x0108109B;
DWORD lpbuffer;
//func funAdd=NULL;
DWORD dwordResult;
BOOL boolResult;
int funcResult=0;
//获取一个窗口句柄
hwnd=FindWindowA("ConsoleWindowClass","E:\\Hbb0b0\\Program\\vs2012\\sqlite3\\Debug\\Win32ReadMemTest.exe");
if(!hwnd)
{
printf("%s\n","can't find thread hwnd!");
return 0;
}
dwordResult= GetWindowThreadProcessId(hwnd,&pId);
if(!dwordResult)
{
printf("%s\n","can't find thread pId!");
return 0;
}
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pId);
if(!hProcess)
{
printf("%s\n","can't find processId!");
return 0;
}
//读取指定进程某个地址的信息
ReadProcessMemory(hProcess,lpBaseAddress,(void*)&lpbuffer,sizeof(DWORD),0 );
printf("%d",lpbuffer);
//ReadProcessMemory(hProcess,lpFunctBaseAddres,(void*)funAdd,sizeof(func),0 );
//funcResult= funAdd(10,5);
//printf("%d",funcResult);
return 0;
}