1

2つの実行可能ファイルがあり、どちらも手動で作成したものです。それぞれ1.exeと2.exeと呼びます。まず、両方の実行可能ファイルは、Microsoftコンパイラを使用してMSVS2010によってコンパイルされます。1.exeにメッセージを入力し、1.exeにそのメッセージを2.exeに挿入させたい(おそらく何らかのパラメーターとして)ので、1.exeがメッセージを挿入した後に2.exeを実行すると、 2.exeはそのメッセージを表示します。

-これは不正使用ではありません。これらの実行可能ファイルは両方とも私が作成したものです。

私にとって大きなことは:

  1. 2.exeで簡単にアクセスできるように、メッセージ/指示を2.exeのどこに配置するか
  2. 2.exeは実際にこれらのパラメータ(メッセージ)をどのように使用しますか。

私はC++コードをインジェクションとして単純に使用することはできないことを完全に理解しています。それは、実行時にコンパイラーによって生成/変換できる裸のアセンブリでなければなりません(間違っている場合は修正してください)

私が考えていたいくつかの解決策:

  1. 2.exeでパラメーターを必要とする標準関数(メッセージボックスの表示など)を作成し、これらのパラメーター(メッセージ)を関数に挿入しますか?
  2. 1.exeで何らかの構造を作成して、1.exeが挿入する値を保持します。その場合、どのように実行しますか?これらのパラメーターを入れるオフセットをハードコーディングする必要がありますか?

-スプーンフィードは期待していません。プログラミングのこの側面を十分に理解したいと思います。PEファイル形式を読み、アセンブリ(MASMアセンブラー構文)をしっかりと理解しており、さらに多くのことを学びたいと思っています。お時間をいただきありがとうございます。

4

2 に答える 2

4

この種のことをする必要のあるプログラマーはほとんどいません。あなたはそれなしであなたのキャリア全体を行くことができます。私が最後にやったのは1983年頃です。

私の記憶が正しければ、2.exeに次のようなアセンブラモジュールを含めました(構文を忘れました)。

.GLOBAL TARGET
TARGET  DB 200h  ; Reserve 512 bytes 

次に、1.exeは2.exeを開き、シンボルテーブルでグローバルシンボル「TARGET」を検索し、ファイル内のどこにあるかを特定し、必要な512バイトを書き込んで、ファイルを保存します。これはライセンススキームのためでした。


https://stackoverflow.com/users/422797/igor-skochinskyからのコメントは、その際にシンボルテーブルを使用しなかったことを思い出させてくれました。それは別のOSでした。この場合、文字列をスキャンしました。

于 2012-11-28T04:07:40.207 に答える
0

あなたの説明から、コマンドラインで値を渡すだけで十分なようです。

Win32GetCommandLine()関数は、に渡すことができる渡された値を提供しますMessageBox()

別の実行中のインスタンスが必要な場合は、Windows メッセージ ( WM_COPYDATA) などの別の形式の IPC が機能します。

于 2012-11-28T13:20:04.683 に答える