kernel32.dllがプロセス仮想メモリにロードされることが保証されている場合、windows.hを含めずにSleepなどの関数を呼び出せないのはなぜですか?以下はvividmachine.comからの引用です
5.では、ウィンドウについてはどうでしょうか。必要なDLL関数のアドレスを見つけるにはどうすればよいですか?これらのアドレスは、サービスパックをアップグレードするたびに変更されませんか?
シェルコードで使用する必要のある関数のアドレスを見つける方法はたくさんあります。関数のアドレス指定には2つの方法があります。実行時に目的の機能を見つけるか、ハードコードされたアドレスを使用できます。このチュートリアルでは、主にハードコードされた方法について説明します。シェルコードのアドレス空間にマップされることが保証されている唯一のDLLはkernel32.dllです。このDLLは、エクスプロイトプロセススペースにマップできる関数アドレスを取得するために必要な2つの関数であるLoadLibraryとGetProcAddressを保持します。ただし、この方法には問題があります。アドレスオフセットは、Windowsの新しいリリース(サービスパック、パッチなど)ごとに変更されます。したがって、この方法を使用する場合、シェルコードは特定のバージョンのWindowsでのみ機能します。