お世話になっております。
別のEXEに呼び出し側の関数を実行させるようにしたいのですが、
そのようなことは可能でしょうか?
開発環境は VisualStudio2005 です。
よろしくお願いします。
DLLで仲介しないと無理でしょ。
データは共有メモリに一旦コピーして渡すとかしないと。
どんなに頑張ってのアプリAの変数や関数は
その実行しているアプリAにしかアクセスできないから。
ハック技術な話題ですね(ニヤリ
対象Exeに偽アダプタDLL注入して、対象Exeでの
WinAPI呼び出しが実は、自Exeの某関数呼び出しにすり替わる。
とか如何ですか?w
すみません。やっぱり真面目に回答します。。。
質問内容がアバウトなので、出来るか否かであれば「YES」。
実現方法は色々あります。
wclrp氏のDLLを介入させる方法。
RPCみたいに通信を利用する方法。
共有メモリとパイプ使うとか。。。
色々あります。
EXE自体に外部コール可能な関数を置けませんでしたっけ。。。
Belution.comの過去ログにありそうなんですけど・・・今は見れない悲しき定め。
dllと同じようにできますが(実際に呼べるかどうかは試したことはありません)
別のexeからとなると、プロセス空間が違うので
結果的に呼び出すのは無理なんじゃないかと
>dllと同じようにできますが(実際に呼べるかどうかは試したことはありません)
EXEをDLLのようにロードする実験をやったことがあるので結果を書いて見ます。
結論から言うと、殆ど実用になりません。
具体的には
・IATが展開されない。
>Win32API他DLLに頼る動作を記述できない。
>自前でIAT展開すれば恐らくは可能だが、その価値があるかどうか。
・セクション再配置が行われない。
>DLLの場合、基本的なベースアドレスを設定し、競合した場合はローダに
>よって再配置され、アドレス直地も修正される。
>しかし、EXEだとそれが行われず、ベースアドレスで競合するとそこで失敗。
>EXEに再位置情報を埋める設定でコンパイルしても同様。
となります。
ベースアドレスを読み込み元EXEと被らないようにする事でロード自体は出来ま
すが、環境によって先に競合アドレスに何か読み込まれていると失敗します。
IATが使えない点は、プロセス間共有に設定したセクション内の変数にAPIのアド
レスを予め書き込んでおくことで有る程度は操作できますが、非常に不便でし
た。
とりあえず、トピックとずれるのでここまでにしておきます。
トピックの件ですが目的が良く分かりません。
・別EXEは修正可能なのか。
・呼び出し側EXEの関数で行う処理はどういうものなのか。
で方法は変わるかと思います。
別EXEが修正不能な場合は正攻法では不可能です。
別EXEの製作が自分でなければ色々厄介ですし、ライセンスなどによってはこの
行為はお勧めできません。…やってる人も私含めそれなりに居るので、しかるべ
きところで聞けば回答は得られますが。
自分で作ったがソース紛失などで修正不能になった場合、やはりこういう方法だ
と結果が不安定になるのと無駄な技術力が居るので、お勧め出来ません。
修正可能ならば、大方の処理はプロセス間通信で事が済むかと思うので、方法
の再検討をお勧めします。
プロセス間通信で事が済まない場合は、状況次第なので詳しく書いたほうがい
いかと思います。
スレ主さんの発言が無いうちに横やり、ごめんなさい
麩 さんはいろいろご心配いただいている、かなりの経験者のかたとお見受けしますが
スレ主さんは、特に気にしている範囲にいないかたと思われます
数十行のプログラミングに一喜一憂している、方ではないでしょうか
自作したEXEが2本ほどあって、今自作している B.EXEが
以前作成した、A.EXEの関数を利用したいと思っている程度ではないでしょうか
わたしは、入門時いきなりDLLの作り方など知らずのスレ主さん
と同等の質問をこの掲示板で質問して、かなり、けなされた経験があります
スレ主さんのご回答を待って、温かく、回答してあげてください
雑談的、内容で申し訳ございません
がーん。googleのキャッシュに残ってたのはいいんですけど、なんか自分が発言して
た・・・(/ω\)こっぱみじん
URL長いし切れそうですしスレ主さんの要望次第なので、再登場されるまで放置・・