首页 新闻 赞助 找找看

VC++怎么用WriteProcessMemory修改内存数据?

0
悬赏园豆:100 [已关闭问题]

我用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);
}

问题补充: LPCVOID 和 LPVOID 有什么区别呢? 还有我这么不能选择您的答案为最佳答案了呢? 你的答案下方并没有复选框呢?
钢的锅的主页 钢的锅 | 初学一级 | 园豆:10
提问于:2010-04-23 02:31
< >
分享
其他回答(1)
0
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;

 

eaglet | 园豆:17139 (专家六级) | 2010-04-23 08:20
谢谢
支持(0) 反对(0) 钢的锅 | 园豆:10 (初学一级) | 2010-04-30 17:01
0

论文写作、职称论文发表――写你所想,急您所急!

我们的服务项目:

(1)代写代发教育医学医药类 论文。!

(2)代写代发高会、高审、高经评定职称所需要的论文

(3)代写发表:各类职称及学术论文!本工作室拥有多家合作期刊。

(4)代写:博士、硕士、本专科论文、课程论文,  职称论文、毕业论文、学术论文.

我们的团队:                        

本工作室拥有专业写作、发表队伍为您服务,以打造完美论文为目的,为您提供写作及发表一条龙服务,解决您的后顾之忧。

我们的伙伴:

国内多家会计财务类、金融经济类、教育类、医学类、杂志(均为国家级正规学术期刊具有CN、ISSN刊号)为您参加职称评定提供论文修改撰写、发表等服务。安全可靠,长期服务,信誉好!

 

我们的承诺:

您的需要就是我们的工作,您的满意就是我们的追求,安全保密、质量优秀,舍我其谁!

            咨询电 话:134 7989 4956

工作Q Q809 460 389(论文写作发表)

wstkszs | 园豆:205 (菜鸟二级) | 2010-04-23 20:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册