ExceptionPort的作用,是在用户态异常的第2轮分发过程中,如果第二轮还无人处理,那么就会发到ExceptionPort 。关于异常的分发,部分可以参考 理解UnhandledExceptionFilter
对于ExceptionPort,每个普通进程都会设置,CSRSS进程负责监听。CSRSS收到异常消息后一般是立刻终止进程,Win7开始,略有变化。
可以使用windbg做个实验,加深对上述概念的理解。来段简单的代码,
int main(int argc, char* argv[])
{
*(int*)0=1;
return 0;
}
进入windbg
0:000> g
Thu Feb 24 09:53:34.370 2011 (UTC + 8:00): (c7c.12c0): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=00000027 ebx=7ffda000 ecx=00424a60 edx=00424a60 esi=00000000 edi=0012ff48
eip=00401035 esp=0012fefc ebp=0012ff48 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
*** WARNING: Unable to verify checksum for UEF.exe
UEF!main+0x25:
00401035 c7050000000001000000 mov dword ptr ds:[0],1 ds:0023:00000000=????????