易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

【新】易语言异常捕获,基于东灿大佬的异常捕获模块5-2版本   [复制链接]

    2019-06-17 08:39:05
    模块控件源码
    易语言资源网
    9599 次浏览
    来源链接

前言

本程序基于东灿的异常调试模块5.2
部分版权信息如下:

1. 该模块功能是补足易错误管理器无法捕捉的异常。
2. 本模块可以截获许多异常,比如内存读写错误,非法汇编指令,算术异常,其他异常等等。
3. 本模块拥有try/catch的异常处理模型,支持多层嵌套,支持向上处理。允许用户自己设定跳过致命异常。
4. 并且支持易原错误管理器接管
5. 建议配合配套工具使用更加好用

正文:

  • 程序原使用模块:
模块名作者或工作室用处
高级ApiHookEx作者未知HookApi,在模块中用于Hook:CreateRemoteThreadEx和CreateRemoteThread
AppThreadVar作者未知进程内变量,线程内变量。可以在任意ec模块,任意DLL内调用,全部共享
callstack作者未知函数调用堆栈跟踪。
disasm作者未知支持MMX/SSE/SSE2/SSE3/3DNow取CPU指令长度
GetThisModuleHandle作者未知取出当前ModuleHandle
e-try/catch(即new_SEH)星锋工作室-东灿SEH结构体等
  • 精简内容

    1. 简化模块(即多模块合一,但互相不影响,并且删去了重复的API,数据类型等)
    2. 增加注释:对于代码,追加了更多的注释。
  • 部分原理理解(很多都是本人自己的理解,可能不对,若有错误,欢迎指出):
    • AppThreadVar:
      • 工作核心:tls线程局部存储(缩写为TLS。进程中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快捷。说它是缺点,一个线程死掉了,其它线程也性命不保; 多个线程访问共享数据,需要昂贵的同步开销,也容易造成同步相关的BUG。)
      • 部分功能:它主要是为了避免多个线程同时访存同一全局变量或者静态变量时所导致的冲突,尤其是多个线程同时需要修改这一变量时。为了解决这个问题,我们可以通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。而从全局变量的角度上来看,就好像一个全局变量被克隆成了多份副本,而每一份副本都可以被一个线程独立地改变。
      • 用途:动态TLS和静态TLS这两项技术在创建DLL的时候更加有用,这是因为DLL通常并不知道它们被链接到的应用程序的结构是什么样的。
        1. 如果应用程序高度依赖全局变量或静态变量,那么TLS可以成为我们的救生符。因而最好在开发中最大限度地减少对此类变量的使用,更多的依赖于自动变量(栈上的变量)和通过函数参数传入的数据,因为栈上的变量始终都是与某个特定的线程相关联的。如果不使用此类变量,那么就可以避免使用TLS。
        2. 但是在编写应用程序时,我们一般都知道自己要创建多少线程,自己会如何使用这些线程,然后我们就可以设计一些替代方案来为每个线程关联数据,或者设计得好一点的话,可以使用基于栈的方法(局部变量)来为每个线程关联数据
      • TLS分动态和静态,AppThreadVar我认为是动态TLS(调用了TlsAlloc函数)
      • 相当于静态变量(我也只能理解到这里了)
    • ApiHookEx
      • 和大部分的APIHook工作原理类似
    • e-try/catch
      • 说实话,这个模块我几乎不能理解原理(能理解的基本上是一些Api,比如MiniDumpWriteDump)
      • 这个可能也是用于捕获异常,而且比较神奇的是,这个捕获到异常以后不会导致程序的退出,而是程序能够正常运行!
      • 可以抛出自定义数值异常,由catch_int/catch_eq_int接收
      • 可以抛出最后一次异常,让上层错误处理器处理

部分实例:

  • try/catch测试:
    • try/catch结果:
    • 部分崩溃代码测试:
    • 结果部分:
    • 程序可以自己写出DMP文件:
    • 更多功能请自己测试!!





点我下载 (已有 1079 次下载)

引用模块


源码文件名 模块文件名
1.异常辅助模块 修改版.e
e-try/catch.ec
2.异常测试.e
异常通知辅助模块.ec
3.代码解析.e
Win10皮肤模块.ec
TreeCtrl.ec
E转HTML.ec
易语言代码解析模块.ec
4.ApiHookEx.e
disasm.ec
6.callstack 修改版.e
AppThreadVar.ec
9.new_seh.e
AppThreadVar.ec


引用支持库


源码文件名 支持库文件名 支持库标识
1.异常辅助模块 修改版.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
10.TreeCtrl.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
11.Win10.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
12.代码显示.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
13.易语言代码解析模块.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
通用对象支持库 2.0 {A068799B-7551-46b9-8CA8-EEF8357AFEA4}
正则表达式支持库 1.2 684944CB04624eb7BD5412A519421D34
2.异常测试.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
3.代码解析.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
扩展界面支持库一 2.0 27bb20fdd3e145e4bee3db39ddd6e64c
超文本浏览框支持库 2.2 5014D8FA6DCA40b68FA626D8183666EB
4.ApiHookEx.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
5.AppThreadVar.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
6.callstack 修改版.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325
7.disasm.e 系统核心支持库 5.0 d09f2340818511d396f6aaf844c7e325
8.GetThisModuleHandle.e 系统核心支持库 5.0 d09f2340818511d396f6aaf844c7e325
9.new_seh.e 系统核心支持库 5.3 d09f2340818511d396f6aaf844c7e325


[错误报告]   上一篇:窗口配置 一句代码实现保存 与 读取...     下一篇:滑块缺口坐标识别思想,准确率100%...