网站首页 > 易语言相关 > 易语言模块源码 正文
本模块的核心作用简单描述是:允许你在一个易语言子程序内进入 64 位环境!
也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成;
简述:其实这种技术多年前就有,易语言上也有类似的模块,个别模块是有误的,还有的长期未更新或优化,也有可用但总有与处理器优化手册上规则相悖的代码,总之都不能令我满意,因此自己从头编写了这样一个模块,部分实现代码借鉴 wow64ext,在此感谢 rewolf。
原理:wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统,在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。
但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同);
扩展延申功能:
1、可以直接使用 64 位函数自由读写(注入) 64 位进程,与很多模块调用 NtWow64xxx 系列函数实现的方式有本质不同;
2、正是由于其原理本模块允许你的易程序使用 64 位 ntdll.dll 的所有函数,也就是你虽然开发的是 32 位程序,但可以实现很多 64 位函数所能实现的功能;
3、我公开了部分常用函数可直接调用,其余函数获取地址后,使用 X64Call 这个通用函数调用即可;
4、通过本模块的框架代码,可以轻松在易语言中实现 x64 汇编的置入代码;与很多语言不同,易的置入代码接受的是硬编码(即编译后的 opcode)而不是汇编助记符,虽然直观性没有了,但可以使我们更灵活的在一段子程序中使用 x86/x64 混编,也就是你可以使用 64 位的通用寄存器来编写 x64 汇编而不必使用 REX 前缀;
5、后续会考虑增加必要的功能,根据易友的反馈;
6、本模块按使用难易度划分的话,属于中高级用户群,如果 Win32 API 都用不明白的怕是意义不大;
7、稍后会开发个给初中级用户便捷使用的中文版 x86/x64 通用进程读写模块,如果需要的人多的话;
8、如有 BUG,请提供错误重现代码及执行环境,如非不可抗因素我都会及时更新的;
模块部分命令简述:
辅助函数:
.版本 2 .子程序 fn_WOW64Enabled, 逻辑型, , 如果你在代码中需要使用 64 位汇编或者操作 64 位进程,则初始化时应确保本函数返回真。实际只要是 64 位操作系统,均应返回 真; .子程序 fn_ProcessIsX64, 逻辑型, , 检测指定进程是否为 64 位进程 .子程序 fn_CalcModOrFuncHash, 整数型, , 使用过动态调用DLL的都清楚取模块基址和函数指针,微软默认使用字符串对比,本模块可使用哈希对比效率和易用上相对提升,本函数用于计算模块或函数哈希
易内部命令:
.版本 2 .子程序 X64Call, 长整数型, , 调用 64 位函数,进程内外均可;实际我在项目中均是针对单独功能单独编写调用以提升效率,本函数仅供缺乏汇编知识的用户通用 .子程序 X64MemCopy, , , 同类还有 X64MemCmp 函数;从 64 地址复制数据或 64 位地址与 32 位地址数据对比,但仅限进程内部 .子程序 X64GetLong64, 长整数型, , 获取 64 位地址数值,同类函数还有:X64GetLong32、X64GetWord、X64GetByte .子程序 X64GetTEB, 长整数型, , 取当前易程序 64 位 TEB,通过 TEB 再取 PEB,则进程和线程信息以及模块等一览无余了 .子程序 GetNtdll64, 长整数型, , ntdll.dll 在 64 位环境下的内存基址,其实在易中进行 64 位编程主要就靠它的函数了,因为 kernel32 是获取不到的 .子程序 GetModuleHandleEx64, 长整数型, , 通过模块哈希值获取其 64 位地址空间的内存基址(易进程而不是外部进程哦);同类还有 GetModuleHandle64、GetProcAddress64、GetProcAddressEx64 .子程序 NtQuerySystemInformation64, 整数型, , cha询系统信息,可获取很多类别信息。这个 API 微软已不推荐使用并给出部分替代 API,但其个别功能十分好用且没用可替代品。cha询系统进程也是最全面的
外部进程命令:
.版本 2 .子程序 NtQueryProcessPEB64, 长整数型, , 获取外部 64 位进程PEB .子程序 VirtualAllocEx64, 长整数型, , 在外部 64 位进程分配内存,释放函数为 VirtualFreeEx64 .子程序 VirtualQueryEx64, 整数型, , cha询外部 64 位进程指定内存区域的状态 .子程序 VirtualProtectEx64, 逻辑型, , 更改外部 64 位进程指定内存区域的保护属性 .子程序 ReadProcessMemory64, 逻辑型, , 读取外部 64 位进程指定区域的内存数据 .子程序 WriteProcessMemory64, 逻辑型, , 向外部 64 位进程指定内存区域写入数据 .子程序 NtQueryInformationProcess64, 整数型, , cha询外部 64 位进程信息 .子程序 GetThreadContext64, 逻辑型, , 获取线程上下文,多用于 SEH,仅供高级用户使用;相应设置函数为 SetThreadContext64
以上只是适用于 64 位的部分函数,同样我在模块中也实现了大多数命令相同形式的 32 位命令,用于操作 32 位进程,合计公开函数有 50 多个,这里就不列举了;
.版本 2 .子程序 编写x64汇编框架, , , 返回值不限制,同 x86 相同 ' 如果本子程序中需要调用 64 位函数,则此时应保存 fs 寄存器及对齐栈顶,可参考源码中的 #X64_SaveFs 置入代码 (#X64_Start) ' 在此区域内可使用 64 位纯汇编代码 置入代码 (#X64_End) ' #X64_End 与 #X64_Start 必须在同一个子程序中成对使用 ' 如果本子程序中需要调用 64 位函数,则此时应恢复 ss/fs 寄存器,可参考源码中的 #X64_RestoreFs ' 然后就是 x86 中的平栈返回或者由易子程序返回
@shier2817
猜你喜欢
- 2023-10-09 定时执行任务模块(Metr_定时执行任务[Majo])
- 2023-02-13 讯飞文本识别鉴权与文字识别源码
- 2022-04-07 大漠插件免费版3.1233的中文版模块
- 2022-04-05 易语言log日志模块源码
- 2022-03-13 易语言TCP客户端模块 支持SSL
- 2021-12-23 队长自动化测试模块2.96
- 2021-12-12 判断电脑是否开启VT虚拟化(你的cpu虚拟化特性vt没有开启)
- 2021-12-01 Echarts商业级数据图表库模块v1.7.0.328【模块及示例大全】
- 2021-11-27 动态添加选择夹子夹例程源码
- 2021-11-14 配置项加密读写源码
你 发表评论:
欢迎- 百度站内搜索
- 关注微信公众号
- 网站分类
-
- 网站公告
- 电子书书籍
- 程序员工具箱
- 编程工具
- 易语言相关
- 网络相关源码
- 图形图像源码
- 系统工具源码
- 易语言模块源码
- 易语言支持库
- 数据库类源码
- 易语言例程
- 易语言游戏开发
- 易语言模块
- 多媒体类源码
- 易语言资源网
- 易语言视频教程
- JS分析教程
- 易语言图文教程
- 易语言常见问题及笔记
- 工具源码
- 易语言版本
- 网络编程
- javascript
- PHP编程
- html
- 正则表达式
- 面试题
- nodejs
- 其它综合
- 脚本专栏
- python
- 按键精灵相关
- 按键精灵图文教程
- 按键精灵视频教程
- 按键精灵Q语言
- 按键精灵安卓版
- golang
- 游戏安全
- 火山相关
- 火山安卓软件
- 火山常见问题及笔记
- 火山安卓源码
- 火山视频教程
- 火山PC版本下载
- 火山PC视窗例程
- 互联网那些事
- 引流推广
- 项目揭秘
- 网络营销
- 营销软件
- QQ营销软件
- 娱乐软件
- 机器人插件
- 培训教程
- 技术教程
- 活动线报
- 数据库
- Redis
- Access
- MongoDB
- Mysql
- 问答
- 其它
- 易语言
- 需求
- 在线教程
- 多线程培训班
- 觅风易语言教程
- 模拟系列教程
- 集中营易语言教程
- 历史数据
- 随机tag
已有14位网友发表了看法:
yiyuyan 评论于 [2019-06-01 17:07:23] 回复
易语言 VirtualQueryEx
模块版本 评论于 [2020-02-15 17:39:52] 回复
易语言64位程序读写
广大易友 评论于 [2020-02-23 21:53:14] 回复
WOW64Ext
易语言 评论于 [2020-03-28 13:42:04] 回复
易语言获取64线程上下文
易语言例子 评论于 [2020-04-03 12:13:01] 回复
易语言 读写64位进程
易语言 评论于 [2020-05-08 23:01:19] 回复
读写64位进程eWOW64Ext模块
易语言例程 评论于 [2020-05-09 19:42:58] 回复
易语言+64位+辅助
易语言 评论于 [2020-08-18 16:17:21] 回复
易语言x64汇编
安装依赖 评论于 [2020-08-18 17:59:42] 回复
易语言64位汇编
安装依赖 评论于 [2020-08-19 17:22:19] 回复
64位模块
网页解析库 评论于 [2020-08-20 14:28:18] 回复
WOW64ext
易语言 评论于 [2020-09-08 09:35:03] 回复
64位进程读写内存api
易语言例程 评论于 [2020-09-15 00:42:07] 回复
易语言x64汇编
易语言例程 评论于 [2020-09-15 00:43:51] 回复
易语言x64汇编模块
例程源码 评论于 [2021-05-30 19:24:02] 回复
64位+e+语言