易语言实现64位程序内存操作模块源码解析

需积分: 31 11 下载量 32 浏览量 更新于2024-10-30 1 收藏 18KB ZIP 举报
资源摘要信息:"易语言是一种简单易学的编程语言,主要面向中文编程用户,由吴涛先生发明。易语言特别强调中文语义,使得中文用户在学习编程时可以更加直观和易于理解。易语言支持模块化编程,开发者可以利用各种模块来实现特定的功能,模块相当于其他编程语言中的库或框架。本资源所提供的内容是针对64位程序进行内存读写操作的易语言模块源码。 在进行计算机程序开发的过程中,内存读写是一个基础且重要的操作。内存读写操作是指程序在运行时对计算机内存中的数据进行读取或写入的过程。对于64位程序来说,其内存地址空间非常大,理论上可以达到2的64次方个地址,因此64位内存读写模块能够处理大量数据。 易语言的模块化设计允许开发者将常用的功能封装成模块,以便在不同的程序中重复使用。对于64位程序的内存读写操作,易语言提供了一系列的函数和方法来简化开发者的工作。例如,模块可能包含用于打开64位进程的句柄、读取进程内存、写入进程内存以及关闭进程句柄等函数。 易语言中的模块通常包含了实现特定功能的代码,开发者可以通过调用模块中定义的接口来实现所需的功能。在这个64位内存读写模块中,开发者可以找到一些核心函数,这些函数可以帮助开发者定位到64位程序的内存地址,然后进行读取或写入操作。这些操作在游戏辅助工具、系统工具、测试工具等软件中非常常见和有用。 该模块源码的文件名称为"内存读写64Bit模块源码",从名称可以推断,此模块源码专门针对64位操作系统和应用程序,能够执行内存读写操作。它可能包含以下几个主要知识点: 1. 64位进程句柄的获取方法:包括如何通过易语言的API来打开和管理64位进程的句柄。 2. 内存读取机制:易语言提供了读取指定内存地址数据的方法,模块中应该包含了读取64位进程内存内容的函数。 3. 内存写入技术:与内存读取相对应,模块应该包含向64位进程内存地址写入数据的方法。 4. 模块化编程的优势:了解如何通过模块化编程提高开发效率和程序的可维护性。 5. 易语言的语法特点:易语言使用中文关键词,模块代码中可能使用中文来定义变量和函数名,这在其他语言中是不常见的。 易语言模块化开发的一个优势是代码复用,开发者可以将一些通用的或者复杂的操作封装成模块,这样在多个项目中复用时可以简化开发流程。在进行64位程序内存读写操作时,使用易语言的模块可以大幅降低开发难度,提高开发效率。 对于那些希望深入了解易语言或者从事易语言模块开发的程序员来说,掌握易语言的64位内存读写操作对于开发稳定高效的程序至关重要。同时,这也需要程序员具备良好的操作系统原理知识、内存管理知识以及易语言的编程技巧。 总之,该易语言模块为64位程序内存读写操作提供了一种可能的实现方法,通过使用易语言的模块化功能,程序员可以快速地在自己的应用程序中集成这些内存操作的功能,从而实现更加复杂的程序逻辑和功能。"
2021-06-12 上传
模块原理: wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统;在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。 但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同); 也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成; 部分实现代码借鉴 c++ 开源代码:wow64ext,在此感谢作者 rewolf。 模块功能: 实现易语言纯 64 位汇编置入代码; 允许调用易程序 64 位 ntdll.dll 的所有函数,也就是你虽然开发的是 32 位程序,但可以实现很多 64 位函数所能实现的功能; 直接使用 64 位函数ziyou读写(注入) 64 位进程,与很多模块调用 NtWow64xxx 系列函数实现的方式有本质不同; 部分常用 ntdll.dll 函数已在模块直接提供,或以模拟 kernel32 函数的调用形式提供,v1.1 新增多个函数; 未提供函数获取地址后,可使用 X64Call 这个通用函数调用即可; 大部分提供的 64 位功能也同时提供了 32 位版本,以便兼容不同需求(模块在 32 位系统中不会开启 64 位功能引起异常,但 32 位功能依然可用); 支持加载任意 32/64 位 DLL,从此易语言可以调用外部 64 位 DLL 了(包括加载 kernel32.dll),v1.1 新增功能; 除了动态加载外,还支持 32 位 DLL 的内存加载,但 64 位只能加载本地 DLL 文件,v1.1 新增功能; 如有 BUG,请提供错误重现代码及执行环境,如非不可抗因素我都会及时更新的; 部分命令简述: 以下只是适用于 64 位的部分函数,模块中以相同命令形式实现的 32 位命令,这里就不列举了; 辅助函数 fn_WOW64Enabled 如果你在代码中需要使用 64 位汇编或者操作 64 位进程,则初始化时应确保本函数返回真。实际只要是 64 位操作系统,均应返回 真 fn_ProcessIsX64 检测指定进程是否为 64 位进程 fn_CalcModOrFuncHash 使用过动态调用DLL的都清楚取模块基址和函数指针,微软默认使用字符串对比,本模块可使用哈希对比效率和易用上相对提升,本函数用于计算模块或函数哈希 易内部命令 X64Call 调用 64 位函数通用版本 X64MemCopy 同类还有 X64MemCmp 函数;从 64 地址复制数据或 64 位地址与 32 位地址数据对比,但仅限进程内部 X64GetLong64 获取 64 位地址数值,同类函数还有:X64GetLong32、X64GetWord、X64GetByte X64GetTEB 取当前易程序 64 位 TEB,通过 TEB 再取 PEB,则进程和线程信息以及模块等一览无余了 GetNtdll64 ntdll.dll 在 64 位环境下的内存基址 GetModuleHandleEx64 通过模块哈希值获取其 64 位地址空间的内存基址(易进程而不是外部进程哦);同类还有 GetModuleHandle64 GetProcAddressEx64 通过函数哈希值或函数索引序号获取其 64 位调用地址;同类还有 GetProcAddress64 NtQuerySystemInformation64 查询系统信息,可获取很多类别信息。这个 API 微软已不推荐使用并给出部分替代 API,但其个别功能十分好用且没用可替代品。查询系统进程也是最全面的 OpenProcess64 打开进程句柄,关闭进程句柄时使用 CloseHandle64;【v1.1新增】 HeapAlloc64 堆管理函数,同类还有 GetDefaultHeap64/HeapReAlloc64/HeapFree64/HeapSize64;【v1.1新增】 malloc64 简化版默认堆管理函数,同类还有 realloc64/free64 RtlUnicodeToAnsi64 内核实现的 Unicode、Ansi 结构(不是数据指针)管理函数,同类还有:RtlInitAnsiString64/RtlFreeAnsiString64、RtlInitUnicodeString64/RtlFreeUnicodeString64、RtlAnsiToUnicode