模块原理:
wow64 是在 64 位操作系统上允许 32 位程序(比如易编译的程序)执行的模拟器子系统;在 64 位操作系统中,不管你的程序是 32 还是 64 位的,其实都存在两个地址空间,正常情况下 32 位程序访问的自然是 32 位的地址空间,而 64 位程序访问其 64 位地址空间。
但是这两个空间是同时存在且可以切换的,本模块就是通过该原理切换到 64 位地址空间获取 ntdll.dll 相关函数进行调用(注:此基址是 64 位的,与平常获取的 32 位模块基址截然不同);
也就是:wow 环境 -> 进入 x64 环境 -> x64 函数调用 或 x64 汇编代码 -> 退出 x64 环境 -> wow 环境,以上必须在一个子程序内完成;
部分实现代码借鉴 c++ 开源代码:wow64ext,在此感谢作者 rewolf。
v1.2 – 2019.03.12
添加:添加了一个 X64CallArr 函数,使用数组方式调用 64 位函数,这样就相当于无限参数数量了,
更新:极大优化了 X64Call 的代码,现在的通用调用性能损失几乎可忽略不计,实际上本模块的所有代码都是一句句汇编写出来的,本身比起依赖 VC 编译器自动优化的代码都要效率很多倍;
更新:修正加载本模块后无法使用易语言 “运行” 命令的 BUG,实际还有 CreateProcess API 也一同修复,
wow64ext bug
32位进程加载64