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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/11/03 22:10:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:makeworld No.1

回答回数75ベストアンサー獲得回数23

ポイント27pt

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

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」付きでスケルトンを出力するように修正した方が速いかもしれません。

id:ohmix1 No.2

回答回数235ベストアンサー獲得回数14

ポイント27pt

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

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

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

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

id:ardarim No.3

回答回数897ベストアンサー獲得回数145

ポイント26pt

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

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


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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません