首页
社区
课程
招聘
[求助]第13章--异常_FrameUnwindToState函数
发表于: 2013-10-30 00:35 16111

[求助]第13章--异常_FrameUnwindToState函数

2013-10-30 00:35
16111
不知道各位看过钱老师的同学还记得不,其中_FrameUnwindToState有段代码
[ebp+dwState], ecx    ; ecx<=EHRegistrationNode.dwState;

.......循环开始处;

一系列判断,比较之后...

; 开始获取栈展开函数表的指针UnwindMapEntry*,并保存到eax
mov eax, [edx+FuncInfo.pUnwindMap]
mov ecx, [ebp+dwState]                ; 第一次,dwState仍然是EHRegistrationNode.dwState
                                     ; 第二次,dwState变为UnwindMapEntry->toState
cmp dword ptr [eax+ecx*8+4], 0   ; 个人认为[eax+ecx*sizeof(UnwindMapEntry)+4]寻址

.......又是一系列判断,比较,调用...

循环尾处.
mov ecx,[ebp+dwState]
mov edx,[eax+ecx*8]       ; 第二次的时候, 不是又找到之前的数组了吗?
mov [ebp+dwState],edx     ; 此时dwState值被改变了,改变成为栈展开数组中指定元素(toState)

jmp 循环开始处...
=========================================================

我个人理解最后一次dwState赋的值为UnwindMapEntry->toState,即为下标索引.
这样在循环中,[eax+dwstate*8+4]岂不是又重复了?肯定是哪里搞错了,麻烦指点下.

[课程]Linux pwn 探索篇!

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