rand_s と RtlGenRandom その2

以前の記事の続きです。

rand_s と RtlGenRandom

RtlGenRandomをプログラム内で使用したときに、Visual Studio 2005や 2008のランタイムが SystemFunction036 をコールしてクラッシュするメカニズムを紹介します。

sf
これはSafariなのですが、 advapi32.dllの SystemFunction036を GetProcAddress で取得した後、 0xc000000d の例外で落っこちます。

『C000000D』は、 STATUS_INVALID_PARAMETERな訳ですが。
この呼び出し元のMSVCR80.DLLはVC2005のRuntimeです。

これを fcwinの機能で、ADVAPIXP に強制リンクさせると正常に関数が動作するようになります。

おそらく、MSVCR90.DLL なども同様です。
パッチを当てた MSVCR*.DLLを用意しないといけないので、2000対応のソフトにする場合は、前回紹介した方法の方がスマートですね。

おすすめ

コメントを残す

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