首页
社区
课程
招聘
[旧帖] [求助]问个汇编问题! 0.00雪花
发表于: 2011-10-16 20:31 1403

[旧帖] [求助]问个汇编问题! 0.00雪花

2011-10-16 20:31
1403
004CBFCE  |> /8B55 FC       /MOV EDX,DWORD PTR SS:[EBP-4]         不懂
004CBFD1  |. |8A5402 FF     |MOV DL,BYTE PTR DS:[EDX+EAX-1]       不懂
004CBFD5  |. |80FA 30       |CMP DL,30                                              减法操作
004CBFD8  |. |72 2B         |JB SHORT eXeScope.004CC005
004CBFDA  |. |80FA 39       |CMP DL,39
004CBFDD  |. |77 26         |JA SHORT eXeScope.004CC005
004CBFDF  |. |40            |INC EAX                                                      不懂
004CBFE0  |. |83F8 0B       |CMP EAX,0B
004CBFE3  |.^\75 E9         \JNZ SHORT eXeScope.004CBFCE

这是一段计算注册码的循环,谁帮我解释下,意思?谢谢了

[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 221
活跃值: (70)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
004CBFCE  |> /8B55 FC       /MOV EDX,DWORD PTR SS:[EBP-4]         不懂
004CBFD1  |. |8A5402 FF     |MOV DL,BYTE PTR DS:[EDX+EAX-1]       不懂
004CBFD5  |. |80FA 30       |CMP DL,30                                              减法操作
004CBFD8  |. |72 2B         |JB SHORT eXeScope.004CC005
004CBFDA  |. |80FA 39       |CMP DL,39
004CBFDD  |. |77 26         |JA SHORT eXeScope.004CC005
004CBFDF  |. |40            |INC EAX                                                      不懂
004CBFE0  |. |83F8 0B       |CMP EAX,0B
004CBFE3  |.^\75 E9         \JNZ SHORT eXeScope.004CBFCE

把ebp上面一个栈中的值赋给edx,把数据段中[EDX+EAX-1]内存处一个字节的值赋给dl,CMP是比较操作,不是减法(sub),比较DL中的值,如果DL<30h或者DL>39h,就跳转到004CC005,eax的值加1(INC是自加操作),比较eax的值,如果eax不等于0Bh,跳到004CBFCE
2011-10-16 20:54
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
ebp-4是一个局部变量的值,
假设就是一个指针变量吧,,同时也假设EAX=1,对这个指针进行一些运算,寻址,
30-39就是数字0到数字9,明白了这点,也就知道,下面这些代码就是统计有多少个数字,每统计一个,EAX++,然后循环,直到10个数字为止,如果有非数字出现,跳转,可能是跳到错误处理部分。

// pseudo code
//
char *p;
......
for( int i = 1 ; i < 11 ; i++ )
{
char b = *(p+i-1);
if( b < '0' || b > '9' ) goto ERROR;
}
// now we have a pointer point to 10 digit number  
....

ERROR:
....
2011-10-16 21:21
0
雪    币: 623
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
很简单,逆成的逻辑是这样:

for (int i = 0; i < 12; i++)
{
c = str; // [ebp-4] and [edx+eax-]

if (c < '0')
{
// jmp 004cc005

} else if (c > '9')
{
// jmp 004cc005
}
}
2011-10-16 21:24
0
雪    币: 54
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢大家了我总算是看明白了。看来我还得好好的去看看汇编基础,多了解才是王道!再次感谢大家,问题总算解决了!
2011-10-16 22:19
0
游客
登录 | 注册 方可回帖
返回