能力值:
( LV2,RANK:10 )
|
-
-
2 楼
单字节和双字节在一起混淆 不怎么好办啊
|
能力值:
( 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
|
|
能力值:
( 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
|
能力值:
( LV2,RANK:10 )
在线值:

|
-
-
5 楼
懂了,谢谢各位的解答
|
能力值:
( LV8,RANK:120 )
|
-
-
6 楼
学习了一个好方法么么
|
|
|