• 締切済み

実行ファイルからdllを呼び出す際の情報について

実行ファイル(exe)とdllの各バイナリだけあるとします。 exeがdllを呼び出す際の関数名とパラメータの内容を、外部ツール等で 簡単に参照することはできますでしょうか? 何かしら方法があるなら教えていただけると助かります。

みんなの回答

noname#82346
noname#82346
回答No.3

実行時の API コールの情報が知りたいのであれば汎用のデバッガでブレイクポイントを仕掛けるのが一番簡単です。VC++ でもいいし、windbg みたいな SDK 付属のものでも、とにかくネイティブコードがデバッグできるものなら何でもいいです。 あとは API コールの情報をスパイ/ログするツールが世の中にはあります。ただし、使い方がわりと面倒だったりします。最近のツール事情には詳しくないので具体的な名前は知りませんが、win32 api spy hook とかそんなワードで検索かければ何かしら見つかるでしょう。

noname#82346
noname#82346
回答No.2

VC++ に付属の dumpbin というコンソールアプリで EXE, DLL がインポート/エクスポートしている関数名をダンプできます。 ただし、通常はパラメータの内容を表す情報は関数名に含まれていません。 関数の呼び出し規約によってはパラメータの情報が含まれている場合もありますが、その場合は undname というコンソールアプリで修飾名を変換して可読な文字列に替える必要があります。 このようにして関数名とパラメータ情報が分かったとしても、それを使ってどうこうするのはちと難しいですが。

  • Gab_km
  • ベストアンサー率40% (20/50)
回答No.1

全ての場合に適用できるわけではありませんが、.NET用のAPIビューアが紹介されています。(参考URL)

参考URL:
http://dobon.net/vb/dotnet/links/apiviewer.html
wds32862
質問者

補足

ご回答ありがとうございます。 説明不足でしたが、exeがdllの関数を使ったタイミングで その関数名とパラメータの「値」が知りたいです。

