首页
社区
课程
招聘
请教关于字符串比较的问题.....
2007-1-5 18:19 4774

请教关于字符串比较的问题.....

2007-1-5 18:19
4774
在CCDebuger版主的 OllyDBG 入门系列(二)-字串参考 中:

00403B2F |. 89C6 MOV ESI,EAX; 把EAX内我们输入的用户名送到 ESI
00403B31 |. 89D7 MOV EDI,EDX; 把EDX内的数据“Registered User”送到EDI
00403B33 |. 39D0  CMP EAX,EDX                         ; 用“Registered User”和我们输入的用户名作比较
00403B35 |. 0F84 8F000000   JE CrackMe3.00403BCA   ; 相同则跳
00403B3B |. 85F6 TEST ESI,ESI                      ; 看看ESI中是否有数据,主要是看看我们有没有输入用户名
00403B3D |. 74 68 JE SHORT CrackMe3.00403BA7   ; 用户名为空则跳

其中CMP EAX,EDX   这句不太明白了

EAX和EDX的内容应该分别是指向“Registered User”和我们输入的用户名的地址吧?
难道比较字符串不需要用CMPS,而只要比较其地址就行了吗????

请各位大大指教一下..........

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

收藏
免费 0
打赏
分享
最新回复 (4)
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2007-1-5 18:56
2
0
CMP EAX,EDX //这一句主要是判断函数的两个参数是否指向同一个字串。
雪    币: 213
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xf3087 2007-1-5 23:07
3
0
谢谢小虾!
我是刚刚抬脚的初学者,基本功很差,老老实实跟踪了这个程序,到后面才发现用户名比较是每4个字节比较的.

还有个问题想不通.如何确定以下两句得到的是用户名的长度的?

00403B43 |. 8B46 FC         MOV EAX,DWORD PTR DS:[ESI-4]        ; 用户名长度送EAX
00403B46 |. 8B57 FC         MOV EDX,DWORD PTR DS:[EDI-4]        ; “Registered User”字串的长度送EDX

我只在前面程序调用GetWindowTextA()后,发现EAX曾被赋于过所输入的用户名的长度. 这个[ESI-4]为什么能得到长度呢??

翻了30多页的跟帖,发现里面也有人问到这个问题,请小虾再指点下,谢谢
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2007-1-6 00:06
4
0
  你那个程序是Delphi程序,Delphi程序对字符串的管理是这样的:字符串首地址是指向字符串的,字符串首地址-4是指向字符串的长度,字符串首地址-8是指向字符串的引用次数。所以:
mov al,[exx] ;则是取字符串的第1个字符。
mov eax,[exx-4] ;则是取字符串的长度
mov eax,[exx-8] ;则是取字符串的引用次数。
雪    币: 213
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xf3087 2007-1-6 09:59
5
0
明白了....谢谢

您的回帖就是偶们学习的动力啊
游客
登录 | 注册 方可回帖
返回