技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 111|回复: 5
收起左侧

VB6实现高效位操作的模块

[复制链接]

4

主题

70

帖子

1030

积分

用户组: 上·技术宅

UID
4293
精华
4
威望
12 点
宅币
724 个
贡献
192 次
宅之契约
0 份
在线时间
73 小时
注册时间
2018-9-19
发表于 2020-7-6 21:32:21 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
==========================================================================;

  发布时间: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时需要修改条件编译常量,否则不会得到优化,导致效率明显下降。

VB6位操作模块(没有密码).rar

4.33 KB, 阅读权限: 10, 下载次数: 1

VB6位移

回复

使用道具 举报

1062

主题

2455

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
358 点
宅币
19619 个
贡献
40587 次
宅之契约
0 份
在线时间
1856 小时
注册时间
2014-1-26
发表于 2020-7-7 23:21:59 | 显示全部楼层
没有密码?嗯?

4

主题

70

帖子

1030

积分

用户组: 上·技术宅

UID
4293
精华
4
威望
12 点
宅币
724 个
贡献
192 次
宅之契约
0 份
在线时间
73 小时
注册时间
2018-9-19
 楼主| 发表于 2020-7-8 09:57:03 | 显示全部楼层
0xAA55 发表于 2020-7-7 23:21
没有密码?嗯?

拼音:meiyoumima

1062

主题

2455

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
358 点
宅币
19619 个
贡献
40587 次
宅之契约
0 份
在线时间
1856 小时
注册时间
2014-1-26
发表于 2020-7-8 22:49:29 | 显示全部楼层
如果我是你,我会考虑使用运行时动态检测是否在IDE内(而不是预编译参数),以及是否处在用户控件的编辑模式。在确保自身是以native指令运行的条件下,再进行自我Hook。

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

28

主题

185

帖子

2102

积分

用户组: 版主

UID
1821
精华
6
威望
67 点
宅币
1632 个
贡献
121 次
宅之契约
0 份
在线时间
349 小时
注册时间
2016-7-12
发表于 2020-7-9 23:19:07 | 显示全部楼层
0xAA55 发表于 2020-7-8 22:49
如果我是你,我会考虑使用运行时动态检测是否在IDE内(而不是预编译参数),以及是否处在用户控件的编辑模 ...

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

4

主题

70

帖子

1030

积分

用户组: 上·技术宅

UID
4293
精华
4
威望
12 点
宅币
724 个
贡献
192 次
宅之契约
0 份
在线时间
73 小时
注册时间
2018-9-19
 楼主| 发表于 2020-7-10 09:33:51 | 显示全部楼层
0xAA55 发表于 2020-7-8 22:49
如果我是你,我会考虑使用运行时动态检测是否在IDE内(而不是预编译参数),以及是否处在用户控件的编辑模 ...

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

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图  

GMT+8, 2020-8-12 22:57 , Processed in 0.104423 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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