これは私にとって初めてのことであり、今ではアイデアが不足しているため、皆さんが私を助けてくれることを本当に願っています.
私は数時間答えを探しましたが、実際に機能する答えを見つけることができませんでした.
実行中のプロセスにコードを直接挿入したいと考えています。はい、あなたはそれを正しく読みました。別のアプリケーションにコードを挿入しようとしていますが、信じられないかもしれませんが、これはその機能を拡張するためだけのものです。
Windows で Visual Studio 2012 Express Edition を使用しています。
次のコードがあります。
__declspec(naked) void Foo()
{
__asm
{
// Inline assembly code here
}
}
__declspec(naked) void FooEnd() {}
int main()
{
cout << HEX(Foo) << endl;
cout << HEX(FooEnd) << endl;
cout << (int)FooEnd - (int)Foo << endl;
// Inject code here using WriteProcessMemory
return 0;
}
読みやすさを維持するためにほとんどのコードは削除されていますが、リクエストに応じて他の部分を投稿できます。
出力は次のとおりです。
0x010B1000
0x010B1010
16
結果のサイズは実際には正しくありません。関数は正しい順序でコンパイルされます (/ORDER を使用して確認してください) が、コンパイラはサイズを拡張する各メソッドの後に 0xCC (int 3) バイトの束を追加するため、実際の (有用な) 数値を取得できません。実際の実行可能コードを含むバイト数。
別のスタックオーバーフローの質問では、「エディット コンティニュ」を無効にするとこれらの余分なバイトがなくなると言われていますが、何があってもうまくいきませんでした。
また、デバッグの代わりにリリース セットアップを使用してみました。一連の最適化設定を変更しましたが、どれも効果がありませんでした。何が解決策になると思いますか?明らかな何かが欠けている可能性があります。
とにかく、これは(あなたの意見では)関数の長さ(読みやすさ、信頼性、使いやすさ)を取得するための最良の方法ですか?
あなたが助けられるようにするために、私がしなければならなかったすべてを説明したことを願っています. さらに質問がある場合は、お気軽にコメントを残してください。
あなたの時間と努力に感謝します。