• 締切済み

関数の引数を知るには?

実行ファイルからあるDLLが呼び出されているのですが、 そのDLLの関数を呼び出す際にどんな引数を使っているか 知りたいのですが、どうすればよろしいでしょうか? (ちなみにDLLはWindowsのものではありません)

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>私はできない理由をお聞きしているのではなく、やる方法 >(手段とそれに必要な知識・時間など)をお聞きしたいのです。 >それと、私がもし使うことによる責任を負っているのだとすれば、 >同時に使わないことによる責任も負うことにもなりますので、 >その点はご勘案頂いた上でご回答頂けると嬉しいです。 かなり無茶を言っていますね。 私があなたの立場であれば、間違いなく使わせません。 同機能の別のモジュールを探す、もしくは新規で開発させます。 使えるかどうかも分からないようなシロモノで動かせ!と部下に命令しているようなものですから。 また、関数の引数を調べるのに固執しているようですが、 ライブラリを使うのに関数の引数だけ分かっても無理ですよ。 引数の意味、関数の呼び出し順序、関数の呼び出し方(呼び出し規約)、フラグ等に使用される定数値、戻り値の意味など、引数のほかにも必要な情報はたくさんあります。 >私はプログラムにはそれほど詳しくはないので恐縮ですが、 ライブラリを使用するにあたって最低限必要なものくらい知っていないと問題があります。 DLL、LIB、ヘッダー、仕様書。 これらは必須です。 あとは、動作保証。これがないライブラリなんて怖くて使えません。 それほどまでに利用したいのであれば、なぜライブラリの提供者に確認を取らないのですか? >例えば逆アセンブルやメッセージの取得など、 >いくつか実現するための手段はあるはずです。 逆アセンブルなら分かるんじゃないでしょうかね? やったことないんで分かりません。というか、私はアセンブラわかりません。 関数呼び出し時に引数をスタックに積むところや、関数側での引数の取り出しのところを見れば出来そうな気はしますけど。 ただし、逆アセンブルすることをライブラリの作成者によって許されていないとだめですけどね。 メッセージの取得というのは私にはわかりません。 >いくら引数の型の見分けがつかないといっても、 >ある程度統一されたフォーマットで作成しているはずですから、 >他の関数からの類推は可能だと思っております。 すごい自身をお持ちですね。 構造体が使われていないことを祈りましょう。 あと、特別な意味を持った定数も。 一応参考になるかと思われるページです。 引数の調べ方ではなく、関数のコールの仕方です。 Googleのキャッシュですが。 http://216.239.39.100/search?q=cache:aFX38tbwXnMC:www.geocities.co.jp/SiliconValley-Cupertino/5873/special/2001_10_11/page10.html+%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF+%E9%96%A2%E6%95%B0+%E5%BC%95%E6%95%B0+%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9+dll&hl=ja&lr=lang_ja&ie=UTF-8

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>件のEXEファイル・DLLは仕様書もソースファイルもなく、 >半ばブラックボックス化しております。 >関数名とそれがどのような機能を持っているかに >ついては大体分かっているのですが、 >それ以上の細かい仕様については見当がつきません。 それは”使えない”と言っているようなものですが・・・ 引数は、DLL内の関数を使うにあたって最低限必要な情報です。 ヘッダファイルすら存在しないものは論外だと思います。 それに、そんな使い方をして誰が動作の保証をするのでしょう?使ってしまったあなたということになりません? >また、もし直接DLLをいじる等してわかったとしても、引数の個数、それぞれのデータサイズくらいまでしかわからないでしょう。 これの意味を誤解されているようで。 データサイズまでしかわからない(分かったとしても)というところに大きな問題があります。 たとえば、32bitのDLLでは、LONG型は32bit、LONG * も32ビット、ハンドル値も32bit、構造体のアドレスも32bitです。つまり、区別がつかないということです。 仮に調べられたとしても、32bitのデータサイズの引数が3つということがわかってもどうしようもないですよね。

take_777
質問者

補足

私はできない理由をお聞きしているのではなく、やる方法 (手段とそれに必要な知識・時間など)をお聞きしたいのです。 それと、私がもし使うことによる責任を負っているのだとすれば、 同時に使わないことによる責任も負うことにもなりますので、 その点はご勘案頂いた上でご回答頂けると嬉しいです。 私はプログラムにはそれほど詳しくはないので恐縮ですが、 例えば逆アセンブルやメッセージの取得など、 いくつか実現するための手段はあるはずです。 また、「全く見当がつかない」というのは少々語弊がありまして、 引数が分かっている関数もある程度あります。 いくら引数の型の見分けがつかないといっても、 ある程度統一されたフォーマットで作成しているはずですから、 他の関数からの類推は可能だと思っております。 説明不足の点もあり大変申し訳ございませんでしたが、 ご教示のほどどうぞよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

ヘッダーファイルやドキュメントはないのですか? VC++付属のDUMPBIN.EXEや、Dependency WalkerでEXPORTSされている関数名の一覧は簡単にわかりますが。 引数の内容は、ちょっとやそっとではわかりません。 また、もし直接DLLをいじる等してわかったとしても、引数の個数、それぞれのデータサイズくらいまでしかわからないでしょう。

take_777
質問者

補足

