Windows 2000のShell_NotifyIcon を解析してみた
前回の記事の続き
魔改造版Win2000でXPのタスクマネージャを動かすには?
mov ebx,[ebp+0Ch] // NOTIFYICONDATAW mov ecx,000000EBh xor eax,eax lea edi,[ebp-000003C0h] mov [ebp-000003C4h],esi mov [ebp-04h],esi rep stosd mov ecx,[ebx] mov eax,000003A8h // cbSize cmp ecx,eax jnz L73B181B8 mov dword ptr [ebp+0Ch],0000001Fh jmp L73B181C4 L73B181B8: mov ecx,00000098h mov dword ptr [ebp+0Ch],00000007h |
これを見ると、 936byte(0x3a8) じゃなかった場合 構造体サイズを 152byte 決め打ちにして転送してることが分かる(0x98)
ANSI 版をみてみよう
push esi mov esi,[ebp+0Ch] // NOTIFYICONDATAA push edi mov ecx,000000EAh xor eax,eax lea edi,[ebp-000003A8h] rep stosd mov eax,[esi+04h] cmp dword ptr [esi],000001E8h mov [ebp-000003A4h],eax mov eax,[esi+08h] mov [ebp-000003A0h],eax mov eax,[esi+0Ch] mov [ebp-0000039Ch],eax mov eax,[esi+10h] mov [ebp-00000398h],eax mov eax,[esi+14h] mov dword ptr [ebp-000003A8h],000003A8h mov [ebp-00000394h],eax jnz L73B182E7 |
汚いコードだな(汗)
こっちは488byte (0x1e8)とcbSize を比較して違ってたら、 0x88 決め打ちらしい。
では修正してみよう
mov ebx,[ebp+0Ch] // NOTIFYICONDATAW mov ecx,000000EBh xor eax,eax lea edi,[ebp-000003C0h] mov [ebp-000003C4h],esi mov [ebp-04h],esi rep stosd mov eax,[ebx] mov ecx,000003A8h // cbSize cmp ecx,eax ja L73B181B8 mov dword ptr [ebp+0Ch],0000001Fh jmp L73B181C4 L73B181B8: mov ecx,00000098h mov dword ptr [ebp+0Ch],00000007h |
Unicode 版 サイズが936byte(0x3a8) 以上だったら、そっちを使うように変更
push esi mov esi,[ebp+0Ch] // NOTIFYICONDATAA push edi mov ecx,000000EAh xor eax,eax lea edi,[ebp-000003A8h] rep stosd mov eax,[esi+04h] cmp dword ptr [esi],000001E8h mov [ebp-000003A4h],eax mov eax,[esi+08h] mov [ebp-000003A0h],eax mov eax,[esi+0Ch] mov [ebp-0000039Ch],eax mov eax,[esi+10h] mov [ebp-00000398h],eax mov eax,[esi+14h] mov dword ptr [ebp-000003A8h],000003A8h mov [ebp-00000394h],eax jb L73B182E7 mov eax,[esi+00000098h] mov [ebp-00000290h],eax mov eax,[esi+0000009Ch] mov [ebp-0000028Ch],eax mov eax,[esi+000001A0h] mov [ebp-00000088h],eax mov eax,[esi+000001E4h] mov [ebp-04h],eax jmp L73B182F8 L73B182E7: and dword ptr [e bp-0000039Ch],00000007h mov dword ptr [ebp-000003A8h],00000098h |
こっちはこれだけ・ω・
Comments