首页
社区
课程
招聘
[求助]请教一个关于windows异常分发的问题。
发表于: 2016-8-22 00:03 4103

[求助]请教一个关于windows异常分发的问题。

2016-8-22 00:03
4103
我写了两个函数利用异常处理来检测反调试,分别利用了int3断点和0地址访问两种异常,但是得到的效果却不一样,所以来这里请教。
代码分别如下:
函数1:
BOOL MyIsDebuggerPresent_Int3()
{
        __try
        {
                __asm int 3
        }
        __except (EXCEPTION_EXECUTE_HANDLER)
        {
                return FALSE;
        }

        return TRUE;
}

函数2:
BOOL MyIsDebuggerPresent_AccessZeroAddress()
{
        __try
        {
                int* pAddr = NULL;
                *pAddr = 1;
        }
        __except (EXCEPTION_EXECUTE_HANDLER)
        {
                return FALSE;
        }

        return TRUE;
}
程序中分别在main函数中调用这两个函数,如果返回TRUE,就表示该程序正在被调试,则会打印出"Being Debugged.",否则打印出"Not Being Debugged."。
现象是:当用windbg调试时,对于函数1,windbg会收到断点指令异常,在windbg中执行gu命令后会断下,当前的指令是test eax,eax(这条指令是在判断MyIsDebuggerPresent_Int3的返回值,windbg没有给出中断的原因,为什么会断到这条指令呢?),然后执行gu命令,结果发现打印出"Being Debugged.",也即意味着函数1中的异常处理部分始终未被执行;而对于函数2,windbg会收到访问违规异常,在windbg中执行gu命令后会断下,当前的指令是test eax,eax(这条指令是在判断MyIsDebuggerPresent_AccessZeroAddress的返回值,windbg也没有给出中断的原因,为什么也会断到这条指令呢?),然后执行gu命令,结果发现打印出"Not Being Debugged.",也即意味着函数2中的异常处理部分被执行了。

问题:1、对于int3断点,为什么在windbg中执行了gu命令,自己的代码中针对该断点的异常处理没有被执行呢? 而针对访问违规在windbg中执行了gu命令,自己的代码中针对该访问违规的异常处理却被执行了。  2、针对int3断点以及访问违规这两种异常,windbg为什么会中断到判断函数返回值的指令呢? 且均没有给出中断原因。

跪求解答疑惑。

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费
支持
分享
最新回复 (1)
雪    币: 4030
活跃值: (4297)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
睡不着,总觉得是自己哪里搞错了,刚才翻了一下windbg的帮助文件,果然是自己搞错了。 gn(Go with Exception Not Handled)命令才是返回强制不处理异常,我记成gu(Go Up)命令,误以为是(Go with Exception Unhandled)了。 希望各位不要犯和我相同的错误。
2016-8-22 02:21
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册