- 締切済み
AB2つのアプリが持っている変数をデバッガCが識別する方法
A,Bという2つのアプリが起動しています。 デバッガCも稼動しています。 A,B共にiという変数を持っています。 普通は&iで識別できますが、まれに&iが同一になる場合があるので、確実に識別できる方法を教えてください。 その方法としてプロセスIDを&iと併用する方法を考えたのですが、AのプロセスIDとBのプロセスIDを取得すれば完全な識別はできますか?
- みんなの回答 (10)
- 専門家の回答
みんなの回答
- PED02744
- ベストアンサー率40% (157/390)
http://okwave.jp/qa3281655.html のAno.6に対する回答に「これから作るデバッガ・・・」という記述があるんですが、 デバッガを作る話ではないのですか?(^-^; さすがに、ここまでくるとよくわからないので、スルーすることにします。 なぜ、そこまでプロセスIDにこだわるのかわかりませんし。
- mikaemi
- ベストアンサー率50% (33/65)
彼が答えないので、推測ですが、「スレアタ」は「スレッドのアタッチ」だと思われます。違うのかなぁ。。。彼の考えていることがよくわからんので間違ってるかもしれませんけど^^
- mikaemi
- ベストアンサー率50% (33/65)
こんな人に丁寧に回答してあげる、人のいい方がたくさんいるんですね。 わたしは答えていてアホらしくなりましたけど^^ デバッガ作るんじゃなかったのか。。。作るといってたのに。 「作りたいのはデバッガではありません」はワロタw
- shirayukix
- ベストアンサー率43% (90/207)
> プロセスIDとHWNDとフックしてスレアタして、char *p;でpの値を&iにすればデバッガからiの値を見れるんじゃないんですか? スレアタって何ですか? 補足を求めます。
- jacta
- ベストアンサー率26% (845/3158)
> その環境について、2者のどちらになるかの定義は複雑でしょうか? > 例えばWin98なら識別不能、Win2000とWinXPなら識別可能といった単純なものですか? そんなに簡単ではないと思います。 MMUのない環境で、かつ(無結合のものも含めて)すべてのシンボル情報が渡されているなら、実現可能なデバッガを実装することは原理的に可能です。MMUがある場合でも、特権モードで動作するデバッガを実装すれば、おそらく何でもありです。 Windowsという制約がある場合でも、QEMUのようなエミュレータをカスタマイズするなどして、あるいは専用のハードウェアと協調するようなデバッガを実装することは可能です。 上記は、目的にあうデバッガを実装できるという話であって、既存のデバッガを使って出来るかどうかは知りません(環境も分からないので)。 ちなみに、「プロセス」とか「プロセスID」といってもOSによって意味が異なりますし、デバッガはさらに異なります。 MES(http://mes.sourceforge.jp/mes/)なんかだと、それなりのデバッガさえあれば、自由にアドレス関連の情報を参照できそうな雰囲気です。 ところで、続きの質問というのは反則ですので、必要な情報はその都度すべて記載してください。
- PED02744
- ベストアンサー率40% (157/390)
ANo.4さまへ 私も過去の質問は読んだんですが、それを読んでると 初めは「動作中のアプリケーションを乗っ取るトロイの木馬を作りたい」 としか読めなかったのですが、途中から「デバッガ」の話が出てきたので、 「違うみたいだ・・」と思い直し(笑) だとすると、「作りたいのはデバッガなのか?」そうすると 質問内容とスキルが天と地ほどの差があるような気がする。。。 ・・・と、謎だらけなのですが、とりあえずこの質問に関してのみ 回答することにしました。 回答内容がご質問者さんの意向に合っているかどうかはわからないのですが(笑)
お礼
作りたいのはデバッガではありません。 やりたいのは確実に識別したいということだけです。
- shirayukix
- ベストアンサー率43% (90/207)
同じ質問者さんの質問にリンク。 続き物みたいなので、ここに最初に来た人のために。 ブロックの外で関数をコールできないか http://okwave.jp/qa3281624.html 変数のアドレスの値 http://okwave.jp/qa3281655.html
- PED02744
- ベストアンサー率40% (157/390)
質問の意味がよくわからないのですが、 [Aというアプリ]--+--[Cというデバッガ] [Bというアプリ]--+ こんな風にCというデバッガがA/B2つのアプリのデバッグを同時に実施している ということでしょうか? もしそうなら、デバッガの作りにもよりますが、 プロセスIDはどっちもデバッガ自身になっている可能性があります。 スレッドIDで区別することになるかもしれませんね。 私なら、単純にデバッグ用のログ出力に、アプリケーション名も付加してログに出力するようにします。 Aアプリ側 static char* app_name="A あぷり"; Bアプリ側 static char* app_name="B あぷり"; などと定義しておいて、 デバッグ用のログ出力で、 printf("%s:%d\n", app_name, &i); をつけるようにしておけば、ログには[Bあぷり:iの値]が出力されますし、 デバッガで確認する場合には、&i だけではなく、app_nameの値も確認すればわかるとおもいますし。
補足
スレッドIDはiの区別に使えないと思いますよ。 アプリが2つあれば、スレッドIDも一致する可能性があると思います。 [Bあぷり:iの値=8] というログなら、プロセスIDと&iで識別できるかの回答が、 この方法で識別可能かということにも共通するんじゃないでしょうか?
- jacta
- ベストアンサー率26% (845/3158)
> AのプロセスIDとBのプロセスIDを取得すれば完全な識別はできますか? 完全に環境に依存します。
補足
その環境について、2者のどちらになるかの定義は複雑でしょうか? 例えばWin98なら識別不能、Win2000とWinXPなら識別可能といった単純なものですか?
- shirayukix
- ベストアンサー率43% (90/207)
> 普通は&iで識別できますが、まれに&iが同一になる場合があるので、確実に識別できる方法を教えてください。 ありません。 仮にできたとしてもアクセスできないので意味がありません。 > その方法としてプロセスIDを&iと併用する方法を考えたのですが、AのプロセスIDとBのプロセスIDを取得すれば完全な識別はできますか? できません。 仮にできたとしてもアクセスできないので意味がありません。
お礼
プロセスIDとHWNDとフックしてスレアタして、char *p;でpの値を&iにすればデバッガからiの値を見れるんじゃないんですか?
お礼
単純ではないのですね。 それならプロセスIDと&i以外の方法で実現させたいのですが 他の方法も思いつかないしプロセス空間を教えてもらえないので プロセスIDと&iによるそれなりに正確な変数識別方法を使うことにしました。 続きの質問のつもりはありませんが、過去の質問を見れば質問者が何をしようとしているかがうかがえる状態になってしまってますね。