-
-
[求助]第13章--异常_FrameUnwindToState函数
-
发表于: 2013-10-30 00:35 16144
-
不知道各位看过钱老师的同学还记得不,其中_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]岂不是又重复了?肯定是哪里搞错了,麻烦指点下.
[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]岂不是又重复了?肯定是哪里搞错了,麻烦指点下.
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [求助]KeAttachProcess蓝屏问题 4343
- [求助]第13章--异常_FrameUnwindToState函数 16145
- [求助]第十章ShowNumber程序BUG 23561
- [求助]OD无法调试进程的内存(具体原因) 3883
看原图
赞赏
雪币:
留言: