首页
社区
课程
招聘
[求助]第11章实例SHE2的疑问
发表于: 2008-11-25 23:57 4914

[求助]第11章实例SHE2的疑问

2008-11-25 23:57
4914
问题一是:
EXCEPTION_POINTERS结构是顶层异常处理回调函数(筛选器回调函数)的参数,但此结构不是线程异常处理回调函数的参数(它的参数有四个,包括了EXCEPTION_POINTERS结构的两个参数),为什么在线程异常处理过程中,发生异常后,也总是先到EXCEPTION_POINTERS结构???

求助二:
先把实例SHE2的代码弄上来,自己把它分成了3节

以下的第一节是原程序代码,构造了一个ERR结构,并发生了访问内存异常:
00401000 >/$  68 51104000   push    00401051                        
00401005  |.  64:FF35 00000>push    dword ptr fs:[0]
0040100C  |.  64:8925 00000>mov     dword ptr fs:[0], esp
00401013  |.  BE 00000000   mov     esi, 0
00401018  |.  8B06          mov     eax, dword ptr [esi]            

以下这一节是SHE回调函数处理后程序又重新执行的地方,重新执行地址为0040102D
0040101A  |.  6A 00         push    0                                
0040101C  |.  68 00304000   push    00403000                        
00401021  |.  68 0F304000   push    0040300F                        
00401026  |.  6A 00         push    0                                
00401028  |.  E8 57000000   call    <jmp.&USER32.MessageBoxA>      
0040102D  |.  6A 00               push    0                                 
0040102F  |.  68 00304000   push    00403000                        
00401034  |.  68 04304000   push    00403004                 
00401039  |.  6A 00               push    0                                
0040103B  |.  E8 44000000   call    <jmp.&USER32.MessageBoxA>        
00401040  |.  64:8F05 00000>pop     dword ptr fs:[0]
00401047  |.  83C4 04           add     esp, 4
0040104A  |.  6A 00               push    0                                ; /ExitCode = 0
0040104C  \.  E8 39000000   call    <jmp.&KERNEL32.ExitProcess>      ;

以下是SHE回调函数:
00401051  /$  55            push    ebp                              ;  结构异常处理程序
00401052  |.  8BEC          mov     ebp, esp
00401054  |.  53            push    ebx
00401055  |.  8B45 10       mov     eax, dword ptr [ebp+10]   ;EAX此时即CONTEX
                                                                                                   指针
00401058  |.  8D1D 2D104000 lea     ebx, dword ptr [40102D]
0040105E  |.  8998 B8000000 mov     dword ptr [eax+B8], ebx
00401064  |.  33DB          xor     ebx, ebx
00401066  |.  8958 04       mov     dword ptr [eax+4], ebx
00401069  |.  8958 08       mov     dword ptr [eax+8], ebx
0040106C  |.  8958 0C       mov     dword ptr [eax+C], ebx
0040106F  |.  8958 10       mov     dword ptr [eax+10], ebx
00401072  |.  C740 18 55010>mov     dword ptr [eax+18], 155
00401079  |.  B8 00000000   mov     eax, 0
0040107E  |.  5B            pop     ebx
0040107F  |.  C9            leave
00401080  \.  C2 1000       ret     10

我先用OD单步执行到00401018后,用F7进入了异常刚发生时的系统代码处,EXCEPTION_POINTERS结构在栈顶,结构如下:
0012FCCC   0012FCD4   ;指向EXCEPTION_RECORD
0012FCD0   0012FCF0    ;指向CONTEXT
继续向下执行,一直执行到:
00401055  |.  8B45 10       mov     eax, dword ptr [ebp+10]   ;EAX此时即CONTEX
                                                                                                   指针
看寄存器EAX确实是0012FCF0,是指向CONTEX,问题二是:
为什么[ebp+10]就是指向CONTEX的呢???
(已在数据窗口跟踪过一遍,EBP是0012FC0C,EBP+10是0012FC1C,[0012FC1C]就是0012FCF0)
我的意思是[ebp+10]指向CONTEX的机理是什么?

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 266
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶一下吧  我也再找这个的答案
并且 在搭车 文革问题 下那句 为什么要用 esp 传值  或者 说为什么esp此时的值是ERR结构
0040100C  |.  64:8925 00000>mov     dword ptr fs:[0], esp
2009-1-20 14:52
0
雪    币: 14
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
问题一我看不明白什么意思。
问题二:为什么[ebp+10]就是指向CONTEX的呢???

因为源码有这么两句:mov eax, pContext
                    Assume eax:ptr CONTEXT
所以eax就指向CONTEXT了

二楼的问题:参看P308的TEB结构
2009-1-22 00:13
0
游客
登录 | 注册 方可回帖
返回
//