能力值:
( LV9,RANK:170 )
|
-
-
26 楼
LZ:还要注意整个函数语义,你在主楼贴的那个代码,你也原型都没搞清楚
char * strrchr(const char * string, char c);
这是要返回一个指针。
所以:不明白你为什么要:
xor eax,eax
mov [edi], al
-----------------------------------
要注意原型呀
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
问题已解决了,就一条std指令引发的问题,看来微软写代码也不怎么严谨哈,做串操作都不先检测标志寄存器的DF位
谢谢mik和书呆彭的热心帮助
收藏mik的 my_strrchr() 函数
|
能力值:
(RANK:1060 )
|
-
-
28 楼
再牛逼的代码,你xor esp, esp进去他也得死
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
呵呵,受教了
谢谢大家的热心指点,睡觉了,明天上班又要打瞌睡了
|
能力值:
( LV9,RANK:220 )
|
-
-
30 楼
to mik.
试试这个,扫描单个字符如果考虑被搜索字符串较长的话,还是串指令速度快。测试了下这个,比你的速度快上很多。。
; argc1 : char *, argc2: char
__strrchr:
push ebp
mov ebp, esp
push edi
mov edi, [ebp+8h]
xor eax, eax
or ecx, -1
repne scasb
not ecx
sub edi, ecx
xor edx, edx
movzx eax, byte [ebp+0ch]
.Loop:
repnz scasb
cmove edx, edi
jecxz .Ret
jmp .Loop
.Ret:
dec edx
xchg eax, edx
pop edi
leave
ret 4*2
|
|
|