请问有谁知道call 00401630代码的含义,它是如何计算出长度的?
代码如下:
004010BD 8D85 48FFFFF>lea eax,dword ptr ss:[ebp-B8] ; 用户名(ASCII "pediy")
004010C3 50 push eax
004010C4 E8 67050000 call 00401630 ; 计算用户名的长度
004010C9 59 pop ecx ; 返回用户名长度 eax=5
004010CA 8945 D8 mov dword ptr ss:[ebp-28],eax
CALL 00401630:
00401630 8B4424 04 mov eax,dword ptr ss:[esp+4]
00401634 A8 03 test al,3
00401636 75 2D jnz short 00401665
00401638 8B10 mov edx,dword ptr ds:[eax]
0040163A 83C0 04 add eax,4
0040163D 8BCA mov ecx,edx
0040163F 81EA 0101010>sub edx,1010101 ; ASCII "[ "
00401645 81E2 8080808>and edx,80808080
0040164B ^ 74 EB je short 00401638
0040164D F7D1 not ecx
0040164F 23D1 and edx,ecx
00401651 ^ 74 E5 je short 00401638
00401653 84D2 test dl,dl
00401655 75 28 jnz short 0040167F
00401657 84F6 test dh,dh
00401659 75 25 jnz short 00401680
0040165B F7C2 0000FF0>test edx,0FF0000
00401661 75 1E jnz short 00401681
00401663 EB 1D jmp short 00401682
00401665 83C0 04 add eax,4
00401668 F640 FC FF test byte ptr ds:[eax-4],0FF
0040166C 74 11 je short 0040167F
0040166E F640 FD FF test byte ptr ds:[eax-3],0FF
00401672 74 0C je short 00401680
00401674 F640 FE FF test byte ptr ds:[eax-2],0FF
00401678 74 07 je short 00401681
0040167A 48 dec eax
0040167B 24 FC and al,0FC
0040167D ^ EB B9 jmp short 00401638
0040167F 48 dec eax
00401680 48 dec eax
00401681 48 dec eax
00401682 8B4C24 04 mov ecx,dword ptr ss:[esp+4]
00401686 48 dec eax
00401687 2BC1 sub eax,ecx
00401689 C3 retn
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课