関連するQ&A

  • exeファイルはどのdllを参照すべきか、知っているのでしょうか。

    dllとは、プログラムが実行時に参照するものですよね。 よく使われる機能があらかじめ作られているものですよね。 私はC言語しか知らないので、C言語でプログラミングすることで話を進めさせてください。 (とは言っても、ごく初歩的なプログラムが組めるだけの素人です。) OSはWindowsということにします。 C言語は、関数の集まりでソースが書かれています。 dllも、中身に関数の実体が記述されている、そういうイメージでしょうか。 私がもっと勉強して、複雑なプログラムを組んだりすると、 「あ、これはdllに実体がある機能だから、いちいち実装を書かなくてもいいんだな」 と考えて、ソースファイル( ~.c )の中でその関数を使うだろうと思います。 私がよくわからないのはここからです。 dllにある関数をソースで使って、無事コンパイルして、さあリンクしてexeを作りましょう、 というときに、リンカ(リンクを行うプログラム)は、 「そんな関数、実体がないぞ」 って文句を言ってこないのでしょうか。 いや、リンカは、dllに実体がある関数だということを知っているはず。 でもそれって、いちいち 「この関数はどこどこにある ○○.dll というdllに書いてあります」 というふうに、リンカに教えてあげなくてはいけないのでしょうか。 (それってまさか、ソースに書くわけじゃないですよね? ) それから、 exeファイルっていうのは「この機能はdllに行わせる機能だ」ということを知っているのでしょうか。 dllに行わせる機能だということを知っているとしても、 どのディレクトリにある なんと言う名のdllに その機能が書かれていることまで知っているのでしょうか。 (でもそこまで知っていたら逆に、ディレクトリ構成の違うマシンでは実行できなくなってしまうし。) そういうような原理的なことを教えてください。

  • 実行可能ファイルの同期?

    外部の実行可能ファイル(いわゆるEXE)を実行させるのに shell関数を利用しています。 この関数は非同期に実行してしまうのですが、これを 同期させる方法をご存知の方はいらっしゃいませんでしょうか?

  • ASPからDLLを実行させるには

    ASPからDLLを実行させるにはどう記述すれば良いのでしょうか? 例えば、ASP側でパラメータとDLLをCALLして、そのDLLで処理が行われ復帰値を得る。 上記の内容が記載されているサイトを知っていたら教えてください。

  • 実行ファイルを

    間違ってexeなどを実行してしまわないように 実行ファイルをダブルクリックした際に警告を出してくれるような ツールってないでしょうか?

  • VC++から引数付きexeファイルの実行

    タイトルの通り、VC++から外部ファイルを実行したいのですがどのような関数を使えばよいのでしょうか? exeファイルを実行中は親プロセスであるVCのプログラムの方を止めておきたいのです。 出来ればexeファイルは引数付きで実行したいと思いますので、よろしくお願いします。 開発環境はVisualStudio2005です。

  • 読み込むDLLのディレクトリを変更したい

    Visual C++ 7.1を使用しています。 ライブラリを使って作成したアプリを配布するとき、 一緒にDLLファイルも配布しないと起動できませんよね? 通常は、DLLファイルのパスは実行ファイルと同じか、 system32などのディレクトリに入れなければ 「~~~.dllが見つかりません。」 みたいなエラーが表示されるかと思います。 (違ったらすみません) そうではなく、DLLファイルが10個以上ありますので、 実行ファイルと同じディレクトリだとややこしくなるため、 実行フォルダより1つ下の階層にまとめて置きたいのですが、 そのような事は可能なのでしょうか? できれば、LoadLibraryなどの関数は使わず、 何かしらの設定で出来るのであればそれが望ましいです。 可能でしたら、方法をご伝授いただけると助かります。 よろしくおねがいします。 サンプルですが構成としては以下のような感じです。 (※[ ]はフォルダ名を表します) [Main]  ReadMe.txt  実行ファイル.exe  [Image]   image1.png   image2.png  [Sound]   sound1.wav   sound2.wav  [DLL]   graphics2d.dll   input.dll   sound.dll   file.dll

  • exe形式のファイルがうまく実行できません

    助けてください。exe形式のファイルがうまく実行できません。 exe形式のファイルをダブルクリックすると、"Users\○○○\Desktop\△△△(exeファイル名)"書き込みエラーと出て、WinSFX32Uでインストールできませんでした、となります。 Users\○○○\Desktop\△△△(exeファイル名)"を参照しに行くようですが、Users\○○○\はすでに存在しない古いユーザーのため、参照できない状態と思われます。 古いユーザーアカウントはすでに削除しています。レジストリでオーナー情報も変えていますので、どこかのアプリケーションに古い情報が残っているのでしょうか? このような場合、どうすれば正しい場所を参照しに行くのでしょうか? ちなみに、途中で参照場所を変えることはできません。 ファイルは直接実行しても、一旦Cドライブ直下等に保存しても、結果は同じでした。 ただし、管理者として実行すると動くようです。 OSはVISTAです。 よろしくお願いいたします。

  • シェルコマンドの実行を行いたい

    シェルコマンドの実行は system("***.exe"); で行えますけど、system関数は実行したexeファイルが閉じられるまで処理がとまってしまいますよね? system関数を呼んだ後すぐに処理を返したい時はどうしたらいいのでしょうか。 また、2つ連続で実行ファイルを実行したいときにはどうしたらいいでしょうか。 system("1.exe"); system("2.exe"); これでは1.exeが終了しないと2.exeが起動しません。 バッチファイルでも同じ事になりますよね。 同時に起動したいのです。どうしたらいいのでしょうか、systemで躓いたので、 spawnで試してみました。 #include <process.h> #include <stdio.h> int main(){ spawn(P_NOWAIT,"notepad"); printf("notepadが起動しました。"); return 0; } こうすればnotepadを閉じなくてもprintf文が実行されると思ったのですが、コンパイルすると 未解決の_spawnが_main内で参照されました。 外部参照1が未解決です。 とでます・・。 どなたか解決策を教えてください>< OS:XPです。

  • 実行ファイルに値を渡す方法

    実行ファイル(EXE)に実行時にパラメータとして値を渡したいのですが、方法がわかりません。 コマンドライン引数を使用するのでしょうか?

  • 外部プログラムを実行させ、復帰値を取得したい

    いつもお世話になっています。 現在はCでdllを作成していて、Cで作成された外部プログラム(Exe)にパラメータ付で実行させ、その外部プログラムから出力される復帰値を取得したいのです。 (図) char *Prm; 開始 ⇒ <<DLL,Prm>> → <<Prm,EXE>>      復帰値を取得 ←  復帰値 自分なりに調べた(MSDN等)のは_spawn系関数を使用するのではと感じているのですが、あまりよく理解できないでいます。 大変お手数ですが、どうかよろしくお願いします。 その間、再度MSDN等のサンプルを解析しながら理解しようと試みたいと思います。

専門家に質問してみよう