开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 3808|回复: 11
收起左侧

[已回应] 关于精易模块导致程序崩溃分析

[复制链接]
结帖率:59% (29/49)
发表于 2024-6-7 12:06:03 | 显示全部楼层 |阅读模式   内蒙古自治区呼和浩特市
程序调用精易模块v11.0.5,在客户虚拟机win7系统下崩溃

错误模块:msvcrt.dll
错误偏移:0×000143f9

经过大量分析,发现精易模块的dll命令 strlen    单独拿出来测试,输入随意参数时会发生上方的同样报错,如下图

strlen会被编码_xxxxx的子程序调用,分别是A2W_CP和W2A_CP

所以我怀疑编码_xxxxx  在某种情况下会导致程序崩溃
图1.png
2.png
图3.png
结帖率:0% (0/5)
发表于 2024-6-12 19:57:20 | 显示全部楼层   广西壮族自治区河池市
        支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:44% (4/9)

签到天数: 1 天

发表于 2024-6-10 04:45:53 | 显示全部楼层   广东省深圳市
不是代码有问题就是。exe文件没给管理员权限
回复 支持 反对

使用道具 举报

结帖率:59% (29/49)
 楼主| 发表于 2024-6-7 21:45:21 | 显示全部楼层   内蒙古自治区呼和浩特市
天雷 发表于 2024-6-7 19:38
这里传的整数型是指针 指针 指针

我知道是指针  你没明白我在说什么
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 7 天

发表于 2024-6-7 19:38:35 | 显示全部楼层   湖南省娄底市
这里传的整数型是指针 指针 指针
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 18 天

发表于 2024-6-7 15:33:03 | 显示全部楼层   广西壮族自治区崇左市
这个函数就是接收一个文本指针, 输入0或者没有读权限的地址, 或者输入的地址0的位置没有读的权限, 那都会报错
这个有什么疑问吗? 你随便输入的那串数字是一个地址吗? 那个地址是0结尾吗? 地址是可读的吗?
回复 支持 反对

使用道具 举报

结帖率:59% (29/49)
 楼主| 发表于 2024-6-7 14:52:21 | 显示全部楼层   内蒙古自治区呼和浩特市
hsk0809 发表于 2024-6-7 14:51
.版本 2

.DLL命令 strlen, 整数型, "\a\msvcrt.dll", "@strlen"

a文件夹下也放这个dll了    a\msvcrt.dll也试了
回复 支持 反对

使用道具 举报

结帖率:59% (29/49)
 楼主| 发表于 2024-6-7 14:51:23 | 显示全部楼层   内蒙古自治区呼和浩特市
Suky 发表于 2024-6-7 14:38
不是精易模块自动调用64位,是易语言默认调用系统设置的位置

想自己指定位置,就在dll定义那里   库文件 ...

.版本 2

.DLL命令 strlen, 整数型, "\a\msvcrt.dll", "@strlen"
    .参数 lpsz, 整数型



老哥  我这样写不对吗  提示未找到指定DLL库文件

点评

完整路径,从盘符一直到文件名,你都开始研究了,这点难不倒你才对   福建省泉州市  发表于 2024-6-7 14:58
回复 支持 反对

使用道具 举报

结帖率:100% (18/18)

签到天数: 22 天

发表于 2024-6-7 14:38:26 | 显示全部楼层   福建省泉州市
hsk0809 发表于 2024-6-7 14:29
你好   精易模块自动调用的是64位的  请问怎么指定32位

不是精易模块自动调用64位,是易语言默认调用系统设置的位置

想自己指定位置,就在dll定义那里   库文件名写上详细的文件路径
文件名没带路径的话   就会由系统自动在运行文件夹里取得
回复 支持 反对

使用道具 举报

结帖率:59% (29/49)
 楼主| 发表于 2024-6-7 14:29:32 | 显示全部楼层   内蒙古自治区呼和浩特市
Suky 发表于 2024-6-7 12:43
msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件
strlen所作的是一个计数器的工作,它从内 ...

你好   精易模块自动调用的是64位的  请问怎么指定32位
回复 支持 反对

使用道具 举报

结帖率:100% (18/18)

签到天数: 22 天

发表于 2024-6-7 12:43:23 | 显示全部楼层   福建省泉州市
本帖最后由 Suky 于 2024-6-7 12:50 编辑

msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件
strlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')

建议详查系统环境
易语言多数内容是基于32位开发的
msvcrt.dll 在不同版本系统中有32、64位两个版本
要确保对 32 位程序使用 32 位 DLL,对 64 位程序使用 64 位 DLL。否则可能会导致 0xc000007b 类错误

精易模块使用的是易语言默认引用位置的系统dll   如果你系统环境中的dll位数不匹配,就可能导致应用异常
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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