首页
社区
课程
招聘
[旧帖] 学习加密解密第十章SEH异常疑惑之SEH相关数据结构习题 0.00雪花
发表于: 2016-6-12 20:46 1960

[旧帖] 学习加密解密第十章SEH异常疑惑之SEH相关数据结构习题 0.00雪花

2016-6-12 20:46
1960
原来我弄错了要在401017处按shift+F7进入系统领空才能对的到,研究了老半天眼花

错误理解:
1.例子seh.exe学习:

跳转到handler地址40102E后堆栈地址与书上不同
首先我们看EXCEPTION_POINTERS结构
typedef struct _EXCEPTION_POINTERS
{
+0   PEXCEPTION_RECORD   ExceptionRecord;        //指向一个EXCEPTION_RECORD结构
+4  PCONTEXT            ContextRecord;          //指向向一个CONTEXT结构
}
    EXCEPTION_POINTERS,
    *PEXCEPTION_POINTERS;
那么我们再看程序40102E堆栈数据
0012FA58   772A71D9  返回到 ntdll.772A71D9 
疑问:为何堆栈停留在这里?
推理1:windows检测到了这个异常,就会向堆栈压入3个结构.压入顺序windows检测到了这个异常,就会将向堆栈压入3个结构分别是EXCEPTION_RECORD,EXCEPTION_CONTEXT,EXCEPTION_POINTERS,但是不对啊EXCEPTION_POINTERS只有2个参数
0012FA5C   0012FB40  假设这个是EXCEPTION_RECORD结构 +0
0012FA60   0012FF84  假设这个是CONTEXT                          +4 
疑问: 为何这个不是CONTEXT结构,12FB5C才是
按道理说RECORD结构下一个就是CONTEXT结构为何差距那么大一个是FB40一个是FF84
0012FA64   0012FB5C 为何我算了下这个才是真正的CONTEXT结构
0012FA68   0012FB14

------------------------------------------------------------
我们先来到了EXCEPTION_RECORD:

0012FB40  C0000005        //异常事件码
0012FB44  00000000       //标志
0012FB48  00000000      //下一个EXCEPTION_RECORD结构地址
0012FB4C  00401017  Seh.00401017  //异常发生的地址
0012FB50  00000002     //ExceptionInformation的dword数目   
0012FB54  00000000     //异常信息 ?
0012FB58  00000000     //疑问:难道结尾是全是0的DWORD大小?
---------------------------------------------------------
然后EXCEPTION_RECORD紧接的是CONTEXT结构
0012FB5C  0001007F   DWORD           ContextFlags
0012FB60  00000000
0012FB64  00000000
0012FB68  00000000
0012FB6C  00000000
0012FB70  00000000
0012FB74  00000000

疑惑:为何CONTEXT结构在堆栈中不是紧跟着EXCEPTION_RECORD
0012FA58   772A71D9  返回到    ntdll.772A71D9   
0012FA5C   0012FB40  EXCEPTION_RECORD   为何跳转到40102E堆栈不是直接定位到这里然是上面那句
0012FA60   0012FF84  这个地址又是什么东西?
0012FA64   0012FB5C 为何这个才是真正的CONTEXT,那上面那个地址是什么来的?

希望大家别犯我这种低级错误


401017处按shift+F7进入系统领空才能对的到

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//