0

クラス内のすべての関数を見つけることができるollydbgの方法はありますか?

class A{

int sum();
int powr();
}

そして ollydbg では、どこでブレークするsum()かはわかっていますが、どこでブレークするかはわかりません。power()それを可能にする方法はありますか?

4

1 に答える 1

0

関数が非仮想である場合、それらが同じクラスに属しているかどうかをバイナリから判断する一般的な方法はありません。非仮想関数 (提供した例のように) はコンパイル時に静的にリンクされ、結果の実行可能ファイルでは、関数への単純な呼び出しとして表示されます。そのような関数がどのクラスに属しているかを知る簡単で確実な方法さえありません。

ただし、実際には、リンカはあるクラスの関数を互いに近くに置くことがよくあります。場合によっては、定義された順序と同じになることもあります。しかし、これは保証されているわけではなく、そうでない場合も多くあります。

仮想関数について話している場合、これはまったく別の話です。仮想関数へのポインターは「仮想メソッドテーブル」と呼ばれる構造に格納する必要があるためです。この構造体は (クラスごとに 1 つ) バイナリのどこかに定義する必要があり、それを見つけることができれば、仮想メソッドとそのポインターのリストを取得できます。

于 2012-04-28T13:49:14.213 に答える