首页
社区
课程
招聘
汇编取有效地址的问题 菜鸟求助~~~
发表于: 2015-9-6 09:30 3275

汇编取有效地址的问题 菜鸟求助~~~

2015-9-6 09:30
3275
_asm
        {
                push EAX
                        MOV EAX, DWORD_PTR[地址]
                        MOV EAX, DWORD_PTR[EAX]
                        MOV 值, EAX
                        pop eax
        }

我传入的地址  是有效地址的时候  程序不会出问题
如果传入的地址为无效地址  程序会崩溃
怎么判断地址是否有效

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 123
活跃值: (144)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
IsBadReadPtr
IsBadWritePtr
如果你觉得你够流弊,可以去读取进程的页表,将当前地址转换成页表项,去读页表项的参数也可以判断,不过比较难(其实是很难)
2015-9-6 09:34
0
雪    币: 182
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这是一个函数啊  不能用汇编语言直接判断么
2015-9-6 09:36
0
雪    币: 4751
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我有一个最简单的办法 前提是你要有相当的编程经验

PatchIsCreateAccount proc stdcall
       mov EAX, DWORD_PTR[地址]
       MOV EAX, DWORD_PTR[EAX]
       MOV 值, EAX
       ret
PatchIsCreateAccount endp
或者
__declspec(naked) void WINAPI PatchIsCreateAccount()
{
    __asm
    {
           mov EAX, DWORD_PTR[地址]
           MOV EAX, DWORD_PTR[EAX]
           MOV 值, EAX
           retn
    }
}

vc++声明
void WINAPI PatchIsCreateAccount() throw();
抛出访问异常  你在调用的时候捕获
try
{
      PatchIsCreateAccount();
      值就有数据了
}
catch(...)
{
}

---------------------
IsBadReadPtr
IsBadWritePtr   很多时候靠不住  请别误导人
2015-9-6 10:11
0
游客
登录 | 注册 方可回帖
返回
//