精易论坛

标题: 关于精易模块导致程序崩溃分析 [打印本页]

作者: hsk0809    时间: 2024-6-7 12:06
标题: 关于精易模块导致程序崩溃分析
程序调用精易模块v11.0.5,在客户虚拟机win7系统下崩溃

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

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

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

所以我怀疑编码_xxxxx  在某种情况下会导致程序崩溃

图1.png (26.06 KB, 下载次数: 0)

图1.png

2.png (21.59 KB, 下载次数: 0)

2.png

图3.png (42.56 KB, 下载次数: 0)

图3.png

作者: Suky    时间: 2024-6-7 12:43
本帖最后由 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位数不匹配,就可能导致应用异常

作者: hsk0809    时间: 2024-6-7 14:29
Suky 发表于 2024-6-7 12:43
msvcrt.dll是微软在windows操作系统中提供的C语言运行库执行文件
strlen所作的是一个计数器的工作,它从内 ...

你好   精易模块自动调用的是64位的  请问怎么指定32位
作者: Suky    时间: 2024-6-7 14:38
hsk0809 发表于 2024-6-7 14:29
你好   精易模块自动调用的是64位的  请问怎么指定32位

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

想自己指定位置,就在dll定义那里   库文件名写上详细的文件路径
文件名没带路径的话   就会由系统自动在运行文件夹里取得
作者: hsk0809    时间: 2024-6-7 14:51
Suky 发表于 2024-6-7 14:38
不是精易模块自动调用64位,是易语言默认调用系统设置的位置

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

.版本 2

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



老哥  我这样写不对吗  提示未找到指定DLL库文件
作者: hsk0809    时间: 2024-6-7 14:52
hsk0809 发表于 2024-6-7 14:51
.版本 2

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

a文件夹下也放这个dll了    a\msvcrt.dll也试了
作者: 福仔    时间: 2024-6-7 15:33
这个函数就是接收一个文本指针, 输入0或者没有读权限的地址, 或者输入的地址0的位置没有读的权限, 那都会报错
这个有什么疑问吗? 你随便输入的那串数字是一个地址吗? 那个地址是0结尾吗? 地址是可读的吗?
作者: 天雷    时间: 2024-6-7 19:38
这里传的整数型是指针 指针 指针
作者: hsk0809    时间: 2024-6-7 21:45
天雷 发表于 2024-6-7 19:38
这里传的整数型是指针 指针 指针

我知道是指针  你没明白我在说什么
作者: pengyuanjun    时间: 2024-6-10 04:45
不是代码有问题就是。exe文件没给管理员权限
作者: xiaokuiA    时间: 2024-6-12 19:57
        支持开源~!感谢分享
作者: 不离01    时间: 2025-4-11 18:16
6666666666666666
作者: 不离01    时间: 2025-4-11 18:16
6666666666666666




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4