想问一下,PP大神,这算法你自己写的?

社区服务
高级搜索
猴岛论坛跑跑卡丁车想问一下,PP大神,这算法你自己写的?
发帖 回复
正序阅读 最近浏览的帖子最近浏览的版块
35个回复

[寻求解答]想问一下,PP大神,这算法你自己写的?

楼层直达
sprees

ZxID:35237591

等级: 上士
举报 只看楼主 使用道具 楼主   发表于: 2013-12-02 0
非常精妙,如果是你自己写的话,真的该称你一声大神,我自己都自愧不如了。今晚仔细看了一下,这个算法内部很牛逼。真怀疑我是不是应该继续再搞挂了。
  1. int __cdecl Find(int Begin, int Limit, int pdata, int length)
  2. Begin:节区的起始地址,Limit节区去除一个length后的大小
  3. pdata:需要搜索的内容(应该只可以为字符串),length:字符串的长度。
  4. {
  5.   unsigned int offset;
  6.   int readchar;
  7.   int rest;
  8.   signed int nowStart;
  9.   int restspacesize;
  10.   int DataRVA;
  11.   int Buffoffset;
  12.   int result;
  13.   if ( !Begin || !pdata )                       // 如果基址和缓冲区为空
  14.     goto Exit;
  15.   memset32(buffer, length, 256);                // #define memset32(dst,val,count)  \
  16.                                                 // __asm mov edi,dword ptr[dst]     \
  17.                                                 // __asm mov eax,dword ptr[val]    \
  18.                                                 // __asm mov ecx,dword ptr[count]   \
  19.                                                 // __asm rep stosd
  20.                                               //由于每个字节码的最大数为0xFF,所以下方的index绝不会越界
  21.   offset = 0;
  22.   if ( length )
  23.   {
  24.     do
  25.     {
  26.       readchar = *(offset + pdata);             // 获取offset所指向的缓冲区的字符
  27.       rest = length - offset++ - 1;             // 取完字符后每次递增偏移量,并且求出缓冲区剩余长度
  28.       buffer[readchar] = rest;                  // 将剩余长度放入字符下表的缓冲区
  29.     }                                           // 此时缓冲区内只剩下以字符为下标的剩余长度列表
  30.     while ( offset < length );                  // 其实也就是求个取反排序
  31.   }
  32.   nowStart = 1;                                 // 本次搜索的起始RVA
  33.   restspacesize = Limit - length;               // firstrest等于这次搜索后的剩余搜索空间大小
  34.   if ( (Limit - length) >= 1 )                  // 如果所选区段的长度大于搜索内容的长度,则搜索。
  35.   {
  36.     while ( 1 )                                 // 开始搜索
  37.     {
  38.       DataRVA = nowStart - 1;                  
  39.       Buffoffset = nowStart - 1 - nowStart;     // Buffoffset = -1
  40.       if ( Buffoffset + 1 < length )
  41.       {
  42.         do
  43.         {
  44.           if ( *(DataRVA + Begin) != *(Buffoffset + pdata + 1) )
  45.             break;
  46.           ++DataRVA;                            // 如果不对称,则搜索的指针下移一个字节
  47.           Buffoffset = DataRVA - nowStart;      // 下一个RVA减去起始RVA,得到对应的数组元素下表
  48.         }
  49.         while ( DataRVA - nowStart + 1 < length );// 如果本次的RVA未达length末尾,则继续搜索
  50.         restspacesize = Limit - length;         // 到这里已搜索完毕一次字符串空间,再次缩短剩余搜索空间大小
  51.       }
  52.       if ( DataRVA - nowStart + 1 == length )   // 如果RVA已经到达length长度则返回结果
  53.         break;
  54.       nowStart += buffer[*(nowStart + Begin + length - 1)] + 1;// 这里根据上面的剩余字节数取长度为模的补数为下一次上搜索的起始地址,哈哈,此处不好说,不可说。
  55.       if ( nowStart > restspacesize )           // 如果下一次搜索位置大于剩余可搜索空间的话,返回了。结果为-1
  56.         goto Exit;
  57.     }
  58.     result = nowStart - 1;
  59.   }
  60.   else
  61.   {
  62. Exit:  result = -2;
  63.   }
  64.   return result;
  65. }
