易语言寻找字节集通配符源码

易语言寻找字节集通配符源码

.版本 2 .程序集 程序集1 .子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码 .局部变量 临_字节集, 字节集 .局部变量 临_开始时间, 整数型 .局部变量 临_位置, 整数型 .局部变量 计次, 整数型 临_字节集 = 取空白字节集 (599999999) + { 3, 2, 1 } .计次循环首 (599999999, 计次) 临_字节集 [计次] = 计次 .计次循环尾 () 临_开始时间 = 取启动时间 () 临_位置 = 寻找字节集_通配符 (临_字节集, “03??01”) 输出调试文本 (“通配符_搜索 ” + “位置:” + 到文本 (临_位置) + “ 耗时:” + 到文本 (取启动时间 () - 临_开始时间)) 临_开始时间 = 取启动时间 () 临_位置 = 寻找字节集_通配符 (临_字节集, “030201”) 输出调试文本 (“速度比较_通配符 ” + “位置:” + 到文本 (临_位置) + “ 耗时:” + 到文本 (取启动时间 () - 临_开始时间)) 临_开始时间 = 取启动时间 () 临_位置 = 寻找字节集 (临_字节集, { 3, 2, 1 }, ) 输出调试文本 (“速度比较_搜索字节集 ” + “位置:” + 到文本 (临_位置) + “ 耗时:” + 到文本 (取启动时间 () - 临_开始时间)) ' 老方法 临_开始时间 = 取启动时间 () 临_位置 = 寻找字节集_老的仅供参考学习 (临_字节集, “030201”) 输出调试文本 (“老方法搜索仅供参考 ” + “位置:” + 到文本 (临_位置) + “ 耗时:” + 到文本 (取启动时间 () - 临_开始时间)) 返回 (0) ' 返回值被忽略。 .子程序 寻找字节集_通配符, 整数型, , 返回一字节集在另一字节集中最先出现的位置,位置值从 1 开始。如果未找到,返回 -1 by zhangyun173 .参数 被搜寻的字节集, 字节集 .参数 欲寻找的字节集, 文本型, , 不一样了可以带*或?号代替如"FF**AA??02"16进制,别搞错了2个字符为1个字节,1必须写成01,长度不要超过255个字节了 .参数 起始搜寻位置, 整数型, 可空, 可以被省略。1为首位置,2为第2个位置,如此类推,如果被省略,则“寻找字节集”命令默认从首部开始,“倒找字节集”命令默认从尾部开始 .局部变量 临_数据地址, 整数型 .局部变量 临_数据大小, 整数型 .局部变量 临_搜索地址, 整数型 .局部变量 临_寻找的字节集, 字节集 .局部变量 临_匹配内容, 文本型 .局部变量 临_文本, 文本型 .局部变量 临_位置, 整数型 .如果真 (是否为空 (起始搜寻位置)) 起始搜寻位置 = 1 .如果真结束 临_数据地址 = 取字节集指针 (被搜寻的字节集) + 起始搜寻位置 - 1 临_数据大小 = 取字节集长度 (被搜寻的字节集) - 起始搜寻位置 + 1 临_搜索地址 = 1 临_匹配内容 = 删全部空 (欲寻找的字节集) .如果真 (取文本长度 (临_匹配内容) % 2 ≠ 0) ' 搜索的字节集错误 返回 (-1) .如果真结束 .如果真 (取文本长度 (临_匹配内容) ÷ 2 > 临_数据大小) ' 搜索内容大于被搜索的内容,没的找。 返回 (-1) .如果真结束 .如果真 (取文本长度 (临_匹配内容) ÷ 2 > 255) ' 搜索内容大于255,自个升级吧。 返回 (-1) .如果真结束 临_位置 = -1 .判断循环首 (临_匹配内容 ≠ “”) 临_文本 = 取文本左边 (临_匹配内容, 2) .如果真 (取反 (临_文本 = “**” 或 临_文本 = “??”)) 临_寻找的字节集 = 临_寻找的字节集 + 到字节集 (到字节 (临_位置)) + 到字节集 (到字节 (十六到十 (临_文本))) .如果真结束 临_位置 = 临_位置 + 1 临_匹配内容 = 文本替换 (临_匹配内容, 1, 2, ) .判断循环尾 () 临_搜索地址 = 取字节集指针 (临_寻找的字节集) 置入代码 ({ 139, 125, 252, 139, 77, 248, 139, 117, 244, 139, 86, 252, 51, 192, 138, 70, 1, 242, 174, 117, 28, 187, 2, 0, 0, 0, 51, 192, 138, 4, 30, 138, 4, 7, 58, 68, 30, 1, 117, 228, 131, 195, 2, 59, 218, 115, 13, 235, 233, 184, 255, 255, 255, 255, 139, 229, 93, 194, 10, 0, 43, 125, 252, 137, 125, 252 }) 返回 (临_数据地址 + 起始搜寻位置 - 1) ' mov edi,[ebp-4] ' mov ecx,[ebp-8] ' mov esi,[ebp-12] ' mov edx,[esi-4] ' @for:;循环 ' xor eax,eax ' mov al,[esi+1] ' repne scasb ' jnz @over;搜索完成跳到失败 ' mov ebx,2 ' @for2:;子循环 ' xor eax,eax ' mov al,[ebx+esi] ' mov al,[eax+edi] ' cmp al,[ebx+esi+1] ' jnz @for;得,子循环比较失败,白跑了,继续下一个循环。 ' add ebx,2 ' cmp ebx,edx ' jnb @end;比较完成成功了 ' jmp @for2;子循环继续 ' @over:;失败 ' mov eax,-1 ' mov esp,ebp ' pop ebp ' retn 10 ' @end:;成功 ' sub edi,[ebp-4] ' mov [ebp-4],edi .子程序 寻找字节集_老的仅供参考学习, 整数型, , 返回一字节集在另一字节集中最先出现的位置,位置值从 1 开始。如果未找到,返回 -1 by zhangyun173 .参数 被搜寻的字节集, 字节集 .参数 欲寻找的字节集, 文本型, , 不一样了可以带*或?号代替如"FF**AA??02"16进制,别搞错了2个字符为1个字节,1必须写成01 .参数 起始搜寻位置, 整数型, 可空, 可以被省略。1为首位置,2为第2个位置,如此类推,如果被省略,则“寻找字节集”命令默认从首部开始,“倒找字节集”命令默认从尾部开始 .局部变量 临_数据地址, 整数型 .局部变量 临_数据大小, 整数型 .局部变量 临_搜索地址, 整数型 .局部变量 临_寻找的字节集, 字节集 .局部变量 临_匹配内容, 文本型 .局部变量 临_文本, 文本型 .局部变量 临_位置, 整数型 .如果真 (是否为空 (起始搜寻位置)) 起始搜寻位置 = 1 .如果真结束 临_数据地址 = 取字节集指针 (被搜寻的字节集) + 起始搜寻位置 - 1 临_数据大小 = 取字节集长度 (被搜寻的字节集) - 起始搜寻位置 + 1 临_搜索地址 = 1 临_匹配内容 = 删全部空 (欲寻找的字节集) .如果真 (取文本长度 (临_匹配内容) % 2 ≠ 0) ' 搜索的字节集错误 返回 (-1) .如果真结束 .如果真 (取文本长度 (临_匹配内容) ÷ 2 > 临_数据大小) ' 搜索内容大于被搜索的内容,没的找。 返回 (-1) .如果真结束 .判断循环首 (临_匹配内容 ≠ “”) 临_文本 = 取文本左边 (临_匹配内容, 2) .如果真 (取反 (临_文本 = “**” 或 临_文本 = “??”)) 临_寻找的字节集 = 临_寻找的字节集 + 到字节集 (到字节 (临_位置)) + 到字节集 (到字节 (十六到十 (临_文本))) .如果真结束 临_位置 = 临_位置 + 1 临_匹配内容 = 文本替换 (临_匹配内容, 1, 2, ) .判断循环尾 () 临_搜索地址 = 取字节集指针 (临_寻找的字节集) 置入代码 ({ 139, 117, 252, 139, 77, 248, 3, 206, 139, 125, 244, 139, 87, 252, 51, 192, 51, 219, 138, 4, 59, 138, 4, 48, 58, 68, 59, 1, 117, 9, 131, 195, 2, 59, 218, 115, 20, 235, 235, 59, 241, 115, 3, 70, 235, 224, 184, 255, 255, 255, 255, 139, 229, 93, 194, 16, 0, 43, 117, 252, 137, 117, 252 }) 返回 (临_数据地址 + 起始搜寻位置) ' ;数据初始化 ' mov esi,[ebp-4];数据地址 ' mov ecx,[ebp-8];数据大小 ' add ecx,esi;数据结束地址 ' mov edi,[ebp-12];搜索数据地址 ' mov edx,[edi-4];搜索数据大小 ' ;循环开始 ' @for1: ' xor eax,eax ' xor ebx,ebx;清零搜索数据计次 ' @for2: ' mov al,[edi+ebx];取出搜索数据中的一个字节(字节集位置) ' mov al,[esi+eax];取出数据中的一个字节进行比较 ' cmp al,[edi+ebx+1] ' jnz @next1;不相等跳出子循环,数据+1继续 ' add ebx,2 ' cmp ebx,edx;比较搜索大小,和已完成搜索的大小 ' jae @end;大于等于时子循环搜索完成,找到符合条件的 ' jmp @for2 ' @next1: ' cmp esi,ecx ' jae @over;整个数据搜索完成,失败了。 ' inc esi;数据+1继续循环 ' jmp @for1 ' @over:;失败 ' mov eax,-1 ' mov esp,ebp ' pop ebp ' retn 16 ' @end:;成功 ' sub esi,[ebp-4] ' mov [ebp-4],esi .子程序 取字节集指针, 整数型 .参数 字节集, 字节集 置入代码 ({ 139, 69, 8, 139, 0, 131, 192, 8, 201, 194, 4, 0 }) ' mov eax, dword ptr [ebp+08] ' mov eax, dword ptr [eax] ' add eax, 00000008 ' leave ' ret 0004 返回 (0) .子程序 十六到十, 整数型, , 将十六进制转换成十进制(返回十进制文本) .参数 十六进制文本, 文本型, , 待转换的十六进制文本 .参数 返回结果, 文本型, 参考 可空, 返回文本结果(如十进制数超出整数范围,可通过返回结果获得十进制文本) .局部变量 中间文本, 文本型 .局部变量 结果, 长整数型 .局部变量 容器1, 整数型 返回结果 = “” .变量循环首 (1, 取文本长度 (十六进制文本), 1, 容器1) 中间文本 = 取文本中间 (十六进制文本, 容器1, 1) 结果 = (寻找文本 (“0123456789ABCDEF”, 中间文本, , 真) - 1) × 求次方 (16, 取文本长度 (十六进制文本) - 容器1) + 结果 .变量循环尾 () .如果真 (是否为空 (返回结果) = 假) 返回结果 = 到文本 (结果) .如果真结束 返回 (结果)
相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

易语言寻找字节集通配符源码》有0个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注