首页
社区
课程
招聘
[旧帖] [求助]lstrlenA问题 0.00雪花
发表于: 2007-6-19 22:12 6910

[旧帖] [求助]lstrlenA问题 0.00雪花

2007-6-19 22:12
6910
00401163   >  8D15 49634000 lea     edx, dword ptr [406349]
  00401169   .  52            push    edx                              ; /String => "j与zi>"
  0040116A   .  E8 8D020000   call    <jmp.&kernel32.lstrlenA>         ; \lstrlenA   去除用户名的第一位字符,该串设了A
  0040116F   .  8BE8          mov     ebp, eax
  00401171   .  B9 05000000   mov     ecx, 5                           ;  循环计数器
  00401176   .  33F6          xor     esi, esi

0040116A 怎么调用lstrlenA就去除用户名的第一位字符?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
lstrlenA函数只是取字符串的长度用的,不会去除用户名的第一位字符。
2007-6-20 08:01
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我在调试的时候也发现了,会去除用户名的第一位字符 就是edx指向的ASCII串edx, dword ptr [406349]。
2007-6-20 08:55
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我看的调试的是这个作者说的。http://bbs.pediy.com/showthread.php?t=40997
谢谢小虾兄弟帮忙
2007-6-20 08:57
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵,只是求长度的
2007-6-20 09:31
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
找到答案了。^_^谢谢各位
我的系统是 xp/sp2, 下面是 kernel32!lstrlenA 函数的主要部分:

7C80BDB6 > 6A 08            PUSH 8
7C80BDB8   68 F0BD807C      PUSH kernel32.7C80BDF0
7C80BDBD   E8 0467FFFF      CALL kernel32.7C8024C6
7C80BDC2   8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]
7C80BDC5   85C0             TEST EAX,EAX
7C80BDC7   0F84 68A80200    JE kernel32.7C836635
7C80BDCD   8365 FC 00       AND DWORD PTR SS:[EBP-4],0
7C80BDD1   8D50 01          LEA EDX,DWORD PTR DS:[EAX+1]  ;* 这里给 edx 设置值
7C80BDD4   8A08             MOV CL,BYTE PTR DS:[EAX]
7C80BDD6   40               INC EAX
7C80BDD7   84C9             TEST CL,CL
7C80BDD9  ^75 F9            JNZ SHORT kernel32.7C80BDD4
7C80BDDB   2BC2             SUB EAX,EDX    ;* 依此计算字符串长度
7C80BDDD   834D FC FF       OR DWORD PTR SS:[EBP-4],FFFFFFFF
7C80BDE1   E8 1B67FFFF      CALL kernel32.7C802501
7C80BDE6   C2 0400          RETN 4

由于上面的取当前字符后给 EAX 增 1 了, 所以, 遇到了结束字节 00 时, EAX 指向了 00 的下一个字符. 为了使得长度准确, 同样起始地址 (EDX) 也要增 1, 所以才有 lea edx, [eax+1]. 当然了, 也可以有其它的计算方法, 只是 ms 选择了这个方法而已.
2007-6-20 12:30
0
游客
登录 | 注册 方可回帖
返回
//