首页
社区
课程
招聘
[求助]GetDlgItemTextA的问题
发表于: 2009-5-11 16:22 6586

[求助]GetDlgItemTextA的问题

2009-5-11 16:22
6586
有如下代码:

  004010FC  /$  55            push    ebp
  004010FD  |.  8BEC          mov     ebp, esp
  004010FF  |.  6A 14         push    14                             ; /Count = 14 (20.)
  00401101  |.  68 80304000   push    00403080                       ; |Buffer = AD_CM#2.00403080
  00401106  |.  68 B80B0000   push    0BB8                           ; |ControlID = BB8 (3000.)
  0040110B  |.  FF75 08       push    dword ptr [ebp+8]              ; |hWnd
  0040110E  |.  E8 77000000   call    <jmp.&USER32.GetDlgItemTextA>  ; \GetDlgItemTextA
  00401113  |.  8BF0          mov     esi, eax
  00401115  |.  8D01          lea     eax, [ecx]
  00401117  |.  83FE 05       cmp     esi, 5                         ;  比较name是否大于等于5个字符,小于则game over
  0040111A  |.  7D 18         jge     short 00401134
  0040111C  |.  6A 40         push    40                             ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
  0040111E  |.  68 12304000   push    00403012                       ; |Title = "ArturDents CrackMe#2"
  00401123  |.  68 44304000   push    00403044                       ; |Text = "Your name must be at least five characters
  long!"

其中“比较name是否大于等于5个字符,小于则game over”的那句指令“cmp     esi, 5”,照这句来看esi中存放的应该是name的长度,esi的值来自eax,但是我实在不知道程序是怎么把name长度赋值给eax的。我对API了解不多,还请高手指教。谢谢!

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
大部分的API返回值就返回在EAX里(这好像是个约定).
MSDN又说:
Return Values
If the function succeeds, the return value specifies the number of TCHARs copied to the buffer, not including the terminating null character.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

.


所以EAX 里就是字符的长度.
至于是如何给EAX的,你可以跟到函数内部看看.
也不知道我说清楚没有.
2009-5-11 17:33
0
雪    币: 261
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
0040110E  |.  E8 77000000   call  //这里就给了啊!
00401113  |.  8BF0          mov     esi, eax   
  00401115  |.  8D01          lea     eax, [ecx]

如果你还想知道跟多可以进
0040110E  |.  E8 77000000   call

看看,不过在汇编里一用那个API,EAX就会被直接附值,也没什么好去深究的!WINDOWS函数太难了!
2009-5-11 17:42
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
也就是说程序调用了API之后,自动向EAX返回字符串的长度。是吗?
2009-5-11 17:45
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=xiaojiam;622045]0040110E  |.  E8 77000000   call  //这里就给了啊!
00401113  |.  8BF0          mov     esi, eax   
  00401115  |.  8D01          lea     eax, [ecx]

如果你...[/QUOTE]

谢谢,我想也就只有这一种可能了。感谢两位大侠指点!!!
2009-5-11 17:46
0
游客
登录 | 注册 方可回帖
返回
//