飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 23066|回复: 57

[C/C++] 庆飘云阁13周年_分享个人特征码搜索匹配思路跟源码_还有近期学C练手写的函数源码!

    [复制链接]
  • TA的每日心情
    无聊
    2023-3-14 21:31
  • 签到天数: 74 天

    [LV.6]常住居民II

    发表于 2017-11-29 15:57:22 | 显示全部楼层 |阅读模式
    本帖最后由 huangyushun 于 2017-11-29 20:23 编辑

    关于特征码搜索:
    网上搜索看了看一些前辈留下的思路跟算法:
    大概就看懂了两种思路:
    1、暴力搜索,最原始而简单的方式,逐字节对比_不匹配逐字节递加向下
    2、优化搜索,制作一张对比字符表(需要有重复字符)_一样逐字节对比,
         出现不匹配根据字符表里的重复字符,进行尽量多的跳过字节(尽可能防止重复对比字节)
    ----------------------------------------------------------------------------------------------------------------------
    个人特征码搜索的思路是:
    在字符或者是内存特征码对比中,
    文本字符什么的,就一眼带过吧,用汇编字节来当例子说
    汇编:
    004177CD:    894424 08       mov dword ptr ss:[esp+0x8],eax
    004177D1 :  8B4C24 1C       mov ecx,dword ptr ss:[esp+0x1C]
    例如两句,如果搜索,我们正常对比,
    就容易重复对第一句
    89 44 24 08
    这四个字节码,在程序中出现很多很多很多,我们对比就容易浪费时间在这个上面对比
    我的想法是,尽可能的不去对比这些重复的邻居字符,那么我们先对比
    第一个字节跟最后一个字节,这样出现的几率就少了很多,免去前面几个重复字节码的浪费对比时间
    那么按照这个思路_是不是一直首尾对比字节就好呢?
    不是的,这些字节码有邻居亲戚关系的,
    相互在一起的字节码一般都是某句汇编,所以字节码也是固定那几个字节,
    (文本而言,就是成语跟词语还有一些行为词语,也是相互关联的,亲戚关系)
    理论上,首尾匹配之后,从中间网两边比较容易过滤到不匹配的雷同字节,
    但是似乎写代码又问题复杂化了(编程能力弱_最近刚学的C++)
    于是乎,我用了单双数对比的方法,先对比双数再对比单数,从未尽量避免去重复对比关联的字节,浪费时间
    匹配思想.jpg
    中心思想:
    首尾定位先对比,
    然后中间分段对比_
    可以根据子字符串的长度来选择分成多少段对比
    我目前写的是2段,单双数_可以自己根据实际需求应用于其它领域
    --------------------------------------------------------------------------------------------------------------------------------------------
    大概总结:
    而网上制作字符表来跳过字节的方式,可以归纳为:
    在事情发生之后,尽量去避免他的重复发生,
    ----------------------------------------------------------------------
    我的想法是预测事情可能发生的几率,去做准备避免他们发生
    ----------------------------------------------------------------------
    那么根据理论,两种想法并不冲突可以相辅相成来用,实现效率最大化
    但是编程怎么实现,心好累,能力不足,写不来了,累了
    ----------------------------------------------------------------------
    主要的目的就是分享思路_希望能抛砖引玉
    ----------------------------------------------------------------------
    ----------------------------------------------------------------------
    模糊匹配:??
    以前都是在对比过程逐个字符转为字节数值来对比,浪费大把时间来转化,重复转化再重复继续重复
    ----------------------------------------------------------------------
    int *查询字节集 = new int[查询字节集长度];
    我用了整数数组来接受,如果是??就写入-1,其它的正常写入,
    对比的时候,如果是-1就跳过,其它就正常的对比,
    ----------------------------------------------------------------------

    模糊匹配.jpg

    --------------------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------------
    特征码搜索匹配到此结束:开始分享自己学C的一些练手函数:
    --------------------------------------------------------------------------------------------------------------------------------------------
    个人学C练手写的函数_大概截图:附件有源码文件
    --------------------------------------------------------------------------------------------------------------------------------------------
    001.jpg 002.jpg

    ---------------------------------------------------------------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------------------------------------------------------------
    ---------------------------------------------------------------------------------------------------------------------------------------
    最后给各位跟我一样的新手朋友,一个导师QQ号(177410761):wgz001
    这是我见过最耐心,最热心肠的导师,
    例如,我每次遇上不懂的学习问题,心急都会抖动,视频,刷表情找他
    他从未生气,每次都很认真的解答我的问题,相当耐心。。。。

    不过,wgz001 有个接头暗语,要记得哦:
    人生苦短,我要睡觉

    这时候,你要回答

    人生苦短,一起睡觉


    ---------------------------------------------------------------------------------------------------------------------------------------
    wgz001导师说,上源码要跟他一样热心肠有耐心,乐于分享,下面是源文件:
    人生苦短,我要睡觉.rar (4.23 KB, 下载次数: 129, 售价: 8 枚飘云币)


    001.jpg
    002.jpg
    003.jpg
    004.jpg
    005.jpg
    006.jpg
    007.jpg
    008.jpg
    009.jpg
    010.jpg
    011.jpg
    012.jpg
    013.jpg
    014.jpg
    015.jpg
    016.jpg
    017.jpg
    018.jpg

    评分

    参与人数 14威望 +84 飘云币 +52 收起 理由
    dengnan + 4 赞一个!
    qq1434470248 + 4
    believeme + 4 PYG有你更精彩!
    harkin12 + 4 PYG有你更精彩!
    xiaobing66 + 4 很给力!
    m2m + 4 感谢发布原创作品!
    smallhorse + 8 + 8 大赞,王哥的确平易近人!
    论坛管理员 + 4 感谢发布原创作品!
    cxqdly + 8 + 8
    挚爱科技 + 1 PYG有你更精彩!

    查看全部评分

    本帖被以下淘专辑推荐:

    PYG19周年生日快乐!
  • TA的每日心情

    昨天 20:05
  • 签到天数: 1535 天

    [LV.Master]伴坛终老

    发表于 2017-11-29 16:08:56 | 显示全部楼层
    总结出来的就是经验,值得借鉴~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2017-11-29 16:34:51 | 显示全部楼层
    感谢分享技术心得 ~
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2017-11-29 16:38:48 | 显示全部楼层
    我就喜欢有码的表哥
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-4 14:31
  • 签到天数: 73 天

    [LV.6]常住居民II

    发表于 2017-11-29 17:18:41 来自手机 | 显示全部楼层
    6B了,新花样!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    15 小时前
  • 签到天数: 2199 天

    [LV.Master]伴坛终老

    发表于 2017-11-29 18:06:35 | 显示全部楼层
    学习,从E的角度使用C。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-4-13 16:05
  • 签到天数: 68 天

    [LV.6]常住居民II

    发表于 2017-11-29 18:14:46 | 显示全部楼层
    感谢分享 前来支持
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-9-9 20:17
  • 签到天数: 53 天

    [LV.5]常住居民I

    发表于 2017-11-29 18:38:27 | 显示全部楼层
    虽然看不懂,就知道很厉害的。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-6 21:16
  • 签到天数: 37 天

    [LV.5]常住居民I

    发表于 2017-11-29 18:44:17 | 显示全部楼层
    VC6 不支持,能不能编译一个成品,让我扣一下。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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