系统消息 发表于 2020-7-6 21:32:21

【VB】VB6实现高效位操作的模块

本帖最后由 系统消息 于 2020-9-9 17:51 编辑

==========================================================================;

发布时间:2019-8-15 22:16
版权所有 ? YY菌{3EA3E263-6945-4E1F-A573-492FB5A7799E}.

技术交流群(QQ):250264265、112915633、522856605、264417277
用途:增加 VB6 不支持的位移、字序交换、浮点数重解释转换等位操作相关功能

请保留原作者信息,否则视为侵权。

***************************************************************************/

VB6位操作说明

前缀名称:
Shl 为逻辑左移,低位补0。
Shr 为逻辑右移,高位补0.
Sha 为算法右移,符号位不会变。
Rol 为循环左移,高低位互补(位移次数为负等于循环右移)
Ldexp 为浮点数缩放(位移次数为正数代表左移,负数代表右移),通过对浮点数的指数位加减或底数位位移(当指数位为0时),快速实现 X * 2 ^ Y。
Bswap 为字序交换,大小端互换(主要用于网络通信)。
Flt2Int 为浮点数重解释为整数,和CLng、CCur不同的是,此转换方式直接把浮点数内存数据转成整数,而不是对浮点数取整。
Int2Flt 为整数重解释为浮点数,和 Flt2Int 的作用刚刚相反

后缀数字:
8   对8位(1字节)数操作(Byte)
16对16位(2字节)数操作(Integer)
32对32位(4字节)数操作(Long、Single)
64对64位(8字节)数操作(Currency、Double)

注意:生成exe时需要修改条件编译常量,否则不会得到优化,导致效率明显下降。

0xAA55 发表于 2020-7-7 23:21:59

没有密码?嗯?

系统消息 发表于 2020-7-8 09:57:03

0xAA55 发表于 2020-7-7 23:21
没有密码?嗯?

拼音:meiyoumima

0xAA55 发表于 2020-7-8 22:49:29

如果我是你,我会考虑使用运行时动态检测是否在IDE内(而不是预编译参数),以及是否处在用户控件的编辑模式。在确保自身是以native指令运行的条件下,再进行自我Hook。

然后我会把所有的自我Hook集中到一个初始化函数里,由这个初始化函数进行一并的Hook。而非每个函数被第一次调用时进行自我Hook。
此外,推荐使用LDE进行代码长度检查,将截断的指令NOP掉,从而避免产生指令屑。

Ayala 发表于 2020-7-9 23:19:07

0xAA55 发表于 2020-7-8 22:49
如果我是你,我会考虑使用运行时动态检测是否在IDE内(而不是预编译参数),以及是否处在用户控件的编辑模 ...

以前我都是把ntdll的位操作函数 动态 hook到vb的函数上,就是调试起来麻烦

系统消息 发表于 2020-7-10 09:33:51

0xAA55 发表于 2020-7-8 22:49
如果我是你,我会考虑使用运行时动态检测是否在IDE内(而不是预编译参数),以及是否处在用户控件的编辑模 ...

之前我也是单独一个初始化函数,里面运行时判断是不是IDE的,后来考虑更好的优化所以就改条件编译了,同时自己HOOK自己不仅仅为了省一个初始化,而是可以绝对保证写入指令长度不会超过函数范围(因为要写入的指令都在原始函数的指令立即数里面。

liu496324 发表于 2023-7-6 11:14:07

还真是没有密码

gujin163 发表于 2024-1-19 08:49:54

啥也不说了,帖子就是带劲!
页: [1]
查看完整版本: 【VB】VB6实现高效位操作的模块