1ヶ月ぶりにカレーライスではまったこと。

多忙の為、キャンプの日記はまた時間を見て続きを書きたいと思います。




備忘録的な意味もかねて、はまってしまった事を書きます。
とあるプロジェクト(プロジェクト名がカレーライス)を作っていて、
開発環境ではうまく動くのに、クライアント環境では動かない!という
よくある現象が起きてしまいました。
大抵、「ライブラリやランタイムが足りない」のが原因なんですが、
何故か今回の場合は、ちゃんとランタイムを入れても動きませんでした。


中身はとあるソフトのプラグインDLLファイルで、
現象は、そのソフトがプラグインDLLを認識しない、といったもの。


どうしても原因が分からないので、OllyDbgで解析して
プラグインをロードする箇所にブレークポイントを仕掛け、
認識するDLLと認識しないDLLの違いを見てみました。


すると、LoadLibraryに成功しているか失敗しているか、という単純明快な違いが分かりました。
そこでいろいろ検索してみると、やはりライブラリ関係のようで、
DLLの依存関係がマズイらしく(MSVCR80.DLLやMSVCP80.DLL関係)、
調べてみると、依存しないビルド法が見つかりました。


MSVCR80.dll/MSVCR90.dllに依存しないようにする方法


早速マルチスレッドに変更して、更に_USRDLLも削除してやりました。
結果!うまくカレーライスが動きました。





最初から依存しないようにしてくれればいいですのに・・・。