指定一个内存地址指针,对该地址进行取值时目标程序崩溃,怎么才能判断该地址是否可以进行取值操作?
部分代码如下,采用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("读取开始");
} 展开
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("读取开始");
} 展开
3个回答
展开全部
不个你考代码
1,OpenProcess 函数打开目标进程 打开时权限给高点 要有读写内存的权限
2,VirtualAllocEx 函数在目标进程中分配内存(要写的权限,)
3,WriteProcessMemory 将你要加载的dll文件 全路径写到上面分配的内存里
4,获得LoadLibrary函数的地址 固定的
5,CreateRemoteThread 创建一个远程线程 函数体 是LoadLibrary 的地址 ,参数是 VirtualAllocEx 分配的地址
6,WaitForSingleObject 等待完成
7,清理工作
读取和上面差不多
VirtualProtectEx 修改内存权限
ReadProcessMemory
1,OpenProcess 函数打开目标进程 打开时权限给高点 要有读写内存的权限
2,VirtualAllocEx 函数在目标进程中分配内存(要写的权限,)
3,WriteProcessMemory 将你要加载的dll文件 全路径写到上面分配的内存里
4,获得LoadLibrary函数的地址 固定的
5,CreateRemoteThread 创建一个远程线程 函数体 是LoadLibrary 的地址 ,参数是 VirtualAllocEx 分配的地址
6,WaitForSingleObject 等待完成
7,清理工作
读取和上面差不多
VirtualProtectEx 修改内存权限
ReadProcessMemory
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
谭浩强指针这章里提到“程序经过编译后已经将变量名转换为变量的地址,变量名地址分为线性地址和物理地址,编译后分配的是线性地址,物理地址是实际内存的
追问
哎,我没看过他这本书,我就是个门外汉,老兄能否帮我改下上面这段代码啊,
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等指针是否可以进行*操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询