其他分享
首页 > 其他分享> > VEH(向量化异常处理)

VEH(向量化异常处理)

作者:互联网

VEH

1. VEH链表结构

typedef struct _VECTXCPT_CALLOUT_ENTRY {
    LIST_ENTRY Links;
    PVECTORED_EXCEPTION_HANDLER VectoredHandler;
} VECTXCPT_CALLOUT_ENTRY, *PVECTXCPT_CALLOUT_ENTRY;

VEH链表是一个双向循环链表

2. RtlCallVectoredExceptionHandler函数分析

KiDispatchException流程图中分析了KiDispathcException函数处理异常并重新返回零环的过程, KiDispathcException首先调用RtlDispatchException, 在RtlDispatchException中首先调用RtlCallVectoredExceptionHandler来遍历VEH来处理异常.
在这里插入图片描述

首先遍历VEH链表, 依次执行VEH, 如果异常被成功处理就返回, 否则就一直遍历, 如果VEH无法处理异常, 那就交给SEH处理.

3. RtlAddVectoredExceptionHandler函数分析

在这里插入图片描述

RtlAddVectoredExceptionHandler有两个参数:

如果插入成功, 该函数将插入成功的VEH节点指针返回.

4. RtlRemoveVectoredExceptionHandler函数分析

在这里插入图片描述

RtlRemoveVectoredExceptionHandler函数有一个参数, 该参数是一个VECTXCPT_CALLOUT_ENTRY结构体指针, 该函数首先遍历VEH, 找到要被删除的那个, 将其从链表中摘除, 然后释放VEH结构体的内存.

如果找到并成功删除了返回1, 如果没有找到则返回0.

5. VEH HOOK

后面补上

标签:函数,CALLOUT,链表,参数,ENTRY,量化,异常,VEH
来源: https://blog.csdn.net/OxCCCCC/article/details/120052337