开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 1598|回复: 19
收起左侧

[易语言纯源码] 修改可空参数是否为空

[复制链接]

结帖率:100% (8/8)
发表于 2023-8-11 13:21:41 | 显示全部楼层 |阅读模式   广西壮族自治区崇左市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 福仔 于 2023-8-11 14:18 编辑
  
子程序名返回值类型公开备 注
_临时子程序  
子程序1 (取现行时间 ())
子程序名返回值类型公开备 注
子程序1  
参数名类 型参考可空数组备 注
参数日期时间型
调试输出 (是否为空 (参数))  ' 输出 假
修改可空参数是否为空 (参数, 取反 (是否为空 (参数)), #日期时间型 )
调试输出 (是否为空 (参数))  ' 输出 真
子程序名返回值类型公开备 注
修改可空参数是否为空 调用后会影响堆栈的数据, 传递的参数必须要有可空标志, 否则会影响到其他参数的值, 可能会造成崩溃
参数名类 型参考可空数组备 注
参数通用型需要勾上参考, 把参数地址传递过来
是否可空逻辑型
参数类型整数型没办法判断类型, 不同类型处理方式不同, 需要外部传递参数类型进来
变量名类 型静态数组备 注
ebp整数型回溯上一个子程序的ebp
pArg整数型传递过来的参数地址
pStack整数型从ebp里枚举的栈地址
i整数型 
pEmpty整数型参数可空的地址, 这个地址是参数的下一个参数, 可空参数实际是传递了两个参数, 先传递 是否传递了数据, 再传递数据
offset整数型 
ebp = 0
pArg = 取指针_通用型 (参数)
置入代码 ({ 139, 69, 0, 137, 69, 252 })  ' mov eax, [ebp]    mov [ebp-4], eax
' ebp+0=上一个子程序栈底地址
' ebp+4=返回地址
' 所以这里循环从8开始, 循环到1000, 相当于(1000-8)/4 个参数
变量循环首 (8, 1000, 4, i)
' 这里就处理3个部分, 一个是4个字节的数据, 一个是8个字节的数据, 另一个就是变长数据
' 4个字节包括, 字节型, 短整数型, 整数型, 小数型, 逻辑型, 子程序指针 这几种类型
' 8个字节包括 长整数, 双精度, 日期时间 这3个类型
' 剩下的都是变长参数, 只能用一块内存来存放, 然后传递地址过来
' 4/8个字节的参数都是 ebp+xx = 参数在栈上的地址, 参数在栈上的地址 -> 参数数据
' 变长参数是 ebp+xx = 参数在栈上的地址, 参数在栈上的地址 -> 存放数据的地址 -> 数据
' 所以处理变长参数这里是读了一次内存
判断 (参数类型 = #整数型 参数类型 = #字节型 参数类型 = #短整数型 参数类型 = #小数型 参数类型 = #逻辑型 参数类型 = #子程序指针型 )
' 4字节数值型,ebp+i 就是变量地址, 不能再读内存
pStack = ebp + i
判断 (参数类型 = #文本型 参数类型 = #字节集型 )
pStack = 指针到整数 (ebp + i)  ' 需要读一层内存获取参数在栈上的地址
判断 (参数类型 = #长整数型 参数类型 = #双精度小数型 参数类型 = #日期时间型 )
' 8字节的数值型
pStack = ebp + i
offset = 4  ' 后面计算可空地址多增加的值

输出调试文本 (“不支持传递这种数据类型”)
暂停 ()
返回 ()

如果真 (pStack = pArg)  ' 相等的话就得到了这个变量在栈里的地址, +4的位置就是可空的地址
pEmpty = ebp + i + 4 + offset  ' ebp+i得到参数地址, 再+4就是下一个成员的地址
跳出循环 ()

变量循环尾 ()
如果真 (pEmpty ≠ 0)
__set (pEmpty, 0, 选择 (是否可空, 0, 1))
子程序名返回值类型公开备 注
取指针_通用型整数型 取到的是变量在栈中的地址,和 取变量地址() 一样
参数名类 型参考可空数组备 注
变量通用型基本支持所有类型
置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
返回 (0)
子程序名返回值类型公开备 注
__set整数型 请确保指针的合法性,写到内存
参数名类 型参考可空数组备 注
lpAddr整数型内存地址
offset整数型偏移
value整数型写入值
置入代码 ({ 139, 93, 8, 139, 77, 12, 139, 4, 25, 139, 85, 16, 137, 20, 25, 201, 194, 12, 0 })
' mov ebx,[ebp+8]
' mov ecx,[ebp+12]
' mov eax,[ebx+ecx]
' mov edx,[ebp+16]
' mov [ebx+ecx],edx
' leave
' ret 12
返回 (0)


i支持库列表   支持库注释   
spec特殊功能支持库


没法做到更简单的, 只能在调用的时候传递参数是什么类型了, 自定义数据类型可以指定是文本型或者字节集型

刚刚问答区看到一个说dll无法加载的问题, 然后就推荐我的 https://bbs.125.la/forum.php?mod=viewthread&tid=14748469 这个帖子
然后看到楼下有人问怎么修改可空参数的可空
闲着没事, 写个子程序处理一下....

这里复制的通用型用不了, 大家可以去找个有通用型的源码复制一下
或者利用易语言助手的自动变量弄一个通用型出来, 比如 a=取字节集数据() 敲回车就能得到一个通用型变量, 自己复制一下这个变量替换到源码参数的位置就行了
修改可空参数是否为空.e (6.41 KB, 下载次数: 18)

评分

参与人数 2好评 +2 精币 +8 收起 理由
易语言资源网 + 1 + 3 开源精神必须支持~
maozaiba + 1 + 5 奉上小小红包希望笑纳

查看全部评分


本帖被以下淘专辑推荐:

发表于 2023-9-9 04:06:41 | 显示全部楼层   四川省成都市
感谢分享!
回复 支持 反对

使用道具 举报

结帖率:0% (0/4)
发表于 2023-8-22 11:20:19 | 显示全部楼层   上海市上海市
开源精神必须支持~
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2023-8-21 16:19:52 | 显示全部楼层   广西壮族自治区南宁市
开源精神必须支持~
回复 支持 反对

使用道具 举报

结帖率:93% (13/14)

签到天数: 20 天

发表于 2023-8-21 10:53:06 | 显示全部楼层   山东省淄博市
学习一下,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2023-8-15 21:23:10 | 显示全部楼层   海南省海口市
不错,正好需要
回复 支持 反对

使用道具 举报

签到天数: 15 天

发表于 2023-8-14 21:49:19 | 显示全部楼层   江苏省连云港市

感谢分享
回复 支持 反对

使用道具 举报

结帖率:73% (8/11)

签到天数: 20 天

发表于 2023-8-14 09:37:59 | 显示全部楼层   河南省焦作市
支持开源
回复 支持 反对

使用道具 举报

签到天数: 16 天

发表于 2023-8-13 13:44:24 | 显示全部楼层   河北省邯郸市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)

签到天数: 2 天

发表于 2023-8-12 14:19:26 | 显示全部楼层   山东省潍坊市
已经顶贴,感谢您对论坛的支持!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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