提案する方法は正常に動作します。
ターゲットプロセスにdllを注入し、dllを注入したプロセスからターゲットプロセス内のそのdll内の関数のアドレスを取得したようです。
ターゲットプロセスにdllを注入したプロセスにdllがロードされていて、ターゲットプロセスにリモートスレッドを作成してターゲットプロセスでターゲット関数を実行させたいと思っています。
あなたが注入したdllは、注入プロセスのときと同じターゲット・プロセスのアドレスにロードされないことがあるので、注入プロセスの関数でGetProcAddressを呼び出すことで得られるアドレスを単純に使用することはできません。
HMODULEはDLLのベースアドレスです(詳細はthis answerを参照)。だから、あなたの注入プロセスでdllのHMODULEを取得し、あなたの関数上でGetProcAddressによって返されたアドレスからそれを引き出すことができます。ターゲットプロセスの注入dllのHMODULEをこのオフセットに追加して、ターゲットプロセスの注入されたdll内のターゲット関数のアドレスを取得することができます。この関数が正しいシグネチャを持っていると仮定すると、スレッド関数として呼び出しに渡してリモートスレッドを作成し、ターゲットプロセスでターゲット関数を実行しています。
詳細はthis answerで説明します。
ありがとうございます。私は別の問題があります。私がこのようにしているとき - > http://wklej.org/id/700802/私は間違った和を得ています。私はそれを好きにしなければならない - > http://wklej.org/id/700803/ ?? – Blood
@Blood:これらのことはどちらも意味をなさない。オフセット(ベースからファンクションへ移動する)を追加しましたが、それを減算するのを忘れました(最初にベースを取得する)。私の答えを見てください。あなたは両方をしなければならないので、彼らはキャンセルするだけで、気にしないかもしれません。 –
David、それが取り消す唯一の時間は、dllが両方のプロセスの同じベースアドレスにロードされている場合です。それ以外の場合は私の答えが働き、あなたのことはありません:)。 –