まず、dllを注入したくありません。 WriteProcessMemory()を使ってコードを注入したい(これが可能な場合でも)。私はすでにReadProcessMemory()を使用していましたので、書き込みは大したことではないと思います。
まあ、TargetProgram.exe + D78C612
での関数があるとしましょうとのは、それがこのように呼ばれることができましょう:C++:関数を呼び出すためのコードインジェクション
push eax
push [esp+08]
push edx
push 00
push TargetProgram.exe+AF76235
push 04
call TargetProgram.exe+D78C612
がどのように正確に私はWriteProcessMemory()でこれを達成するでしょう ?
重要なものを上書きせずにコードを挿入できるセクションはどこにありますか?そして、最も重要なことに、私はどのように関数を呼び出すでしょうか?
アクティブなルーチンで自分のコードにジャンプして、ジャンプして後で削除しますか?しかし、どのようにルーチンを見つけるだろうか?
多くの質問があり、私はどのように始めるべきかわかりません...あなたが私を助けてくれることを願っています。 :)
時間があれば、私は実際には関数呼び出し注入のサンプルコードを見たいと思います。
私はOPと同様の問題がありますが、私はあなたの1st WriteProcessMemory呼び出しを取得しません。 local_addressとして私は自分の関数のアドレスを渡すことができますが、次の引数でその長さを渡すことはできません。単にコンパイラがそれをまだコンパイルしていないので、それがどれだけ大きいかわからないからです。 WriteProcessMemoryはプロセスから関数/コードを書くのに適していますか?編集:またはC + +の代わりにアセンブラの唯一のキー書き込み関数(私はそれを数えることができます)ですか? – Kra
@Kraほとんどの場合、ジャンプ先アドレスが壊れるので、C関数を別のプロセスにコピーすることはできません。再配置を修正するか、再配置可能なコードを作成する必要があります。いずれの場合も、アセンブリ言語を使用する必要があります。関数コードの長さに関する質問に答えるために、最適化を無効にしてf1()とf2()の2つの関数を書くことができます。次に、f2のアドレスからf1のアドレスを減算し、f1の長さを得ることができます。しかし、関数のサイズはここではあなたの問題の中で最小です。 – Max
ポイントを得ました。ありがとう。 – Kra