ご回答ありがとうございます。 件のEXEファイル・DLLは仕様書もソースファイルもなく、 半ばブラックボックス化しております。 関数名とそれがどのような機能を持っているかに ついては大体分かっているのですが、 それ以上の細かい仕様については見当がつきません。 DLLをいじるには、どうすればよろしいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 引数のある関数と引数のない関数の設定

     お世話になっております。 PHPのプログラミングで関数をつくる際に、引数を渡す関数と引数がない関数がありますが、すでに定義済みの関数のように、引数がある場合と引数がない場合の両方を取り扱うにはどうしたらよいでしょうか? function example ($a) { if ($a == 0 || $a == '') { print '引数なし'; } else { print $a; } } のような関数で、 example(); という感じで引数を入れないと、 Warning: Missing argument … というエラーがでてしまいます。関数を example(''); と呼び出すと大丈夫なのですが。。。 プログラマーにとって基本的なことだと思うのですが、調べてもなかなか出てこないので質問させて頂きました。どなたかわかる方がいたらしたらおしえてください。 よろしくお願いします! }

    • ベストアンサー
    • PHP
  • 関数の引数にクラスを使いたい

    VBにてクラスモジュール「clsTest」を作成し、プロパティ「ID」,「FName」を作成しました。 ASPファイルにてclsTestを作成し、プロパティに値をセットしました。 VBの別のクラスモジュール「clsInset」の関数「dbInsert」に 作成したclsTestを渡したいと考えています。 VBはdllにしてASPから呼び出します。 関数clsInsetの引数にどのように書けば渡せるのかがわかりません。 よろしくお願いします。

  • Perlの関数の引数について詳細

    perlで引数に関することでわからないことがあるのですが、以下の状態で、実行した際に、$aは1が入るのはわかりますが、$bには具体的にどんな値が入っているのでしょうか? 引数が無い場合は、デフォルトで1をセットしたいです。 phpのvar_dump関数のようなものがPerlには存在すれば便利ですが、そういうものはあるのでしょうか? sub test{ my ($a, $b, $c, $d) = @_; } &test(1); あと引数の数を2つは必須にして、残りの引数(3つ目はデフォルトで1つ目の引数と同じ値になり、4つ目以降はデフォルトで1となる 関数のプロトタイプを書きたいのですが、どうですればよいのでしょうか? sub test($$;@  ?のようなものを見たことがあるのですが、どんな意味をしているのでしょうか?結構複雑な引数を持たせることができそうなのですが、詳しく書かれている本などご存知の方教えてください。

    • ベストアンサー
    • Perl
  • 関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。

    関数の引数に引数を持つ関数を入れたい場合はどうすればよいのでしょうか。 function hoge(m, l, p, h) {} (中身は省略しています。) この関数の引数「h」にhtmlを代入しようとしています。 そのhtmlには、WindowOpen()があり、そのまま代入すると「")"がありません」 エラーが発生するのですが、これは無茶なことなのでしょうか。 なんとか解決方法があれば教えていただけませんでしょうか。 「"」の時のように「\"」ではだめだったので行き詰っています。

  • perl system関数 引数 フォルダ

    perlのsystem関数を使って、コマンドを実行したいのですが、 実行ファイルの引数にフォルダを指定すると、うまく動作しません。 以下のように書いています system "実行ファイル フォルダ"; 実行ファイルは .BATファイルで、 指定しているフォルダには複数のテキストファイルが入っています。 perlで書いたcgiファイルは実行ファイルと同じディレクトリにあります。 コマンドからではなく、手動でドラッグ&ドロップすると正常に動作します。 windous7でperlはActivePerlを使用しています。 引数にはフォルダを指定できないのでしょうか? またフォルダを指定できない場合、解決策などはあるのでしょうか? よろしくおねがいいたします。

    • ベストアンサー
    • Perl
  • ShellExecuteExでスペースを含む引数を渡すには?

    すみません。 ShellExecuteEx関数を使用して、コマンドラインで実行していた実行ファイルを起動させたいのですが、実行ファイルに渡す引数にスペースが含まれると、ペースの前までか渡せないのですが、スペースを含む引数を渡す方法を御存知ないでしょうか? (詳細) コマンドライン(cmd.exe)では”○○○.exe 引数1 引数2 引数3(リターン)”で実行しているのですが、ShellExecuteEx("○○○.exe", "引数1 引数2 引数3”, NULL, ・・・・, SW_SHOW); のような形で作成して実行すると、引数1までで○○○.exeが実行されてしまい、スペースを挟んだ引数2以降が渡せていません。 スペースを挟んだ引数を渡す方法を御存知ないでしょうか? すみません。

  • Excelの関数の「引数」とは何と読むのですか。

    Excelの関数の「引数」とは何と読むのですか。 Excelの関数の「引数」とは何と読むのですか。 「いんすう」と読むのですか? それとも「ひきすう」と読むのですか? それとも他の読み方があるのでしょうか。

  • 引数を持つ関数を呼び出す際には、引数を指定する必要

    http://okwave.jp/qa/q8815474.html  以上のプログラム内に 「引数を持つ関数を呼び出す際には、引数を指定する必要がある」 が 当てはまる箇所がありますか?  もしありましたら、どこのプログラム事を言っているのでしょうか? よろしくお願いします。

  • 関数の引数の読み方

    たとえば=DSUM(database,フィールド,Criteria)という関数の読み方なんですが、関数の読み方は調べることができても、引数の読み方まで調べれる方法がわかりません。 そういったHPとか知っている方いらっしゃいませんか? データベース関数につきましては、知っています。

  • 関数の実引数と仮引数の扱いがわかりません

    プログラミング初学のものです。 関数の実引数と仮引数の扱いが、 今一つわかりません。 どっちにどう表記するのか、はっきり理解しておりません。 どうやって理解すればよいのでしょうか。 ちなみに、扱っているはC言語です。 ご経験者の方、どうぞよろしくお願いします。