首页
社区
课程
招聘
[旧帖] [求助]请教 0.00雪花
发表于: 2008-2-21 21:04 4275

[旧帖] [求助]请教 0.00雪花

2008-2-21 21:04
4275
:0040120B C8000000                enter 0000, 00
:0040120F 53                      push ebx
:00401210 52                      push edx
:00401211 33C0                    xor eax, eax
:00401213 B8A6204000              mov eax, 004020A6        ----把输入的密码放入EAX
:00401218 803800                  cmp byte ptr [eax], 00
:0040121B 7460                    je 0040127D

0040127D  |> \33C0          XOR EAX,EAX
0040127F  |.  5A            POP EDX
00401280  |.  5B            POP EBX
00401281  |.  C9            LEAVE

我想问一下je 0040127D是不是验证没有输入密码?如果是的话,这句话为什么能验证?eax是32位寄存器,能存4个数字,而输入的是123456六位数字,我觉得不能验证。要么eax存的是指向123456的指针,但是仅验证指针为00,我觉得也不能说明00地址里存的是00,即没输入密码。
高手见笑了,请指教!
原题是http://www.pediy.com/tutorial/chap6/Chap6-1-11.htm中第二题。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (3)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
:00401213 B8A6204000              mov eax, 004020A6        ----把输入的密码放入EAX
:00401218 803800                  cmp byte ptr [eax], 00
:0040121B 7460                    je 0040127D

这里的Eax显然是个地址,[eax]是取地址里的内容。
cmp byte ptr [eax],00 就是取[eax]中的第一个字节(也就是密码的第一位)与00比较。
如果第一位就是字符结束符0的话,显然密码为空。
2008-2-21 21:11
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学到两点:
1.[eax]是表示eax地址里存的数据
2.0表示字符结束符,字符0应该是30
2008-2-21 21:24
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
4
学到两点:
1.[eax]是表示eax地址里存的数据
2.0表示字符结束符,字符0应该是31


Pointer to a null-terminated string <- 这是你在MSDN里会经常看到的一句话
如字符串 “123” 在内存中是 31 32 33 00 <- 这个00是不能少的,它告诉我们这个字符串到这里就结束了(注:Unicode的除外) 
2008-2-21 21:34
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册