VEH
这是 SEH 的一个增强扩展,通过 AddVectoredExceptionHandler 添加。VEH 处理器会在调试器和所有 SEH 处理器之前被调用。它们更像是一种“通知”机制,可以观察或拦截进程中的所有异常。
与veh有关的函数
| 函数名 | 作用 | 参数解释 |
|---|---|---|
| AddVectoredExceptionHandler | 注册一个新的向量化异常处理函数(VEH)。注册后,当线程出现异常(例如访问违规、除零、RaiseException)时,系统会回调你提供的函数。 |
ULONG FirstHandler:是否把此 handler 放在最前面。 1 → 高优先级(最先被调用) 0 → 低优先级(放在队列后面)PVECTORED_EXCEPTION_HANDLER VectoredHandler:回调函数地址,函数类型为 LONG CALLBACK handler(EXCEPTION_POINTERS* ExceptionInfo)。返回值控制异常是否继续传播。 |
| RemoveVectoredExceptionHandler | 移除已注册的 VEH。 | PVOID HandlerHandle:AddVectoredExceptionHandler 返回的句柄。 |
| RaiseException | 主动抛出一个软件异常,会触发 VEH。 | DWORD dwExceptionCode:异常码(自定义或系统定义)。DWORD dwExceptionFlags:是否可继续执行。0 表示可继续,EXCEPTION_NONCONTINUABLE 表示不可继续。DWORD nNumberOfArguments:额外参数个数。*_const ULONG_PTR _lpArguments__:异常参数数组(可选)。 |
| EXCEPTION_POINTERS | VEH 的回调参数结构,包含异常上下文。 | 成员有两个:ExceptionRecord:描述异常的详细信息(代码、参数、地址等)。ContextRecord:保存异常发生时 CPU 的寄存器状态(Rip/Eip, Rsp/Esp, Rax, Rcx…)。可读写!修改后返回 EXCEPTION_CONTINUE_EXECUTION 可以改变执行流。 |
正向实例:
1 | // veh_demo.cpp |
输出:
1 |
|
总结:
| 函数 | 用途 | 常用返回 |
|---|---|---|
| AddVectoredExceptionHandler | 注册 VEH | 返回 handler 句柄 |
| RemoveVectoredExceptionHandler | 移除 VEH | 成功返回非 0 |
| RaiseException | 主动抛出异常 | 会调用 VEH |
| MyVectoredHandler | 回调处理异常 | 返回 CONTINUE_EXECUTION 或 CONTINUE_SEARCH |
| ExceptionInfo->ContextRecord | 保存寄存器上下文 | 可修改以改变执行流 |
您的支持将鼓励我继续创作!
- 本文链接: http://example.com/2025/10/09/pe逆向/异常处理机制下-VEH/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
欢迎关注我的其它发布渠道