开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 5375|回复: 10
收起左侧

[已回应] 文本_是否为UTF8 命令导致崩溃及无效

[复制链接]
结帖率:96% (22/23)
发表于 2019-12-3 13:28:42 | 显示全部楼层 |阅读模式   广东省深圳市
QQ截图20191203132015.png
QQ截图20191203132046.png
原因是使用了汇编左移,然后汇编左移写的闹着玩似的
还好只有这一个命令使用了汇编左移,影响不是很大
————————————————————————————
重点是这个命令还根本检测不出来
————————————————————————————
QQ截图20191203132603.png
[我已经'汇编左移'改成支持库命令'左移'后]
下面是用的精易的另一个命令可以正确检测
结帖率:83% (39/47)

签到天数: 15 天

发表于 2020-4-3 14:56:40 | 显示全部楼层   福建省宁德市
为什么
push ecx
尾部没有 pop ecx?

回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2019-12-12 08:27:59 | 显示全部楼层   广东省揭阳市
aiksie 发表于 2019-12-11 17:34
我是没有系统的学习过汇编包括易语言,都是百度自学,完全是依靠自己的理解。
你说的那个子程序头已经保 ...

如果你这样写的话leave不能删
你第一个leave是平了你自己写的
pussh ebp
mov ebp,esp 这个栈地址

后面的 mov esp, ebp  
pop ebp 这个是平了易语言自己子程序的栈
你一个子程序里弄了两个函数头, 就得平栈两次
回复 支持 反对

使用道具 举报

发表于 2019-12-11 17:34:09 | 显示全部楼层   浙江省台州市
本帖最后由 aiksie 于 2019-12-11 18:07 编辑
项目部006 发表于 2019-12-11 08:28
不知道你是不是初学者,
在易语言子程序里单独实现汇编不需要 push ebp, mov ebp, esp, 后面也不需要 mov ...

我是没有系统的学习过汇编包括易语言,都是百度自学,完全是依靠自己的理解。
你说的那个子程序头已经保存ebp,就是因为我知道开头已经有了那个
push ebp
mov ebp,esp
所以我后面才加入那个
mov esp, ebp
pop ebp
还有push ecx、pop ecx 都是为了恢复原先寄存器的值,易语言自身编译出来的子程序基本都是这样的,我这样写是依葫芦画瓢。
QQ截图20191211173259.jpg
但是 leave 这个不应该加上去。 和 后面 pop ebp重复了,之前我这样写完全没有意识到这样写是有问题的,程序运行起来也没有遇到过崩溃。
push ebp   
mov ebp,esp
push ecx   //81
mov eax,dword ptr ss:[ebp+0x8]    //139,69,8
mov ecx,dword ptr ss:[ebp+0xC]    //139, 77, 12
shl al,cl   // 210, 224
pop ecx          //这个忘了    89                 
mov esp,ebp //139, 229
pop ebp  //93
retn 0x8  //194, 8, 0

  
子程序名返回值类型公开备 注
汇编左移整数型 失败返回 -1
参数名类 型参考可空数组备 注
欲移动的整数整数型
欲移动的位数整数型
置入代码 ({ 81, 139, 69, 8, 139, 77, 12, 210, 224, 89, 139, 229, 93, 194, 8, 0 })
返回 (-1)





你觉得哪里写的不好,都可以给我改了。



点评

leave是个伪指令, 效果等于 mov esp, ebp, pop ebp   广东省揭阳市   发表于 2019-12-12 08:30
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2019-12-11 08:28:43 | 显示全部楼层   广东省揭阳市
aiksie 发表于 2019-12-10 19:50
[e=0].版本 2

.子程序 汇编左移, 整数型, , 失败返回 -1

不知道你是不是初学者,
在易语言子程序里单独实现汇编不需要 push ebp, mov ebp, esp, 后面也不需要 mov esp, ebp pop ebp
你这汇编只需要保留
mov eax,dword ptr ss:[ebp+0x8]    //139,69,8
mov ecx,dword ptr ss:[ebp+0xC]    //139, 77, 12
shl al,cl   // 210, 224
leave   //201
retn 0x8  //194, 8, 0

这几行就足够了
易语言的子程序头已经保存ebp了
回复 支持 反对

使用道具 举报

发表于 2019-12-10 19:50:26 | 显示全部楼层   浙江省台州市
本帖最后由 aiksie 于 2019-12-11 18:13 编辑
项目部004 发表于 2019-12-9 10:55
@aiksie

请给看看,谢谢!
  
子程序名返回值类型公开备 注
汇编左移整数型 失败返回 -1
参数名类 型参考可空数组备 注
欲移动的整数整数型
欲移动的位数整数型
置入代码 ({ 81, 139, 69, 8, 139, 77, 12, 210, 224, 89, 139, 229, 93, 194, 8, 0 })
返回 (-1)


push ebp   
mov ebp,esp
push ecx   //81
mov eax,dword ptr ss:[ebp+0x8]    //139,69,8
mov ecx,dword ptr ss:[ebp+0xC]    //139, 77, 12
shl al,cl   // 210, 224
pop ecx          //这个忘了    89                 
mov esp,ebp //139, 229
pop ebp  //93
retn 0x8  //194, 8, 0


汇编左移这个命令我当时测试的时候也没有出现崩溃,但确实是我疏忽了,写的时候也没有细看,是我的锅。
支持库的“左移” 不能替代“汇编左移”,因为得到的结果是不同的。
最后我试了一下文本_是否为UTF8可以检测出来楼主的那个文本,所以需要修改一下就好了!有BUG,大家都可以帮我指正出来。

点评

有问题可直接反馈给我,不然我永远都不知道那个地方搞错了!   浙江省台州市  发表于 2019-12-10 20:10
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 13 天

发表于 2019-12-9 12:23:14 | 显示全部楼层   广东省广州市
一开始要push ebp
mov ebp,esp,大概是这样,如有不对请指出
回复 支持 反对

使用道具 举报

签到天数: 16 天

发表于 2019-12-9 10:55:40 | 显示全部楼层   广东省揭阳市

@aiksie

请给看看,谢谢!
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)

签到天数: 17 天

发表于 2019-12-4 14:48:27 | 显示全部楼层   广东省揭阳市
看起来真像写着玩的, 先push个ecx, 后面平栈后,居然把这个pop到ebp.... 这是要炸吗
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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