捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >API档案 > 正文
3 2017.06

EXCEPTION_RECORD 结构

点击次数:1357 更新时间:2017-6-3 21:42:12  【打印此页

原文链接 -> 传送门

EXCEPTION_RECORD 结构:

EXCEPTION_RECORD 结构用于描述一个异常。


结构原型:

typedef struct _EXCEPTION_RECORD {
  DWORD                    ExceptionCode;
  DWORD                    ExceptionFlags;
  struct _EXCEPTION_RECORD  *ExceptionRecord;
  PVOID                    ExceptionAddress;
  DWORD                    NumberParameters;
  ULONG_PTR                ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD, *PEXCEPTION_RECORD;



成员解析:

成员

含义

ExceptionCode

1. 指明异常发生的原因

2. 该编码由硬件异常产生,或是软件产生的,亦或者是定义在 RaiseException 函数中的编码

3. 下表描述了因为通常的程序错误可能出现的异常码:

含义

EXCEPTION_ACCESS_VIOLATION

线程企图从一个它不具有权限的虚拟地址读取或者写入

EXCEPTION_ARRAY_BOUNDS_EXCEEDED

线程企图越界访问数组元素,并且底层硬件支持边界检查

EXCEPTION_BREAKPOINT

断点被触发

EXCEPTION_DATATYPE_MISALIGNMENT

线程企图在不提供对齐的硬件上读取或写入未对齐的数据。例如,16 位的值必须与 2 字节边界对齐,32 位的值必须与 4 字节的边界对齐等

EXCEPTION_FLT_DENORMAL_OPERAND

浮点数操作的操作数是非正常的。所谓非正常,即它的值太小以至于不能用标准格式表示出来

EXCEPTION_FLT_DIVIDE_BY_ZERO

线程企图除以 0

EXCEPTION_FLT_INEXACT_RESULT

浮点数操作的结果不能精确表示成小数

EXCEPTION_FLT_INVALID_OPERATION

不包括在这个表内的其它浮点数异常

EXCEPTION_FLT_OVERFLOW

浮点数的指数超过所能表示的最大值

EXCEPTION_FLT_STACK_CHECK

进行浮点数运算时栈发生溢出或下溢

EXCEPTION_FLT_UNDERFLOW

浮点数的指数小于所能表示的最小值

EXCEPTION_ILLEGAL_INSTRUCTION

程序企图执行一个无效的指令

EXCEPTION_IN_PAGE_ERROR

程序要访问的内存页不在内存中,并且系统无法加载该页。例如,运行一个联网应用程序时网络连接丢失可能会导致该异常发生

EXCEPTION_INT_DIVIDE_BY_ZERO

整数除法的除数是 0

EXCEPTION_INT_OVERFLOW

整数操作的结果产生的值太大而不足以被目标寄存器容纳。在某些情况下,这将导致结果的最高有效位进位。一些操作不会设置该进位标志

EXCEPTION_INVALID_DISPOSITION

异常处理程序返回给异常分派器无效的处理。使用高级编程语言,例如,C 语言永远不会触发该异常

EXCEPTION_NONCONTINUABLE_EXCEPTION

线程在发生不可继续执行的异常之后企图继续运行

EXCEPTION_PRIV_INSTRUCTION

程序企图执行一条当前电脑模式不允许的指令

EXCEPTION_SINGLE_STEP

每执行一条指令,一个跟踪自陷或者其他单指令机制信号将被触发

EXCEPTION_STACK_OVERFLOW

栈溢出


4. 另外一个异常可能会在调试控制台进程时产生。编程错误不会产生该异常。当 CTRL+C 输入给一个控制台进程,而该进程正处理 CTRL+C 信号 ,并且正在被调试,DBG_CONTROL_C 异常码便会产生。该异常码并不需要应用程序来处理。它的产生只是有利于调试器,并且只有当有调试器附加到该控制台进程该异常才会产生

ExceptionFlags

1. 异常标志

2. 该成员可以为零,表示可继续分发的异常,或者为 EXCEPTION_NONCONTINUABLE,表示一个不可继续分发的异常

3. 任何企图在一个不可继续分发的异常之后继续执行将导致 EXCEPTION_NONCONTINUABLE_EXCEPTION 异常

ExceptionRecord

指向一个相关联的 EXCEPTION_RECORD 结构的指针。当嵌套异常发生时,异常记录能够链起来,来提供更多的信息

ExceptionAddress

异常发生的地址

NumberParameters

与异常相关联的参数的数目,该值为 ExceptionInformation 数组中定义的元素的数目

ExceptionInformation

1. 描述异常的其他参数形成的数组

2. RaiseException 函数能够指定该数组的参数

3. 对于大多数异常码,该数组元素是没有定义的

4. 下表描述了已经定义该数组元素的异常码:

异常码

含义

EXCEPTION_ACCESS_VIOLATION

1. 数组的第一个元素包含一个读写标志,用来指示造成非法访问的操作类型。如果该值为 0,表示线程试图读取一个不可访问的数据。如果该值为 1,表示线程试图向一个不可访问的地址写入。如果该值为 8,表示线程造成了一个用户态数据执行保护(DEP)非法访问

2. 数组的第二个元素指示了不可访问数据的虚拟地址

EXCEPTION_IN_PAGE_ERROR

1. 数组的第一个元素包含一个读写标志,用来指示造成非法访问的操作类型。如果该值为 0,表示线程试图读取一个不可访问的数据。如果该值为 1,表示线程试图向一个不可访问的地址写入。如果该值为 8,表示线程造成了一个用户态数据执行保护(DEP)非法访问

2. 数组的第二个元素指示了不可访问数据的虚拟地址

3. 数组的第三个元素指定了导致该异常底层的 NTSTATUS 编码



备注:

为了使调试器能够调试一个在不同架构上(32 位与 64 位)运行的目标程序,请使用该结构的显式形式之一。

typedef struct _EXCEPTION_RECORD32 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD ExceptionRecord;
    DWORD ExceptionAddress;
    DWORD NumberParameters;
    DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;

typedef struct _EXCEPTION_RECORD64 {
    DWORD    ExceptionCode;
    DWORD ExceptionFlags;
    DWORD64 ExceptionRecord;
    DWORD64 ExceptionAddress;
    DWORD NumberParameters;
    DWORD __unusedAlignment;
    DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;


需求:

Minimum supported client

Windows XP [仅桌面应用程序]

Minimum supported server

Windows 2003 服务器版 [仅桌面应用程序]

Header

WinNT.h (包含于 Windows.h)



 

提示
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1357 更新时间:2017-6-3 21:42:12  【打印此页

上一条:EXCEPTION_POINTERS 结构

下一条:CONTEXT 结构

关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修