[ 此帖被sprees在2013-12-02 01:18重新编辑 ]
本帖de评分: 3 条评分 DB +3
DB+1 2013-12-02

C++++看不懂

DB+1 2013-12-02

sunday算法,百度下,算法是别人发明的,代码实现很简单

DB+1 2013-12-02

看不懂,都是大神

lasp206

ZxID:25331490

等级: 新兵
举报 只看该作者 35楼  发表于: 2014-01-07 0
表示压力一点都米有,因为我只管用
丶沙加o

ZxID:32477007

等级: 中将
人生如烟, 岁月无痕, 烟自多情, 却把自己烧的, 光剩下屁股!

举报 只看该作者 34楼  发表于: 2013-12-02 0
真的是火星文。。
清静梵音

ZxID:19432393

等级: 元帅
分享你我他

举报 只看该作者 33楼  发表于: 2013-12-02 0
回 32楼(wuli12tou) 的帖子
呵呵,不知道啊,你去问他去
wuli12tou

ZxID:20491181

等级: 中校
举报 只看该作者 32楼  发表于: 2013-12-02 0
回 21楼(清静梵音) 的帖子
是不是老A的?话说老A是谁,做辅助很厉害啊。
望星╮

ZxID:22559798

等级: 元老

举报 只看该作者 31楼  发表于: 2013-12-02 0
看不懂
Terrence_liang

ZxID:19643153

等级: 大元帅
配偶: o小云o
有一种坚持叫----------跑跑卡丁车!

举报 只看该作者 30楼  发表于: 2013-12-02 0
牛逼啊
方轮子跑天下

ZxID:33685971

等级: 准尉
举报 只看该作者 29楼  发表于: 2013-12-02 0
搞开发头是很大的
lfdsa

ZxID:18371552

等级: 元帅
[img]http://goo.gl/5x4nz[/img]

举报 只看该作者 28楼  发表于: 2013-12-02 0
请不要用外星语交流,这里是跑版555555555555
dazesanshi110

ZxID:21796432

等级: 少将
眉毛上的汗水  没毛下的泪水

举报 只看该作者 27楼  发表于: 2013-12-02 0
不明白
-鑫森淼焱垚-

ZxID:23163180

等级: 中尉
本人已死 无事烧纸     小事挖坟 大事招魂

举报 只看该作者 26楼  发表于: 2013-12-02 0
看不懂
清空梦

ZxID:20112075

等级: 元老
配偶: 清空心
 ◕热会四队◕        ◕四队队长◕

举报 只看该作者 25楼  发表于: 2013-12-02 0
谁教我啊

际遇之神

惩罚

抢沙发不成,与楼上的斗殴,处以治安罚款DB10

神歌o丶

ZxID:19592985

等级: 元老
           知人者智,自知者明

举报 只看该作者 24楼  发表于: 2013-12-02 0
这东西我是真的看不懂啊!
sprees

ZxID:35237591

等级: 上士
举报 只看该作者 23楼  发表于: 2013-12-02 0
回 21楼(清静梵音) 的帖子
算法什么的还是逆向一遍比较清楚k;看源代码反而我不是很会看.
sprees

ZxID:35237591

等级: 上士
举报 只看该作者 22楼  发表于: 2013-12-02 0
清静梵音

ZxID:19432393

等级: 元帅
分享你我他

举报 只看该作者 21楼  发表于: 2013-12-02 0
回 20楼(sprees) 的帖子
代码也不是我写的啊,我修改别人的
sprees

ZxID:35237591

等级: 上士
举报 只看该作者 20楼  发表于: 2013-12-02 0
回 11楼(清静梵音) 的帖子
关键不在于实现很简单,在于考虑的太周全了.
zhangzailk

ZxID:27995035

等级: 准尉
举报 只看该作者 19楼  发表于: 2013-12-02 0
高手 云集 啊   !
へ望っ

ZxID:28368943

等级: 中尉
举报 只看该作者 18楼  发表于: 2013-12-02 0
膜拜大神
风→_→静

ZxID:25574656

等级: 上将
爱我何在

举报 只看该作者 17楼  发表于: 2013-12-02 0
我要是懂呢么点就好了
« 返回列表
发帖 回复