忍者ブログ
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール
HN:
[-_-;] (みかん)
性別:
男性
趣味:
プログラミング、XOPS
自己紹介:
中部地方在住です。
最新コメント
[11/30 NONAME]
[11/22 NONAME]
[09/24 NONAME]
[06/10 NONAME]
[01/29 NONAME]
XOPS関連サイト「みかん箱」の運営や、OpenXOPSの開発などを行う[-_-;](みかん)のブログ。近状報告や独り言などを書きます。
Prev Month123456789101112131415161718192021222324252627282930Next Month
ezds.dllの正体
毎年この時期になると花粉症と非常に似た症状が出て困っています。
もう確実に花粉症なんでしょうけど。


XOPSユーザーならおなじみの「ezds.dll」。
XOPS本体のexeファイルと同じディレクトリにあるファイルで、XOPSの動作に必要な
システムファイルです。
既に皆さんご存じの通り、これがないと「dll load failed」とエラーが出て起動できません。

MOD制作が活発なXOPSは、dataフォルダもexe本体も様々な人が解析を行って手を
入れていますが、このezds.dllだけは誰もまともに触っていないようです。
今回、これが何なのか、改造する余地があるのか 探検してみました。
拡張子から分かるように、これはDLL(ダイナミックリンクライブラリ)です。
詳細は後で触れますが、結論から言えばこのDLLはnine-two氏自身が作成した
「EASY DIRECT SOUND」というものです。
名前からして、サウンド再生に使用するDirectSoundのラッパーでしょう。
XOPSのサウンドは、全てコイツ(ezds.dll)が鳴らしている可能性が高いです。
すなわち、ezds.dllは ゲーム音の再生 という重要な役割を担っているかもです。

DLLなので、Visual Studioに標準で入っている「DUMPBIN ユーティリティ」を使って
みます。Visual Studioのコマンドプロンプトを立ち上げ、XOPSのディレクトリに移動
した後、dumpbinを実行して確認します。
 dumpbin /exports ezds.dll
DLLが扱っている定義(関数)が解析できます。
ここで判明したことは、オフライン版の0.96とオンライン版の1.9は、外見は同じDLL
(ezds.dll)でも異なるバージョンが使われているということです。
私が色々なXOPSバージョンを確認した結果、今回は2種類確認できました。
対応表は後でのちほど書きます。
・ver 0.3
  DSend
  DSinit
  DSload
  DSloadL
  DSloopOPE
  DSplay
  DSver
・ver 0.4
  DSend
  DSinit
  DSload
  DSplay
  DSrelease
  DSver
ご覧の通り、定義されているものが全く違います。
外見では分かりませんが、それぞれ異なるDLLファイルなのです。

定義の命名規則から、自分の経験と勘で予想してみます。当たってるかな?
 DSver : ライブラリのバージョン情報?
 DSinit : ライブラリ初期化?
 DSrelease : ライブラリ解放?
 DSload : waveファイル読み込み?
 DSplay : waveファイル再生?

それぞれの定義が何なのか、偽物DLLを作って乗っ取ってみたり(怖w) して、
仕様を調べようと色々やりましたが駄目でした。
XOPS本体(exe)とDLLの双方を解析して見比べていくようなことをしないと、
分かりません。 今の自分にはそんな技術はありません。
ただ1つ、どちらにも定義されている「DSver」のみ、偶然動作を確認できました。
以下、C++(実質的にC言語)のコードです。
    #include <windows.h>
    void main()
    {
        HINSTANCE lib;
        lib = LoadLibrary("ezds.dll");
        if (lib == NULL){
            printf("DLL open failed\n");
            return;
        }
        FARPROC ver = GetProcAddress(lib, "DSver");
        printf("ver : %s\n", ver());
        FreeLibrary(lib);
    }

DLLのバージョン情報を返してくるようです。
引数は無し、戻り値は文字列ポインタでフォーマットは
 「EASY DIRECT SOUND / ver 0.x / by nine-two」
です。 「x」にバージョン番号(3or4)が入ります。

上記のコードで、私の手元にあるXOPSのバージョンを片っ端から調べてみました。
対応表として書いておきます。
 オフライン版
   ・0.90 : ver0.3
   ・0.93 : ver0.3
   ・0.96 : ver0.4
 オンライン版
   ・1.6 : ver0.3
   ・1.7 : ver0.3
   ・1.8 : ver0.3
   ・1.9 : ver0.3
こう見てみると、不自然なほどに0.96のみにver0.4が使用されています。
なぜ2006年に公開した0.96のver0.4を、同年公開の1.8や、それから4年も過ぎた
2010年公開の1.9には使用せず 旧バージョンのver0.3を採用したのでしょうか?
ver0.3には、オンライン版に都合の良い機能とか提供されているのでしょうか?

別に特別募集もしませんが、ezds.dllについて何か知っている人は教えてください。
category : XOPS ・ ゲーム について comment [0]
PR
COMMENTS
【本文以外は任意項目です】
SUBJECT(タイトル)
NAME(お名前)
MAIL(メールアドレス)
HOME(サイトURL)
COMMENT(本文)
PASS(削除パスワード)
Secret?(管理者へのみ表示)

※スパム防止のため「Hello!」「website」「ブランド」「みかんの戦闘ブログ」
「http」などの一部キーワードを禁止しています。ご了承ください。

※過去のブログ記事は 原則として編集・修正していません。
 各記事の内容は投稿時のものであり、現在では異なる場合があります。
 最新の情報は、関係する内容について書かれた 最新の記事をご覧ください。

TOP