2023年1月

书接上文《C++ EH Exception(0xe06d7363)----抛出过程》,下面我们讲下,VC++是如何catch到异常且处理的。

我们知道,在VC++里,C++异常实现的底层机制还是SEH,所以,我们将程序跑起来观察

上图红框框起来的部分就是编译器安装了异常处理链,且将其设置位最后一个节点,也就如下结构

struct VC_EXCEPTION_REGISTRATION
{
     VC_EXCEPTION_REGISTRATION* prev;    //前一个结构体的指针
     FARPROC                    handler; //永远指向_exception_handler4回调函数
     scopetable_entry*          scopetable;//指向scpoetable数组的指针
     int                        _index; //有的书上也叫tryLevel。scopetable项的当前项
     DWORD                      _ebp;   //当前ebp值,用于访问各成员
}

!address

这个!address扩展命令显示有关目标进程或目标计算机使用的内存的信息。

用户模式:

!address Address
!address -summary 
!address [-f:F1,F2,...] {[-o:{csv | tsv | 1}] | [-c:"Command"]}
!address -? | -help