首页
社区
课程
招聘
[求助]字符串查找问题
发表于: 2014-7-24 13:47 4414

[求助]字符串查找问题

2014-7-24 13:47
4414
2C 21 7C B6 FE CA AE D2 BB CA C0 BC CD 33 C6 DA  ,!|二十一世纪

36 BA C5 BB CA B3 C7 C0 CF C2 E8 32 C2 A5 0D 0A  6号皇城

比如说我要查找“皇”字
在上面两个字符串中都会正确匹配,都匹配到了 BB CA ,但是明显是不正确的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
_MemSearch  proc uses edx esi edi lpAddr:DWORD,lpSize:DWORD,lpBuff:DWORD,hLen:DWORD
    mov edx,lpAddr
    mov eax,lpSize
_loop:
    mov esi,edx
    mov edi,lpBuff
    mov ecx,hLen
    cld
    repz cmpsb
    .if ZERO?
        ;xor eax,eax
        mov eax,edx
    .else
        .if eax>=hLen
            ;or eax,-1
            inc edx
            dec eax
            jmp _loop
        .endif
        or eax,-1
    .endif
    ret
_MemSearch  endp

用到的函数strstr 和自己写的_MemSearch都一样,请问该如何解决这个问题?谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (5)
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
单字节和双字节在一起混淆  不怎么好办啊
2014-7-24 16:43
0
雪    币: 805
活跃值: (2553)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
汉字编码的2个字节都大于0x80,先定位到字符串中2个字节都大于0x80的位置,并且以双字节为单位向后搜索,每次搜索先判断这2个字节是否是汉字就可以解决问题了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
_MemSearch  proc uses edx esi edi lpAddr:DWORD,lpSize:DWORD,lpBuff:DWORD,hLen:DWORD
  mov esi,lpAddr
  mov eax,lpSize
_loop1:
  cmp eax,hLen
  jb _notfound
  mov dl,[esi]
  cmp dl,80h
  ja _loop2
  inc esi
  dec eax
  jmp short _loop1
_loop2:
  mov dl,[esi+1]
  cmp dl,80h
  ja _loop3
  add esi,2
  sub eax,2
  jmp short _loop1
_loop3: 
  mov edi,lpBuff
  mov ecx,hLen
  push esi
  pop edx
  cld
  repz cmpsb
  jnz _loop1
  push edx
  pop eax
  jmp short _exit
_notfound:
  or eax, -1
_exit:
  ret
_MemSearch  endp
2014-7-24 18:08
0
雪    币: 7068
活跃值: (3552)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
4
这种问题其实很简单的,你定位到字符串开始地址,从第1个字节开始分析。
ASCII码的话,首个字节范围是0~0x7F,大于等于0x80就是2个字节,这样就不会出现字节混乱了。
比如你的那个
2C 21 7C B6 FE CA AE D2 BB CA C0 BC CD 33 C6 DA ,!|二十一世纪

分析的结果应该是:
2C 21 7C B6FE CAAE D2BB CAC0 BCCD 33 C6DA
2014-7-24 18:32
0
雪    币: 253
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
懂了,谢谢各位的解答
2014-7-24 19:11
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
学习了一个好方法么么
2014-12-24 20:58
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册