VC++怎么读取内存基址加偏移???
DWORDbyread;LPCVOIDpbase=(LPCVOID)(基址);这里(基址+偏移)这样写,不对LPVOIDnbuffer=(LPVOID)&m_num4;:...
DWORD byread;
LPCVOID pbase=(LPCVOID)(基址); 这里 (基址+偏移)这样写,不对
LPVOID nbuffer=(LPVOID)&m_num4;
::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);
用ReadProcessMemory函数读取基址,但是偏移就读取不出来了,比如基址+80,就什么也不显示,求高手指教!!! 展开
LPCVOID pbase=(LPCVOID)(基址); 这里 (基址+偏移)这样写,不对
LPVOID nbuffer=(LPVOID)&m_num4;
::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);
用ReadProcessMemory函数读取基址,但是偏移就读取不出来了,比如基址+80,就什么也不显示,求高手指教!!! 展开
1个回答
展开全部
你的第三第四参数,只给了4个字节大小(int?),怎么可能读取出+80来呢?
假如你需要读取100个int(DWORD)的数据,第三参数要给400字节以上的指针,第四参数要100*sizeof(DWORD),第五参数验证实际读取了多少。
你用调试显示一下第五参数byread的值,应该是4,也就是,你只取了4个字节,后面的没有取出,当然读不出来。
如果你说第二参数,建议你还是按照上面的办法,看看第五参数实际能读取多少,在实际能读取的范围内,偏移才有效。
假如你需要读取100个int(DWORD)的数据,第三参数要给400字节以上的指针,第四参数要100*sizeof(DWORD),第五参数验证实际读取了多少。
你用调试显示一下第五参数byread的值,应该是4,也就是,你只取了4个字节,后面的没有取出,当然读不出来。
如果你说第二参数,建议你还是按照上面的办法,看看第五参数实际能读取多少,在实际能读取的范围内,偏移才有效。
更多追问追答
追问
应该怎么改呢?如果 那个基址我用CE偏移后的地址,就能读出了。
追答
就是用CE获取偏移后的地址。这个函数,不是随便哪个地址都可读的,看权限,还看系统内存的管理。
建议你,就是使用CE偏移后的地址,计算你需要的地址和这个地址的差值,将整个部分都读取到你的程序内指针中,再对自己的指针进行地址偏移计算,获取想要的内容。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询