.text:10002E80 sub_10002E80 proc near ; CODE XREF: IAccuMeet::DebugIn(char const *,...)+2Fp
.text:10002E80 ; IAccuMeet::DebugOut(char const *,...)+2Fp ...
.text:10002E80
.text:10002E80 var_80C = dword ptr -80Ch
.text:10002E80 var_804 = dword ptr -804h
.text:10002E80 OutputString = byte ptr -800h
.text:10002E80 var_400 = dword ptr -400h
.text:10002E80 arg_0 = dword ptr 4
.text:10002E80 arg_4 = dword ptr 8
.text:10002E80
.text:10002E80 sub esp, 804h
.text:10002E86 lea eax, [esp+804h+var_804]
.text:10002E8A push ebx
.text:10002E8B push esi
.text:10002E8C push edi
.text:10002E8D push eax
.text:10002E8E call sub_1000CDF2 ; [esp+arg_0]存放的是时间
.text:10002E93 mov edx, [esp+810h+arg_0] ; 格式
.text:10002E9A lea ecx, [esp+810h+arg_4] ; 地址,需要格式化转换的数据的地址
.text:10002EA1 push ecx
.text:10002EA2 push edx
.text:10002EA3 lea eax, [esp+818h+var_400] ; 参数3 字符串地址
.text:10002EAA push 3FFh
.text:10002EAF push eax
.text:10002EB0 call __vsnprintf
.text:10002EB5 mov edi, offset asc_1001AA48 ; "\r\n"
.text:10002EBA or ecx, 0FFFFFFFFh
.text:10002EBD xor eax, eax
.text:10002EBF add esp, 10h
.text:10002EC2 repne scasb
.text:10002EC4 not ecx
.text:10002EC6 sub edi, ecx
.text:10002EC8 lea edx, [esp+810h+var_400]
.text:10002ECF mov esi, edi
.text:10002ED1 mov ebx, ecx
.text:10002ED3 mov edi, edx
.text:10002ED5 or ecx, 0FFFFFFFFh
.text:10002ED8 repne scasb
.text:10002EDA mov ecx, ebx
.text:10002EDC dec edi
.text:10002EDD shr ecx, 2
.text:10002EE0 rep movsd
.text:10002EE2 mov ecx, ebx
.text:10002EE4 push eax
.text:10002EE5 and ecx, 3
.text:10002EE8 rep movsb
.text:10002EEA lea ecx, [esp+814h+var_804]
.text:10002EEE call sub_1000CE05
.text:10002EF3 mov esi, [eax]
.text:10002EF5 push 0
.text:10002EF7 lea ecx, [esp+814h+var_804]
.text:10002EFB call sub_1000CE05
.text:10002F00 mov edi, [eax+4]
.text:10002F03 push 0
.text:10002F05 lea ecx, [esp+814h+var_804]
.text:10002F09 call sub_1000CE05
.text:10002F0E mov eax, [eax+8]
.text:10002F11 push esi
.text:10002F12 push edi
.text:10002F13 push eax
.text:10002F14 lea eax, [esp+81Ch+OutputString]
.text:10002F18 push offset a02d02d02d ; "<%02d:%02d:%02d> "
.text:10002F1D push eax
.text:10002F1E call _sprintf
.text:10002F23 lea edi, [esp+824h+var_400]
.text:10002F2A or ecx, 0FFFFFFFFh
.text:10002F2D xor eax, eax
.text:10002F2F add esp, 14h
.text:10002F32 repne scasb
.text:10002F34 not ecx
.text:10002F36 sub edi, ecx
.text:10002F38 lea edx, [esp+810h+OutputString]
.text:10002F3C mov esi, edi
.text:10002F3E mov ebx, ecx
.text:10002F40 mov edi, edx
.text:10002F42 or ecx, 0FFFFFFFFh
.text:10002F45 repne scasb
.text:10002F47 mov ecx, ebx
.text:10002F49 dec edi
.text:10002F4A shr ecx, 2
.text:10002F4D rep movsd
.text:10002F4F mov ecx, ebx
.text:10002F51 lea eax, [esp+810h+OutputString]
.text:10002F55 and ecx, 3
.text:10002F58 push eax ; lpOutputString
.text:10002F59 rep movsb
.text:10002F5B call ds:OutputDebugStringA
.text:10002F61 mov eax, dword_1001F42C
.text:10002F66 inc eax
.text:10002F67 mov dword_1001F42C, eax
.text:10002F6C cdq
.text:10002F6D mov ecx, 64h
.text:10002F72 mov esi, ds:SendMessageA
.text:10002F78 idiv ecx
.text:10002F7A mov ebx, ds:GetWindowTextLengthA
.text:10002F80 test edx, edx
.text:10002F82 jnz short loc_10002FC0
.text:10002F84 mov eax, hWnd
.text:10002F89 test eax, eax
.text:10002F8B jz short loc_10002FC0
.text:10002F8D push eax ; hWnd
.text:10002F8E call ebx ; GetWindowTextLengthA
.text:10002F90 cmp eax, 61A8h
.text:10002F95 jle short loc_10002FC0
.text:10002F97 mov edx, hWnd
.text:10002F9D push 1388h ; lParam
.text:10002FA2 push 0 ; wParam
.text:10002FA4 push 0B1h ; Msg
.text:10002FA9 push edx ; hWnd
.text:10002FAA call esi ; SendMessageA
.text:10002FAC mov eax, hWnd
.text:10002FB1 push offset unk_1001F430 ; lParam
.text:10002FB6 push 0 ; wParam
.text:10002FB8 push 0C2h ; Msg
.text:10002FBD push eax ; hWnd
.text:10002FBE call esi ; SendMessageA
.text:10002FC0
.text:10002FC0 loc_10002FC0: ; CODE XREF: sub_10002E80+102j
.text:10002FC0 ; sub_10002E80+10Bj ...
.text:10002FC0 mov eax, dword_1001F42C
.text:10002FC5 mov ecx, 3E8h
.text:10002FCA cdq
.text:10002FCB idiv ecx
.text:10002FCD test edx, edx
.text:10002FCF jnz short loc_10002FE8
.text:10002FD1 mov ecx, dword_1001F420
.text:10002FD7 mov dword_1001F42C, edx
.text:10002FDD test ecx, ecx
.text:10002FDF jz short loc_1000300F
.text:10002FE1 mov edx, [ecx]
.text:10002FE3 push 0
.text:10002FE5 call dword ptr [edx+2Ch]
.text:10002FE8
.text:10002FE8 loc_10002FE8: ; CODE XREF: sub_10002E80+14Fj
.text:10002FE8 mov edx, dword_1001F420
.text:10002FEE test edx, edx
.text:10002FF0 jz short loc_1000300F
.text:10002FF2 lea edi, [esp+810h+OutputString]
.text:10002FF6 or ecx, 0FFFFFFFFh
.text:10002FF9 xor eax, eax
.text:10002FFB push ebp
.text:10002FFC repne scasb
.text:10002FFE mov ebp, [edx]
.text:10003000 lea eax, [esp+814h+OutputString]
.text:10003004 not ecx
.text:10003006 dec ecx
.text:10003007 push ecx
.text:10003008 push eax
.text:10003009 mov ecx, edx
.text:1000300B call dword ptr [ebp+38h]
.text:1000300E pop ebp
.text:1000300F
.text:1000300F loc_1000300F: ; CODE XREF: sub_10002E80+15Fj
.text:1000300F ; sub_10002E80+170j
.text:1000300F mov eax, hWnd
.text:10003014 test eax, eax
.text:10003016 jz short loc_1000303F
.text:10003018 push eax ; hWnd
.text:10003019 call ebx ; GetWindowTextLengthA
.text:1000301B mov ecx, hWnd
.text:10003021 push eax ; lParam
.text:10003022 push eax ; wParam
.text:10003023 push 0B1h ; Msg
.text:10003028 push ecx ; hWnd
.text:10003029 call esi ; SendMessageA
.text:1000302B mov eax, hWnd
.text:10003030 lea edx, [esp+10h]
.text:10003034 push edx ; lParam
.text:10003035 push 0 ; wParam
.text:10003037 push 0C2h ; Msg
.text:1000303C push eax ; hWnd
.text:1000303D call esi ; SendMessageA
.text:1000303F
.text:1000303F loc_1000303F: ; CODE XREF: sub_10002E80+196j
.text:1000303F pop edi
.text:10003040 pop esi
.text:10003041 pop ebx
.text:10003042 add esp, 804h
.text:10003048 retn
.text:10003048 sub_10002E80 endp ; sp = -8
这是一个编码函数,我看了一整天,但是确实能力有限,求教哪个大牛给小弟解释一下这个函数到底是做什么的,越详细越好。小弟先行谢过!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!