Linux プログラムの機能をフックしようとしています。基本的に、mprotect で関数の保護を解除して検索し、元の関数アドレス内に jmp を配置して、関数フックにリダイレクトします。
ただし、元の関数をコピーして、変更された関数が必要ないときに呼び出すことができるようにしたいと考えています。私はこのような一種のフックを持っています
int CallHookedFunctionFoobar(int param1, int param2)
{
if (g_somevariable)
Foobar_original(param1, param2);
else
Foobar_modified(param1, param2);
}
だから私の質問は... どうすれば関数のサイズをバイト単位で知ることができるので、動的に割り当てられたバッファに memcpy() して実行することができますか?
短い逆アセンブラを埋め込んで、RETN オプトコードが見つかるまでオペコードを解析することを考えましたが、まったくすべてのケースで機能するかどうかはわかりません (たとえば、複数の RETN が同じ関数に存在する場合:[)
これを実行したいもう 1 つの理由は、同じ関数が別のライブラリにフックされている可能性があるためです。