飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3262|回复: 0

[讨论] 注册算法中test bl,bl的问题!

[复制链接]
  • TA的每日心情

    前天 20:01
  • 签到天数: 919 天

    [LV.10]以坛为家III

    发表于 2010-7-23 14:29:15 | 显示全部楼层 |阅读模式
    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)
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表