Windows 2000の NTOSKERNEL.EXE に無い 関数を退避する

Windows 2000のコアカーネルに無い関数でよく自前で処理する関数のメモです。

WINAPI _alldvrm(a,b,c,d);
WINAPI _aulldvrm(a,b,c,d);
WINAPI _vsnwprintf(a,b,c,d);


_alldvrm:

 57                                push    edi
 56                                push    esi
 55                                push    ebp
 33FF                              xor    edi,edi
 33ED                              xor    ebp,ebp
 8B442414                          mov    eax,[esp+14h]
 0BC0                              or    eax,eax
 7D15                              jge    L1
 47                                inc    edi
 45                                inc    ebp
 8B542410                          mov    edx,[esp+10h]
 F7D8                              neg    eax
 F7DA                              neg    edx
 83D800                            sbb    eax,00000000h
 89442414                          mov    [esp+14h],eax
 89542410                          mov    [esp+10h],edx
                          L1:
 8B44241C                          mov    eax,[esp+1Ch]
 0BC0                              or    eax,eax
 7D14                              jge    L2
 47                                inc    edi
 8B542418                          mov    edx,[esp+18h]
 F7D8                              neg    eax
 F7DA                              neg    edx
 83D800                            sbb    eax,00000000h
 8944241C                          mov    [esp+1Ch],eax
 89542418                          mov    [esp+18h],edx
                          L2:
 0BC0                              or    eax,eax
 7528                              jnz    L3
 8B4C2418                          mov    ecx,[esp+18h]
 8B442414                          mov    eax,[esp+14h]
 33D2                              xor    edx,edx
 F7F1                              div    ecx
 8BD8                              mov    ebx,eax
 8B442410                          mov    eax,[esp+10h]
 F7F1                              div    ecx
 8BF0                              mov    esi,eax
 8BC3                              mov    eax,ebx
 F7642418                          mul    [esp+18h]
 8BC8  &nbs
p;                           mov    ecx,eax
 8BC6                              mov    eax,esi
 F7642418                          mul    [esp+18h]
 03D1                              add    edx,ecx
 EB47                              jmp    L4
                          L3:
 8BD8                              mov    ebx,eax
 8B4C2418                          mov    ecx,[esp+18h]
 8B542414                          mov    edx,[esp+14h]
 8B442410                          mov    eax,[esp+10h]
                          L5:
 D1EB                              shr    ebx,1
 D1D9                              rcr    ecx,1
 D1EA                              shr    edx,1
 D1D8                              rcr    eax,1
 0BDB                              or    ebx,ebx
 75F4                              jnz    L5
 F7F1                              div    ecx
 8BF0                              mov    esi,eax
 F764241C                          mul    [esp+1Ch]
 8BC8                              mov    ecx,eax
 8B442418                          mov    eax,[esp+18h]
 F7E6                              mul    esi
 03D1                              add    edx,ecx
 720E                              jc     L6
 3B542414                          cmp    edx,[esp+14h]
 7708                              ja     L6
 720F                              jc     L7
 3B442410                          cmp    eax,[esp+10h]
 7609                              jbe    L7
                          L6:
 4E                                dec    esi
 2B442418                          sub    eax,[esp+18h]
 1B54241C                          sbb    edx,[esp+1Ch]
                          L7:
 33DB                              xor    ebx,ebx
                          L4:
 2B442410                          sub    eax,[esp+10h]
 1B542414                          sbb    edx,[esp+14h]
 4D                                dec    ebp
 7907                              jns    L8
 F7DA          &nb
sp;                   neg    edx
 F7D8                              neg    eax
 83DA00                            sbb    edx,00000000h
                          L8:
 8BCA                              mov    ecx,edx
 8BD3                              mov    edx,ebx
 8BD9                              mov    ebx,ecx
 8BC8                              mov    ecx,eax
 8BC6                              mov    eax,esi
 4F                                dec    edi
 7507                              jnz    L9
 F7DA                              neg    edx
 F7D8                              neg    eax
 83DA00                            sbb    edx,00000000h
                          L9:
 5D                                pop    ebp
 5E                                pop    esi
 5F                                pop    edi
 C21000                            retn    0010h

_aulldvrm:

 56                                push    esi
 8B442414                          mov    eax,[esp+14h]
 0BC0                              or    eax,eax
 7528                              jnz    L1
 8B4C2410                          mov    ecx,[esp+10h]
 8B44240C                          mov    eax,[esp+0Ch]
 33D2                              xor    edx,edx
 F7F1                              div    ecx
 8BD8                              mov    ebx,eax
 8B442408                          mov    eax,[esp+08h]
 F7F1                              div    ecx
 8BF0                              mov    esi,eax
 8BC3                              mov    eax,ebx
 F7642410                          mul    [esp+10h]
 8BC8                              mov    ecx,eax
 8BC6                              mov    eax,esi
 F7642410                          mul    [esp+10h]
 03D1                              add    edx,ecx
 EB47                              jmp    L2
                          L1:
 8BC8                              mov    ecx,eax
 8B5C2410       &nb
sp;                  mov    ebx,[esp+10h]
 8B54240C                          mov    edx,[esp+0Ch]
 8B442408                          mov    eax,[esp+08h]
                          L3:
 D1E9                              shr    ecx,1
 D1DB                              rcr    ebx,1
 D1EA                              shr    edx,1
 D1D8                              rcr    eax,1
 0BC9                              or    ecx,ecx
 75F4                              jnz    L3
 F7F3                              div    ebx
 8BF0                              mov    esi,eax
 F7642414                          mul    [esp+14h]
 8BC8                              mov    ecx,eax
 8B442410                          mov    eax,[esp+10h]
 F7E6                              mul    esi
 03D1                              add    edx,ecx
 720E                              jc     L4
 3B54240C                          cmp    edx,[esp+0Ch]
 7708                              ja     L4
 720F                              jc     L5
 3B442408                          cmp    eax,[esp+08h]
 7609                              jbe    L5
                          L4:
 4E                                dec    esi
 2B442410                          sub    eax,[esp+10h]
 1B542414                          sbb    edx,[esp+14h]
                          L5:
 33DB                              xor    ebx,ebx
                          L2:
 2B442408                          sub    eax,[esp+08h]
 1B54240C                          sbb    edx,[esp+0Ch]
 F7DA                              neg    edx
 F7D8                              neg    eax
 83DA00                            sbb    edx,00000000h
 8BCA                              mov    ecx,edx
 8BD3                              mov    edx,ebx
 8BD9                              mov    ebx,ecx
 8BC8                              mov    ecx,eax
 8BC6                              mov    eax,esi
 5E                                pop    esi
 C21000    &nbs
p;                       retn    0010h

_vsnwprintf

            push DWORD PTR[esp+4]
            push DWORD PTR[esp+4]
            push DWORD PTR[esp+4]
            mov eax,DWORD PTR[esp+4]
            push DWORD PTR[eax]
            call DWORD PTR[_snwprintf]
            retn 0x10

多分、この辺りの置換で動くはず。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です