向量化异常处理代码

易语言 2020-08-22 17:31:59

向量化异常处理代码

异常 = 取异常信息 (异常信息地址)
信息框 (格式化文本 (“异常代码:%.8X” + #换行符 + “异常地址:%.8X”, 异常.ExceptionRecord.ExceptionCode, 异常.ExceptionRecord.ExceptionAddress), #警告图标, “发生异常”, )
' 异常处理
.判断开始 (异常.ExceptionRecord.ExceptionCode = #STATUS_BREAKPOINT) ' INT3 异常
VirtualProtect (异常.ExceptionRecord.ExceptionAddress, 1, #PAGE_EXECUTE_READWRITE, OldProtect)
RtlMoveMemory_字节集 (异常.ExceptionRecord.ExceptionAddress, { 144 }, 1) ' 0x90 NOP
VirtualProtect (异常.ExceptionRecord.ExceptionAddress, 1, OldProtect, 0)
返回 (#EXCEPTION_CONTINUE_EXECUTION) ' 异常已处理, 再次执行异常处代码.

.子程序 取异常信息, 异常信息
.参数 异常信息地址, 整数型
.局部变量 异常信息, 异常信息
.局部变量 ExceptionRecord, 整数型
.局部变量 ContextRecord, 整数型

RtlMoveMemory_整数型 (ExceptionRecord, 异常信息地址, 4)
RtlMoveMemory_整数型 (ContextRecord, 异常信息地址 + 4, 4)
.如果真 (ExceptionRecord ≠ 0)
RtlMoveMemory_EXCEPTION_RECORD (异常信息.ExceptionRecord, ExceptionRecord, 35)
.如果真结束
.如果真 (ContextRecord ≠ 0)
RtlMoveMemory_CONTEXT (异常信息.ContextRecord, ContextRecord, 716)
.如果真结束
返回 (异常信息)