请问call _EP_prolog是什么意思呢?是在安装异常处理吗?

谢谢!

  • 标 题: 应该是_SEH_prolog
  • 作 者:zwell
  • 时 间:2006-05-13 20:01

VC编译出来的程序有bp-based frame、non bp-based frame之
分,就是说函数入口处是否有显式的"push ebp/mov ebp, esp"或者enter指令存在。
如果两个push之后是"call __SEH_prolog"指令,就属于non bp-based frame情形。
据我逆向经验,XP SP1/ntdll中涉及SEH/__try块的基本都是non bp-based frame情
形,此时stack布局如下:

--------------------------------------------------------------------------
内存高址方向

[EBP+0x004] RetAddr
[EBP-0x000] _ebp
[EBP-0x004] trylevel
[EBP-0x008] scopetable
[EBP-0x00C] handler
[EBP-0x010] prev
[EBP-0x014] PEXCEPTION_POINTERS/GetExceptionInformation()
[EBP-0x018] Hold the final ESP after all the prologue code has executed
[EBP-0x01C] 第001个局部变量

内存低址方向
--------------------------------------------------------------------------

hume指出2000/ntdll是bp-based frame情形,此时第001个局部变量是[EBP-0x004]。

====================================
以上内容载自http://www.opencjk.org/~scz/windows/200311231550.txt

我们可以逆向一下_SEH_PROLOG函数:
lkd> uf _SEH_PROLOG
ntdll!_SEH_prolog:
7c92edc2 6818ee927c       push    0x7c92ee18
7c92edc7 64a100000000     mov     eax,fs:[00000000]
7c92edcd 50               push    eax
7c92edce 8b442410         mov     eax,[esp+0x10]
7c92edd2 896c2410         mov     [esp+0x10],ebp
7c92edd6 8d6c2410         lea     ebp,[esp+0x10]
7c92edda 2be0             sub     esp,eax
7c92eddc 53               push    ebx
7c92eddd 56               push    esi
7c92edde 57               push    edi
7c92eddf 8b45f8           mov     eax,[ebp-0x8]
7c92ede2 8965e8           mov     [ebp-0x18],esp
7c92ede5 50               push    eax
7c92ede6 8b45fc           mov     eax,[ebp-0x4]
7c92ede9 c745fcffffffff   mov     dword ptr [ebp-0x4],0xffffffff
7c92edf0 8945f8           mov     [ebp-0x8],eax
7c92edf3 8d45f0           lea     eax,[ebp-0x10]
7c92edf6 64a300000000     mov     fs:[00000000],eax
7c92edfc c3               ret

而0x7c92ee18而地址为ntdll!_except_handler3函数
lkd> u 0x7c92ee18
ntdll!_except_handler3:
7c92ee18 55               push    ebp
7c92ee19 8bec             mov     ebp,esp
7c92ee1b 83ec08           sub     esp,0x8
。。。。。。。。。。。。。