我用CE找到相应的内存地址,并且用CE修改内存数据是成功的,我想编程修改,可总是提示:“WriteProcessMemory' : cannot convert parameter 2 from 'const void *' to 'void *'
Conversion loses qualifiers”
我写的代码如下:(我是想把一个几千的整数 修改为大一点,就是加上几百)
const PCHAR gameCaption = "test";
void CZhengtuWGDlg::OnBtnAuto()
{
//获取窗口句柄
HWND gameh=::FindWindow(NULL,gameCaption);
//获取窗口进程ID
DWORD processid;
::GetWindowThreadProcessId(gameh,&processid);
//打开指定进程
HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,false,processid);
//读指定进程 内存数据
DWORD byread;//实际读取的字节数
LPCVOID pbase=(LPCVOID)0x00416648;//基址 即读取数据的起始内存地址
LPVOID nbuffer=(LPVOID)&m_num;// 存放数据的缓冲区
::ReadProcessMemory(processH,pbase,nbuffer,2,&byread);
UpdateData(false); //更新变量的值到 编辑框
nbuffer +=300;
WriteProcessMemory(processH,pbase,&nbuffer,2,&byread);
}
BOOL WINAPI WriteProcessMemory(
__in HANDLE hProcess,
__in LPVOID lpBaseAddress,
__in LPCVOID lpBuffer,
__in SIZE_T nSize,
__out SIZE_T *lpNumberOfBytesWritten
);
pbase 是 LPVOID 而 nbuffer 是 LPCVOID ,你搞反了。
另外你输入时应该是
WriteProcessMemory(processH,pbase,nbuffer,2,&byread);
而不应该再对 nbuffer 取地址了,因为你这个nbuffer 本身已经是
m_num 的地址了,再取地址就变成指向指针的地址了。
还有 nbuffer += 300; 也不对,这是把指针地址加了300.
应写成 *((int*)nbuffer) = m_num + 300;
论文写作、职称论文发表――写你所想,急您所急!
我们的服务项目:
(1)代写代发教育医学医药类 论文。!
(2)代写代发高会、高审、高经评定职称所需要的论文
(3)代写发表:各类职称及学术论文!本工作室拥有多家合作期刊。
(4)代写:博士、硕士、本专科论文、课程论文, 职称论文、毕业论文、学术论文.
我们的团队:
本工作室拥有专业写作、发表队伍为您服务,以打造完美论文为目的,为您提供写作及发表一条龙服务,解决您的后顾之忧。
我们的伙伴:
国内多家会计财务类、金融经济类、教育类、医学类、杂志(均为国家级正规学术期刊具有CN、ISSN刊号)为您参加职称评定提供论文修改撰写、发表等服务。安全可靠,长期服务,信誉好!
我们的承诺:
您的需要就是我们的工作,您的满意就是我们的追求,安全保密、质量优秀,舍我其谁!
咨询电 话:134 7989 4956
工作Q Q:809 460 389(论文写作发表)