関数コールを監視しログに出力させるには?

解決


円屋  2004-10-02 21:45:47  No: 54623

初めまして、円屋です。何分VC++を初めて間もないので伝わりにくい部分が
多々あると思いますがお付き合いください。

現在仕事でVC++5.0 OS:NTを使い開発を行なっています。
最近、ログ解析を行なっており作業の効率化が図れないか模索中です。
当然関数コール時にはログを出力しているのですが、全ての関数でログを出力
している訳ではありません。その為関数を追う事に時間が掛かってしまいます。

そこで関数コール監視用のEXEなどが作成できないか考えたのですが、そのような
事は可能でしょうか?
どなたかご存じの方がおられましたら宜しくお願いします。


岡田 之仁  2004-10-03 07:06:35  No: 54624

関数と称されるものは、自作と言うか、開発されたソフト中の関数
と言うことでしょうか?

そうであれば、事実的には、必要な箇所にログ出力用の関数を埋め
込む必要があると思います。

ただし・・・BoundChaker for VC++ と言うソフトがありますので
それを利用すれば、可能ですが、確か20万円強の価格です。
現時点では、DevPartner for VC++ 6.6 と言う商品です。
私もたまたま保有しておりますが・・・

日本コンピュウェア社から販売されているものです。
評価版がダウンロード可能です・・・
http://www.compuware.co.jp/products/devpartner/dpstudio6.htm

しかしながら、現在の環境がNT+VC5 と言う古い環境ですので、最近
の最新のツールが使えるかどうか・・・

ご参考までに・・・

以上。


円屋  2004-10-03 08:57:19  No: 54625

岡田之仁様回答ありがとうございます。
評価版があるのはありがたいです。
早速試してみます。
しかし・・どうゆう仕組みなのでしょう?
そのようなAPIがあるのでしょうか?
自分で作れないにしても勉強の為に仕組みだけでも
知りたいと思います。ご存知な方がおられましたら
宜しくお願い致します。


岡田 之仁  2004-10-03 10:03:06  No: 54626

今もなお、その方法が進化・適用されているかについては
知りませんが・・・

昔、マイクロソフトが自社のOSのパッチを出すにあたり
開発された技術の中に、APIHOOKと言うものがありました。
実際には、これを悪用してウィルスが作成されるように
なった経緯もあり、マイクロソフトでは、それが行なえな
い防御を新たに導入するハメになったのですが・・・

デバイスドライバーを作成する技術者で、Win16の仮想86
から携わっていた方は、恐らく見知っておられるとは思い
ますが、それに派生・付随する機能だと言えます。

私自身、当時のAPIHOOKを利用したドライバーやソフト開発
を請負ったことがありますが・・・当時の性能(ハードも
ソフトも)では、全てのAPIをHOOKし、ロギングさせた日に
には、それこそハングするか・・・と言うような遅さでした。
ある欲しい機能に限定さえすれば、なんとか動いたものです。

デバッガーの類では、今もダウンロード販売とかで、APIを
HOOK監視し、ロギングするものが出ています。
サイトのURLはどこへ行ったか・・・

現実的には、マイクロソフトも開発に使用しております、
NuMEGA社のSoftICEが有名でしょう・・・

その商品も日本コンピュウェア社から販売されていますので
ホームページでご確認下さい。

以上。


岡田 之仁  2004-10-03 10:07:14  No: 54627

先の情報でのURLは・・・

http://www.datarescue.com/idabase/

ここのデバッガーは、エンジンのみでもライセンス(OEM)
していたはずです・・・

英語に堪能であれば、除いて下さい。

※  現時点でのサイトの内容は、未確認です。
    あしからず・・・

以上。


岡田 之仁  2004-10-03 10:08:16  No: 54628

漢字変換ミス・・・

誤)除いて
正)覗いて

以上。


Ban  2004-10-03 13:00:05  No: 54629

BoundsChecker は今でも単体売りしてます。
昨年購入してますが10万弱くらいです。

こいつのトレースはコンパイル時にコードを埋め込んでるようです。
VC の IDE に追加される専用ビルドを行うと埋め込み内容の
メッセージが出ます。

基本的に、実行モジュール時点では関数とか言う概念は
なくなってますので、対象が
「関数呼び出し=アセンブラの call 命令」を解析とか
「OS のシステムコール」をフックとかでもないかぎり、
情報を埋め込むなりデバッグ情報やマップ情報を参照するなり
しないと、ユーザ作成の関数はどうのしようもないはずです。
# inline 展開された時点で普通はほぼお手上げ?

多分、ずばりの API はないと思いますし、あっても
稼動ログを取るのは厳しいと思います。

ちょっと用途は外れますが、VC6 とかだとプロファイラとか
ついてたりして(エディションによります)、実行パスの
確認にもけっこう便利だったりします。このあたりと、
あとはデバッガを使いこなすのが結果的には無難に早そうに思います。


円屋  2004-10-05 02:38:57  No: 54630

岡田之仁様、Ban様回答ありがとうございます。
どうも自分では簡単に作れないようですね。
またリスクが大きそうですし。
地道にログを追っていくかないようです。
まァ、そこは早く慣れるしかないと言う事ですね。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加