パッチ版win32k.sys の考察とXP版について
海外で、拡張カーネルの win32k.sys にパッチを充てた人が居たので、修正内容とXP版との違いについて考察しました。
変更点は
SUB_LA00024F4: push esp call [ntoskrnl.exe!MmGrowKernelStack] jmp LA00CD50A |
(この関数の呼び出し処理は2か所あります)
XPではどうなってるかを確認してみると・・・。
LBF8A6B0A: push 706D7447h push 00000638h call SUB_LBF810099 // AllocMemory(n) mov esi,eax cmp esi,ebx jz LBF8A6BA3 |
ExAllocatePoolWithTagを使って、メモリを確保して割り当てていました!
つまり、Windows 2000は、XPだと12k使えるカーネルスタックを 10kしか使えない問題があるというわけですね・・・。 ((((・ω・))))これは酷い
ただ、このパッチにはまだ課題があって、該当関数を読んでる部分を2か所修正してるのだけど、類似処理が、実は他にもう1か所あること。他にも、0x63Cのスタックフレームを作成する箇所が0x50バイトのみの消費に改善されていたり、0x828のスタックフレームが半減されてたりするようだ。
Comments