首页
社区
课程
招聘
[旧帖] [求助]帮忙看看这个异常处理:) 0.00雪花
发表于: 2009-2-25 20:01 3180

[旧帖] [求助]帮忙看看这个异常处理:) 0.00雪花

2009-2-25 20:01
3180
if((ptr[position] == 0xFF) && (ptr[position+1] == 0xE4))这也会产生异常??????
int main ()
{
        HANDLE        hDll;
        char        *ptr;
        int                position;
        BOOL        done_flag = FALSE;
        hDll = LoadLibrary ("user32.dll");
       
        ptr = (char *)hDll;

        for (position = 0; !done_flag;position++)
        {
                try
                {

                        if((ptr[position] == 0xFF) && (ptr[position+1] == 0xE4))
                        {
                       
                                printf ("%x,%x\n",(int)ptr,position);
                        }
                }
                catch (...)
                {

                        printf ("%x,%x\n",(int)ptr,position);
                        done_flag = TRUE;
                }
        }
        return 0;
}

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个是?? 什么???
2009-2-25 21:09
0
雪    币: 440
活跃值: (87)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
3
if((ptr[position] == 0xFF) && (ptr[position+1] == 0xE4))这也会产生异常??????

异常原因是 非法访问内存。
hex      asm
FFE4    jmp esp
(楼主莫非在弄堆栈溢出???)
user32.dll的映像大小是0x90000,position逐渐增大,导致ptr[position]越过了user32.dll,直到读取了一个未被保留的地址,产生非法访问内存的异常,被catch(...)捕获。

从程序最终的运行结果上来看,user32.dll里面不存在FFE4(jmp esp)。
2010-1-16 20:37
0
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
代码段是不能读的。
2010-1-16 21:15
0
游客
登录 | 注册 方可回帖
返回
//