开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 71565|回复: 504
收起左侧

[易语言软件开源] 【新】易语言异常捕获,基于东灿大佬的异常捕获模块5-2版本

    [复制链接]

结帖率:100% (4/4)
发表于 2019-6-5 14:56:29 | 显示全部楼层 |阅读模式   四川省宜宾市
分享源码
界面截图:
是否带模块: -
备注说明: -

前言

本程序基于东灿的异常调试模块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文件:
    • 更多功能请自己测试!!

PS

最后说一句:如果你觉得可以的话,请:

附带一个代码解析程序,解放双手,快速增加程序异常标记

附件下载:


异常捕获.zip (413.1 KB, 下载次数: 4675)

点评

错误所处位置: 模块:"异常通知***模块"; 程序集:"SEHHook"; 子程序:"ProcessExcept_Main" 错误(10044): 不能将“EXCEPTION_POINTERS”***转换到“EXCEPTION_POINTERS”数...   四川省成都市  发表于 2022-4-21 00:04
带组件的能在这个代码框里调试吗   浙江省嘉兴市  发表于 2020-9-19 11:35
性能极低   福建省宁德市  发表于 2019-6-7 18:42

评分

参与人数 27好评 +23 精币 +54 收起 理由
andyfeifei + 1 + 2 YYDS~!
yu226227 + 1 + 2 YYDS~!
39667285 + 1 很赞同,谢谢!
SunJIN + 1 很赞同,谢谢!
易语言资源网 + 1 + 5 支持开源~!感谢分享
乱世小熊 + 1 + 5 支持开源~!感谢分享
kiss717 + 1 + 1 感谢分享,很给力!~
ノ朽默℡ + 1 + 4 支持开源~!感谢分享
辽阳小哲 + 1 支持开源~!感谢分享
Hooksafe + 1 + 3 支持开源~!感谢分享
snufgpl + 1 + 1 奉上小小红包希望笑纳
beepsanta + 1 + 1 支持开源~!感谢分享
Areny + 1 + 1 支持开源~!感谢分享
luoran + 1 支持开源~!感谢分享
zl2017 + 1 + 2 感谢分享,很给力!~
YY初夏 + 1 + 2 感谢发布原创作品,精易因你更精彩!
皮皮驴 + 1 新技能已get√
风九幽 + 1 新技能已get√
冰点 + 1 + 5 奉上小小红包希望笑纳
金哥专用 + 3 功能很好。最好能做成插件的形式。异常捕获额外增加了很多的代码书写量。
毛超 + 1 很好很强悍,坚持下去哦~
福仔 + 1 + 4 新技能已get√
325622220 + 1 + 2 新技能已get√
勾栏听曲 + 1 + 2 感谢分享,很给力!~
381692 + 1 + 2 新技能已get√
峰生水起之林 + 1 + 1 支持开源~!感谢分享
就想改个名字 + 1 + 3 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

结帖率:67% (6/9)

签到天数: 11 天

发表于 2024-5-11 07:52:23 | 显示全部楼层   广西壮族自治区桂林市
帅气与大侠 发表于 2020-10-13 10:33
光给地址没用呀,怎么定位到具体代码呢

看图定位到按钮被单击里了,但是这个子程序里可能存在几百上千行代 ...

赞同,我个人理解是得到地址然后用调试器去跟踪代码
回复 支持 反对

使用道具 举报

结帖率:67% (6/9)

签到天数: 11 天

发表于 2024-5-11 07:44:46 | 显示全部楼层   广西壮族自治区桂林市
QQ图片20240511072646.jpg

能捕获异常,但定位不到代码行?;来大佬帮看看提示框里的信息分别是什么意思?
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-5-10 06:26:25 | 显示全部楼层   河南省洛阳市
还是不够,在水一下吧
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-5-10 06:25:29 | 显示全部楼层   河南省洛阳市
居然需要两枚金币,不够水一下
回复 支持 反对

使用道具 举报

结帖率:67% (6/9)

签到天数: 11 天

发表于 2024-5-9 05:47:59 | 显示全部楼层   广西壮族自治区桂林市
薆要执著 发表于 2019-6-5 15:32
模块有坑  异常捕捉 并不能 完全接管易语言的异常

比如?有具体测试例子吗
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2024-5-4 09:36:09 高大上手机用户 | 显示全部楼层   辽宁省沈阳市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:44% (7/16)

签到天数: 11 天

发表于 2024-4-16 20:08:29 | 显示全部楼层   浙江省金华市
有没有人遇到  数组越界 使用 e-try/catch 程序还是会崩溃闪退
回复 支持 反对

使用道具 举报

结帖率:33% (6/18)

签到天数: 4 天

发表于 2024-4-13 13:49:14 | 显示全部楼层   安徽省芜湖市
号东西啊~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2024-4-12 18:11:31 | 显示全部楼层   广西壮族自治区南宁市
感谢分享!
回复 支持 反对

使用道具 举报

发表于 2024-4-2 12:52:59 | 显示全部楼层   广西壮族自治区北海市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表