指定一个内存地址指针,对该地址进行取值时目标程序崩溃,怎么才能判断该地址是否可以进行取值操作?

部分代码如下,采用dll注入目标程序,想读取目标程序指定内存地址的值,但是用指针操作时导致目标程序崩溃,有些地址就不会出现这种情况,听说IsBadReadPtr检查调用进... 部分代码如下,采用dll注入目标程序,想读取目标程序指定内存地址的值 ,但是用指针操作时导致目标程序崩溃,有些地址就不会出现这种情况,听说 IsBadReadPtr检查调用进程是否有读取指定内存的内容的权限 ,但是不知道具体怎么用,加在下面也没有用
int i=0x1ffe*4+0x03f82520;//指定的要读取的内存地址
pb=(int*)i;
if(IsBadReadPtr(pb,0x1000))
{
AfxMessageBox("不具有权限");
return false ;
}
b8=(int*)(*pb+0x8);
b31c=(float*)(*pb+0x31C);
b380=(int*)(*pb+0x380);
if((*b8==0x2E)&&(*b31c<=100)&&(*b380==0))
{
AfxMessageBox("读取开始");
}
展开
 我来答
佐助boy
2011-12-29 · 超过67用户采纳过TA的回答
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:155万
展开全部
不个你考代码
1,OpenProcess 函数打开目标进程 打开时权限给高点 要有读写内存的权限
2,VirtualAllocEx 函数在目标进程中分配内存(要写的权限,)
3,WriteProcessMemory 将你要加载的dll文件 全路径写到上面分配的内存里
4,获得LoadLibrary函数的地址 固定的
5,CreateRemoteThread 创建一个远程线程 函数体 是LoadLibrary 的地址 ,参数是 VirtualAllocEx 分配的地址
6,WaitForSingleObject 等待完成
7,清理工作

读取和上面差不多
VirtualProtectEx 修改内存权限
ReadProcessMemory
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名_热心网友
2012-01-09 · TA获得超过719个赞
知道大有可为答主
回答量:3827
采纳率:0%
帮助的人:8415万
展开全部
break;
case 5: printf("按照学号查找学生信息\n");
Search_num(Stu,n);
menu();
break;
case 6: printf("删除指定学号的学生信息\n");
Delete(Stu,n);
menu();
break;
case 7: printf("按照总分排序并写入二进制文件中\n");
Selection_total(Stu, n);
menu();
break;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
throat31
2011-12-29 · TA获得超过613个赞
知道答主
回答量:225
采纳率:0%
帮助的人:133万
展开全部
谭浩强指针这章里提到“程序经过编译后已经将变量名转换为变量的地址,变量名地址分为线性地址和物理地址,编译后分配的是线性地址,物理地址是实际内存的
追问
哎,我没看过他这本书,我就是个门外汉,老兄能否帮我改下上面这段代码啊,
int i=0x0ffe*4+0x03f82520;//这个地方如果取int i=0x1ffe*4+0x03f82520,程序就会崩溃
pb=(int*)i;
b8=(int*)(*pb+0x8);
b31c=(float*)(*pb+0x31C);
b380=(int*)(*pb+0x380);
if((*b8==0x2E)&&(*b31c<=100)&&(*b380==0))//这一句代码是目标程序崩溃,我该怎么判断b8等指针是否可以进行*操作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式