私はWindows実行可能ファイルをリバースエンジニアリングしているところです。実行可能ファイル(別のスレッド、独自のスタック)に挿入するコードから、使用したいクラスを見つけました。メソッドアドレスとメンバー変数の構造を指定して、このようなクラスを宣言するにはどうすればよいですか?
たとえば、コンストラクター@0x4012D30と関数doTheMario@40125D4を持つfooというクラスを見つけたとします。また、3つのDWORDのプライベートデータを保持していることも知っています。どちらのメソッドも_thiscallsなので、コードでそのようなクラスを宣言します。
class GuessedFoo {
private:
int bar;
char *cafebabe;
float deadbeef;
public:
GuessedFoo(int a, int b);
void doTheMario();
};
さて、これは完全にダンディなクラスですが、コンパイラ/リンカにクラスメソッドを前に述べた2つのアドレスにバインドさせる方法はありますか?もちろん、使用する必要のあるすべてのメソッドに対してstdcallをthiscallに変換するasmラッパーを記述し、クラスの代わりに構造体を使用することもできますが、より良い方法が必要です。
現在はgcc/g ++を使用していますが、VC ++に切り替えることができます(gccのインラインasmはとにかく頭痛の種になるため)。