【问题标题】:Get Info from EXCEPTION_RECORD从 EXCEPTION_RECORD 获取信息
【发布时间】:2011-11-04 16:30:40
【问题描述】:

如果我使用 SEH 发现访问冲突,我如何获得冲突地址? GetExceptionInformation 给我 LPEXCEPTION_POINTERS 包含

  • ExceptionRecord - 指向 EXCEPTION_RECORD 结构的指针 包含与机器无关的异常描述。
  • ContextRecord - 指向包含一个 CONTEXT 结构的指针 发生异常时处理器状态的特定于处理器的描述。

如何在不编写转储的情况下获取此信息?

【问题讨论】:

    标签: c++ debugging winapi exception exception-handling


    【解决方案1】:

    内存地址和操作类型包含在 ExceptionRecord 结构中的 ExceptionInformation 字段中。来自MSDN

    异常信息
    描述异常的附加参数数组。 RaiseException 函数可以指定这个参数数组。对于大多数异常代码,数组元素是未定义的。下表描述了定义了数组元素的异常代码。

    异常码含义
    EXCEPTION_ACCESS_VIOLATION
    数组的第一个元素包含一个读写标志,指示导致访问冲突的操作类型。如果此值为零,则线程试图读取不可访问的数据。如果此值为 1,则线程尝试写入不可访问的地址。如果此值为 8,则线程会导致用户模式数据执行保护 (DEP) 违规。

    第二个数组元素指定了不可访问数据的虚拟地址。

    【讨论】:

      【解决方案2】:

      EXCEPTION_RECORD 结构有一个 ExceptionAddress 字段。

      【讨论】:

        猜你喜欢
        • 2014-05-12
        • 2021-01-06
        • 2018-06-18
        • 2014-10-20
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 2012-12-21
        相关资源
        最近更新 更多