rand_s と RtlGenRandom その2
以前の記事の続きです。
RtlGenRandomをプログラム内で使用したときに、Visual Studio 2005や 2008のランタイムが SystemFunction036 をコールしてクラッシュするメカニズムを紹介します。
これはSafariなのですが、 advapi32.dllの SystemFunction036を GetProcAddress で取得した後、 0xc000000d の例外で落っこちます。
『C000000D』は、 STATUS_INVALID_PARAMETERな訳ですが。
この呼び出し元のMSVCR80.DLLはVC2005のRuntimeです。
これを fcwinの機能で、ADVAPIXP に強制リンクさせると正常に関数が動作するようになります。
おそらく、MSVCR90.DLL なども同様です。
パッチを当てた MSVCR*.DLLを用意しないといけないので、2000対応のソフトにする場合は、前回紹介した方法の方がスマートですね。
Comments