この質問は、仮想メンバー関数の印刷アドレスに似てい ます
メンバー関数ポインターを使用して、(実行時に) 関数のメモリ位置を取得したいと思います。目標は、それらをログに記録し、事後分析を行い、WinDbg で「ln」を使用して、PDB シンボルを使用してどの関数であったかを取得することです。
ログに記録したい関数にまだ慣れていないため、スタック ウォーキングを使用できません。(そして、何十億もの関数を変更してアドレスを返すことはしたくありません...)。
短いサンプル:
class AClass
{
public :
virtual AFunction(){;}
};
typedef void (AClass::*FxPtr)( void );
[...]
AClass oAClass;
AClass* pSelf = &oAClass;
FxPtr pf = &AClass::AFunction;
DWORD nFctAddress = ???
アドレスを取得する方法を知っている人はいますか?
&(pSelf->*pf)
「エラー C2298: '&' : メンバー関数式へのポインターに対する不正な操作」を与える
メンバー関数ポインターが「奇妙な」構造であることは知っていますが、「これ」を知っているので、潜在的に仮想関数を vtable から検索する方法はありますか?
よろしく、
参照: