- UID
- 69065
注册时间2010-7-17
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 怒 前天 08:57 |
---|
签到天数: 1021 天 [LV.10]以坛为家III
|
004013C2 /$ 33FF xor edi,edi ; EDI清零
004013C4 |. 33DB xor ebx,ebx ; EBX清零
004013C6 |> 8A1E /mov bl,byte ptr ds:[esi] ; 将ESI所指的name取出一位到bl
004013C8 |. 84DB |test bl,bl ; name中还有字符吗
004013CA |. 74 05 |je short serial.004013D1 ; 没有计算结束
004013CC |. 03FB |add edi,ebx ; EDI=EDI+EBX依次将name中字符相加
004013CE |. 46 |inc esi ; 将指针移向下一字符
004013CF |.^ EB F5 \jmp short serial.004013C6 ; 跳转
004013D1 \> C3 retn ; 返回
下断时输入的字符串是abcde,但算法会把字母小写转化为大写ABCDE,在004013C2一行下断,当在OD里走了几次后,当运行jmp short serial.004013C6后跳到mov bl,byte ptr ds:[esi],这时堆栈面板有以下信息:
ds:[00402193]=00
bl=45 ('E')
跳转来自 004013CF
现在光标停留在mov bl,byte ptr ds:[esi]这一行,我把这行运行后,光标停到test bl,bl上,这时bl=0;再运行
这行test bl,bl后,OD提示跳转已实现.
我的问题在于:
原来:EBX清零后,A与0不等,跳转不实现,移向下一字符,B与A不等,不跳向下移。C与B不等,不跳向下移,D与C不
等,不跳向下移。E与D不等再向下移,这时我不明白的问题出来了:再向下移时,
ds:[00402193]=00
bl=45 ('E')
这时把0给了bl了,bl应该是0了,是不是把E的下一个字符'\0'(在C语言中:字符串"ABCDE",存储方式E后面有'\0',
而'\0'的ASCII值是0),虽然这时bl被给0了,但原来的bl还是'E'啊,还是不相等啊,应该再向下移,也就是再循环
一次后,原来的就是test bl(这时是0了) bl(这时的源操作数还是'E'啊),所以我想还应该循环一次,但实事是:
OD没有再循环,就提示跳转已实现.就这点不明白!
serial.rar
(3.62 KB, 下载次数: 0)
|
|