SEH 结构化异常处理(1)
2007-01-14 20:14:43 来源:WEB开发网核心提示: EXCEPTION_RECORDstruct{//共6个成员+0DWORDExceptionCode//异常代码,定义了产生异常的原因+4DWORDExceptionFlags//异常标志?+8structEXCEPTION_RECORD//指针,指向另一个EXCEPTION_RECORD
EXCEPTION_RECORDstruct{ //共6个成员
+0 DWORDExceptionCode //异常代码,定义了产生异常的原因
+4 DWORDExceptionFlags //异常标志?
+8 structEXCEPTION_RECORD //指针,指向另一个EXCEPTION_RECORD结构
+C DVOIDExceptionAddress //异常发生的地址
+10DWORDNumberParameters //与异常联系的参数个数(0~15)一般=0?
+14ULONG_PTRExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS] //异常信息?
}EXCEPTION_RECORDends
//执行完401017指令后,我们在od的代码窗口的看到代码如下:
77FB4DAF> 8B4C2404 movecx,dwordptrss:[esp+4]
77FB4DB3 8B1C24 movebx,dwordptrss:[esp]//来到了ntdll领空,即系统领空
{
//马上看看堆栈:
0012FCCC 0012FCD4-|//指针,指向EXCEPTION_RECORD结构,即EXCEPTION_RECORD的首地址-----这就是EXCEPTION_POINTERS
0012FCD0 0012FCF0-|//指针,指向EXCEPTION_CONTEXT结构,即EXCEPTION_CONTEXT的首地址---
0012FCD4 C0000005---------------1--异常代码.这里开始就是EXCEPTION_RECORD结构
0012FCD8 00000000 2--异常标志=0
0012FCDC 00000000 3--指针,指向另一个EXCEPTION_RECORD结构,这里=0
没有另一个EXCEPTION_RECORD结构,为NULL指针.
0012FCE0 00401017 Seh.004010174--异常发生的地址,这就是发生异常的那条指令的地址.
0012FCE4 00000002 5--与异常联系的参数个数=2?
0012FCE8 00000000 6--异常信息?
0012FCEC 00000000---------------
0012FCF0 0001003F---------------这里开始就是EXCEPTION_CONTEXT结构,ContextFlags
0012FCF4 00000000 Dr0
0012FCF8 00000000 Dr1
0012FCFC 00000000 Dr2
0012FD00 00000000 Dr3
0012FD04 0000A000 Dr6
0012FD08 00000000 Dr7
我们重点看看0012FCF0+B8=12FDA8
更多精彩
赞助商链接