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でもパスを扱う場合発生する可能性がある。
最近のコンパイラは優秀なので…。
いまだに奇数をワード以上でアクセス出来る所が不思議ですね。