精易论坛

标题: 字节集模糊查找,支持偏色,通配符,,,,,,,, [打印本页]

作者: a1564688566    时间: 2019-5-23 18:09
标题: 字节集模糊查找,支持偏色,通配符,,,,,,,,
.版本 2
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行
.局部变量 临时字节集, 字节集
.局部变量 开始时间, 整数型
.局部变量 计次, 整数型
.局部变量 lzj, 字节集
.局部变量 lsz, 整数型, , "2"
.局部变量 临时数组, 整数型, , "0"
.局部变量 i, 整数型
临时字节集 = 取空白字节集 (12345678 × 3) + { 20, 21, 22, 120, 130, 140, 220, 230, 240 } + 取空白字节集 (200)
.计次循环首 (12345678 × 3, 计次)
    临时字节集 [计次] = 计次
.计次循环尾 ()
开始时间 = 取启动时间 ()
lzj = { 18, 19, 20, 216, 230, 240 }
lsz [1] = 1
lsz [2] = 3
输出调试文本 (寻找字节集a (lzj, lsz, 临时字节集, { 6, 7, 8 }, 1, 取字节集长度 (临时字节集), 临时数组, 假))
输出调试文本 (“耗时:” + 到文本 (取启动时间 () - 开始时间))
.计次循环首 (取数组下标 (临时数组, ), i)
    输出调试文本 (临时数组 [i])
.计次循环尾 ()
返回 (0)  ' 可以根据您的需要返回任意数值
.子程序 寻找字节集a, 逻辑型
.参数 需查找的内容, 字节集
.参数 位置排列数组, 整数型, 数组
.参数 被查找的内容, 字节集
.参数 偏移RGB, 字节集
.参数 起点, 整数型
.参数 终点, 整数型
.参数 返回位置数组, 整数型, 数组
.参数 全部匹配, 逻辑型, , 真,返回所有,假,只返回一个
.局部变量 需查找数据长度, 整数型
.局部变量 被查找数据长度, 整数型
.局部变量 队列长度, 整数型
.局部变量 ia, 整数型
.局部变量 ib, 整数型
.局部变量 通用逻辑, 逻辑型
.局部变量 tx, 整数型
.局部变量 ty, 整数型

' 需查找的内容 格式 {10,220,20,50,60,50}
' 位置排列数组 整数数组[] 对应需查找内容数量/3,每个代表需查找的内容的位置 例:需查找的内容[1][2][3] 的位置放在 位置排列数组[1] 中间跳过相当于通配符
' 偏移RGB {10,10,10}
' 起点
' 终点
重定义数组 (返回位置数组, 假, 0)
队列长度 = 取数组下标 (位置排列数组, )
.如果真 (队列长度 < 1)
    返回 (假)
.如果真结束
需查找数据长度 = 位置排列数组 [队列长度] × 3
被查找数据长度 = 取字节集长度 (被查找的内容)
.如果真 (起点 > 被查找数据长度 - 需查找数据长度)
    返回 (假)
.如果真结束
.如果真 (终点 > 被查找数据长度)
    终点 = 被查找数据长度
.如果真结束
.变量循环首 (起点, 终点, 3, ia)
    .如果真 (被查找数据长度 - ia < 需查找数据长度)
        跳出循环 ()
    .如果真结束
    ' 调试输出 (被查找的内容 [ia], 被查找的内容 [ia + 1], 被查找的内容 [ia + 2])
    .如果真 (取绝对值 (被查找的内容 [ia] - 需查找的内容 [1]) < 偏移RGB [1] 且 取绝对值 (被查找的内容 [ia + 1] - 需查找的内容 [2]) < 偏移RGB [2] 且 取绝对值 (被查找的内容 [ia + 2] - 需查找的内容 [3]) < 偏移RGB [3])  ' 比对第一组数据
        通用逻辑 = 真
        .如果真 (队列长度 ≥ 2)  ' 比对后面数据
            .变量循环首 (2, 队列长度, 1, ib)
                tx = ia + 位置排列数组 [ib] × 3 - 3
                ty = ib × 3 - 2
                .如果 (取绝对值 (被查找的内容 [tx] - 需查找的内容 [ty]) < 偏移RGB [1] 且 取绝对值 (被查找的内容 [tx + 1] - 需查找的内容 [ty + 1]) < 偏移RGB [2] 且 取绝对值 (被查找的内容 [tx + 2] - 需查找的内容 [ty + 2]) < 偏移RGB [3])
                .否则
                    通用逻辑 = 假
                    跳出循环 ()
                .如果结束
            .变量循环尾 ()
        .如果真结束
        .如果真 (通用逻辑 = 真)
            加入成员 (返回位置数组, ia)
            .如果真 (全部匹配 = 假)
                返回 (真)
            .如果真结束
        .如果真结束
    .如果真结束
.变量循环尾 ()
.如果 (取数组下标 (返回位置数组, ) > 0)
    返回 (真)
.否则
    返回 (假)
.如果结束


就是太慢了,小弟新手莫笑.求优化求指点.



作者: 全村最帅    时间: 2019-5-23 18:33
先看一下再说
作者: a1564688566    时间: 2019-5-23 18:34
全村最帅 发表于 2019-5-23 18:33
先看一下再说

大神求转汇编
作者: sampo    时间: 2019-5-24 16:54
感谢楼主分享经验
作者: xiaoniu1230    时间: 2019-5-24 19:05
感谢分享,支持开源。。
作者: caohu1987    时间: 2024-7-8 11:28
感谢分享,支持开源。。
作者: zhangshaofan    时间: 2025-3-28 11:12
感谢分享,支持开源。。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4