Windows 2000 のLoadLibrary のバグ

Windows 2000の API  LoadLibrary をフルパスで指定したときに、スタックポインタが4の倍数じゃないと、必ず失敗するバグを発見した。

DWORD KP2, KP3;
char KP4[]="c:\\winnt\\system32\\ntdll.dll";
void main(){
    _asm{
          push    ebp
          mov    ebp,esp
          sub    esp,0000123h
         push offset KP4
        call    DWORD PTR LoadLibraryA
        mov KP2,eax
        leave
        push offset KP4
        call    DWORD PTR LoadLibraryA
        mov KP3,eax
    }
    return;
}

たとえば、このケースでは最初の LoadLibrary には失敗するが、2回目は成功する。
なお、Windows 7ではこのバグは発生しない。

このバグ。別のAPIでもパスを扱う場合発生する可能性がある。

おすすめ

1件の返信

  1. yoka より:

    最近のコンパイラは優秀なので…。
    いまだに奇数をワード以上でアクセス出来る所が不思議ですね。

コメントを残す

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