开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 5324|回复: 41
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 对任意类型参数函数取指针

[复制链接]

结帖率:93% (13/14)
跳转到指定楼层
楼主
发表于 2024-8-11 01:22:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式   重庆市重庆市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
曲线解决:错误(10063): 被取地址的子程序“子程序1”的参数 1 必须是基本数据类型,且不能为字节集。

在帖子:https://125.confly.eu.org/forum.php?mod ... 14829320&extra= 中看到一个对非基本数据类型参数的函数取指针的思路


只能针对特定的参数数量,优化了一下,自适应任意非0个参数数量,原理就是通过返回地区,去扒原生函数的代码,它返回多少,就跟着返回多少
只根据第一个参数是否为空,来决定是否返回函数指针
  
子程序名返回值类型公开备 注
___辅助取子程序指针___ 根据第一个参数是否为空来判定是否返回指针
置入代码 ({ 139, 69, 0, 131, 120, 12, 0, 116, 2, 201, 195, 139, 64, 4, 3, 64, 252, 139, 93, 4, 235, 1, 67, 129, 59, 139, 229, 93, 194, 117, 247, 49, 201, 102, 139, 75, 4, 201, 201, 90, 1, 204, 255, 226 })


汇编代码:
[JavaScript] 纯文本查看 复制代码
mov eax, dword [ebp+0x00]
cmp dword [eax+0x0C], 0x00000000
je label1
leave 
ret 
label1:
mov eax, dword [eax+0x04]
add eax, dword [eax-0x04]
mov ebx, dword [ebp+0x04]
jmp label3
label2:
inc ebx
label3:
cmp dword [ebx], 0xC25DE58B
jne label2
xor ecx, ecx
mov cx, word [ebx+0x04]
leave 
leave 
pop edx
add esp, ecx
jmp edx


一般获取函数指针,会用“调用子程序”来调用,这个方式有个bug,不能获取到正确的返回值,于是修复弄了另外一种方式,需要在目标函数开头调用一次,返回前调用一次,(相对麻烦一点了,但是没办法)
  
子程序名返回值类型公开备 注
__begin辅助取子程序指针  
置入代码 ({ 139, 69, 0, 131, 120, 12, 0, 116, 8, 201, 137, 157, 0, 4, 0, 0, 195, 139, 64, 4, 3, 64, 252, 139, 93, 4, 235, 1, 67, 129, 59, 139, 229, 93, 194, 117, 247, 49, 201, 102, 139, 75, 4, 201, 201, 90, 1, 204, 255, 226 })
子程序名返回值类型公开备 注
_end辅助取子程序指针  
置入代码 ({ 201, 139, 157, 0, 4, 0, 0, 195 })


dididid.e (4.51 KB, 下载次数: 18)

评分

参与人数 4好评 +2 精币 +6 收起 理由
wa690602724 + 1 感谢分享,很给力!~
笨来无一悟 + 1 + 3 功德无量
baitso + 1 + 1 支持开源~!感谢分享
多多帅吧 + 1 YYDS~!

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 4 天

沙发
发表于 2024-8-11 03:29:59 | 只看该作者   广西壮族自治区柳州市
共同努力,共同进步
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 9 天

板凳
发表于 2024-8-11 05:50:16 | 只看该作者   江西省上饶市
大清早上来支持
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 23 天

地板
发表于 2024-8-11 05:58:27 | 只看该作者   贵州省毕节市
目前有五种方法 每一种都不完美第一种 安装汇编插件 缺点是写的源码发给没有安装插件的人就跑不起来 第二种 运行的时候 判断某个值 取上层函数的地址 不负责弹出多少 缺点是必须写一个如果真 还有和第三种一样的问题 必须运行之后才能获取 第四中 返回(取下一行函数地址()) 某某子程序() 不用运行也能取 缺点 取的过程比较麻烦 需要新建子程序 还要注意自定义数据类型不能引用非局部变量否则产生多余的CALL 就误判了 第五种 解决了第四种引用不方便的问题 可是缺点依旧存在 比第四种方便的代价是没有第四种稳定 好在测试多次 能过的时候稳定过 不能过的时候稳定崩 调试的时候过了 一般就过了 具体啥原因导致的还没摸清 单独写在非启动窗口创建完毕之外的子程序开头测试多次都是正常的 希望第六种方法是易语言官方解除这个限制
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 23 天

地下
发表于 2024-8-11 06:08:28 | 只看该作者   贵州省毕节市
笨来无一悟 发表于 2024-8-11 05:58
目前有五种方法 每一种都不完美第一种 安装汇编插件 缺点是写的源码发给没有安装插件的人就跑不起 ...

【蠢新学汇编】通过 特征码 取子程序指针 BUG版
https://125.confly.eu.org/forum.php?mod=viewthread&tid=14830510
(出处: 精易论坛)
这个写法 是为了解决第二种第三种第四种办法 调用不方便的问题 结果方便是方便了 不稳定  第二种 第三种还有一个缺点 返回值不是整数型的不能获取能用就好 就没有那么多问题 要完美 头很大 特别是我学汇编才一年零10天

点评

这个写法 修了三天的BUG 实在是修不好 都修哭了 然后放弃~~~   贵州省毕节市  发表于 2024-8-11 06:18
回复 支持 反对

使用道具 举报

结帖率:100% (74/74)

签到天数: 4 天

6
发表于 2024-8-11 06:47:51 | 只看该作者   重庆市重庆市
必须支持一下!
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 21 天

7
发表于 2024-8-11 08:10:00 | 只看该作者   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 23 天

8
发表于 2024-8-11 08:37:07 | 只看该作者   山东省济宁市
感谢分享   
回复 支持 反对

使用道具 举报

签到天数: 3 天

9
发表于 2024-8-11 08:55:32 | 只看该作者   河南省郑州市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 1 天

10
发表于 2024-8-11 09:11:20 | 只看该作者   广东省佛山市
笨来无一悟 发表于 2024-8-11 05:58
目前有五种方法 每一种都不完美第一种 安装汇编插件 缺点是写的源码发给没有安装插件的人就跑不起 ...

我就用第4种改良,只需要判断下一行函数的第一个参数就行,数值或者引用目前都没问题,因为需要对比5个以上字节,哪怕有自定义数据类型多余的call,也基本不会冲突 还是能找到真正的call地址

想要补调用一次子程序获取地址,这种基本很难,我觉得只要官方开放 &xxx就行,不用提示,像死循环一样给个开关,这样更自由

点评

没有参数的就 PUSH 0 再CALL 有参数的就 push 参数3 PUSH 参数2 PUSH 参数1 PUSH 0 再 call 多了一个参数 除非发起回调的程序也是自己写的 否则 引用还是不方便   贵州省毕节市  发表于 2024-8-11 09:54
精易模块的类方法用了需要释放 否则内存泄漏 昨晚捣鼓了一个不需要释放 不会内存泄漏的写法 还是有个缺点 类方法 尾巴要多PUSH一个任意值   贵州省毕节市  发表于 2024-8-11 09:53
哪怕这样了 依旧不是最完美的 易语言自带的&子程序指针 外面包装了一层 无法传递 ESI EDI EBX 三个寄存器的值   贵州省毕节市  发表于 2024-8-11 09:49
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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