调试与异常
来源:互联网 发布:centos7 nginx 访问 编辑:程序博客网 时间:2024/06/04 19:12
每一个操作都有中断(鼠标,键盘.....)
CPU内异常
外中断
中断描述符表---~~~
异常在---内核钩子--FSD中
线程环境中保留的EIP是导致异常的指令地址,而不是下一条指令
int3 --(陷阱类的异常)(带整理)
SEH---结构化异常处理(VC++(VS)编译器中提供的)
__try
__finally
__except
__leave
会导致局部展开~~~~~~~~(__try 块)
except(函数)可以用函数参数来接收回掉
异常过滤函数
异常处理多个异常的时候------全局展开
ETHREAD 内核成结构体用户层叫做TEB表
FS:[0]取出链表结构体的首地址,依次处理异常
typedef struct_EXCEPTION_RECORD { 记录异常结构体
DWORD ExceptionCode; //异常代码
DWORD ExceptionFlags; //异常标志
struct _EXCEPTION_RECORD *ExceptionRecord; //相关的异常
PVOID ExceptionAddress; //异常发生的地址
DWORD NumberParameters; //参数数组中的元素个数
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];//参数数组
} EXCEPTION_RECORD;
unsigned long _exception_code(void);
返回值代表异常类型
typedef struct _EXCEPTION_POINTERS {
PEXCEPTION_RECORD ExceptionRecord;
PCONTEXT ContextRecord;
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
由异常信息()返回的指针类型
向量异常处理
VEH 使用向量函数需要提供一个回掉函数,用一个api注册一下即可 ,后面不管发生什么异常,都会调用自己的回掉函数(全局链表)
PVOIDWINAPI AddVectoredExceptionHandler(
_In_ ULONGFirst,
_In_ PVECTORED_EXCEPTION_HANDLERHandler
);
参数1.异常处理函数被调用的顺序
参数2.异常处理回掉函数
---------------------------------------------------------------------------------------------------
自己需要知道回掉函数的原型
typedefLONG (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
struct _EXCEPTION_POINTERS *ExceptionInfo
);
回掉函数返回值的2中情况
#defineEXCEPTION_CONTINUE_SEARCH (0) (继续执行)
#defineEXCEPTION_CONTINUE_EXECUTION (-1) (继续搜索)
VCH向量和上面的一样只有函数名称不同
PVOIDWINAPI AddVectoredContinueHandler(
_In_ ULONGFirst,
_In_ PVECTORED_EXCEPTION_HANDLERHandler
);
传参调用都一样
总结:
1.当异常交由用户处理时,按照以下顺序调用异常处理方式:VEH->SEH->VCH
2.当VEH表示处理了异常,就不会传递给SEH,但是会传递异常给VCH
3.当VEH没有处理了,就会传递给SEH
4.当SEH的所有异常处理函数没有能够处理异常,会调用默认的SEH处理函数
5.当SEH处理了异常,从except开始执行,就不会在将异常传递给VCH
6.当SHE返回异常产生处执行,在返回之前会调用VCH
- 5、异常与调试
- Python调试与异常
- 异常处理与调试
- C#异常与调试
- 调试与异常
- Delphi异常处理与调试
- 3.异常与调试工具
- Delphi异常处理与调试
- 程序调试与异常处理
- 异常处理与程序调试
- pytthon-异常处理与调试
- 异常与调试 - core java 7
- 调试事件与异常的关系
- NSUncaughtionHandler, Xcode调试相关与异常捕获
- java基础之异常与调试
- 第十五章 程序调试与异常处理
- Python基础之七异常与调试
- C++ 程序调试与异常处理
- 由进度条程序引发的问题
- 319. Bulb Switcher
- 函数
- 运维之监控与安全篇------3.监控常用命令 、 Nagios监控
- fiddler本地代理替换js文件
- 调试与异常
- win10 如何打开sql server配置管理器
- MFC应用程序框架分析
- 文章标题
- windows7怎么备份系统创建系统映像|win10相同
- Ubuntu由于内核升级原因黑屏不能登录
- spark 2.2 源码分析 Spark-shell 篇
- JavaScript像数组添加元素并排序
- Dreamweaver插件大全下载