人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WINDOWSのDLLのラッパーDLLを作りたいと考えています。例としてGDI32.DLLなどのラッパーです。GDI32.DLLは多くの関数等を持っていますが、そのうちの一部の関数をラップしたいと思っています。例としてTextOutのみをラップする。通常、GDI32.DLLをそのままラップするにはすべてのAPIのインターフェースをラップするDLLに記述する必要がありますが、一部の関数のみをラップする方法はあるでしょうか?

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
✍キーワード:API DLL Windows インターフェース ラッパー
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● makeworld
●27ポイント

この辺が参考になるかもしれません。

run.cppのinject_dll( )で、起動するアプリケーションのgdi32.dll呼び出しの一部を書き換えています。

gdi++.dll


上記サイトの開発者向けドキュメントに記載されていますが、「listexp2.exe」というプログラムで、任意のDLLのスケルトンを作成できるようです。

ただし、VC++ 6.0用なので、VC++ 2005などでコンパイルするには、生成されたxx_dummy.cppファイルの「__declspec( naked )」を「__declspec( naked ) void WINAPI」に置換する必要があるようです。

listexp2.exeにもソースが付いているので、「void WINAPI」付きでスケルトンを出力するように修正した方が速いかもしれません。


2 ● ohmix1
●27ポイント

インポートセクションを操作して任意のAPIをフックすることができます。

http://ruffnex.oc.to/kenji/text/api_hook/

ただし、少々難解でデバッグしずらいため、私もMessageBoxA/Wなどの単純なAPIしかフックしたことありません。

※フック解除せずにフックプログラムが終了するとOSごとハングすることもたるので注意を。


3 ● ardarim
●26ポイント

Microsoft Research製のDetoursというライブラリがお勧めです。

インジェクション専用のAPIで、任意のDLLの任意のAPIを簡単な操作でラップすることが可能です。


あまり使い方を説明した記事等が見つからないのが玉に瑕ですが、API自体は簡単でドキュメントもあり(ただし英語ですが)、サンプルプログラムも豊富なのでそんなに難しくはありません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