いくつかのコードをリバース エンジニアリングして、共通のパターンに何度も遭遇しようとしていますが、それが何であるかはわかりません。コードは VC++ 2010 でコンパイルされており、表示用にいくつかの外部 CLR コンポーネントを使用しています (ただし、私が知る限り、内部用ではありません)。
オブジェクトを返すいくつかの関数に見られるパターンのいくつかは、次のいずれかです。
InterlockedIncrement
返品するobj_ptr - 12
前に行うInterlockedDecrement
onの結果を確認しobj_ptr - 12
、結果が 0 の場合は呼び出します*(*(obj_ptr - 24) + 64)(obj_ptr - 24)
デストラクタへの熱心な呼び出しによる参照カウントに基づくGCのように見えます。これが正しいかどうか、誰かが確認できますか、それとも他のシステムですか?
もしそうなら - 私が見ることができる既知のインターフェースはありますか? 値を返す前に Increment を実行する場所が、そのタイプの「新しい」の拡張バージョンであると想定できるかどうかを知りたいです。
また、これに関する詳細情報はどこで入手できますか? これは、標準オブジェクトの vtable の一部にすることはできないようです。これは、先頭の短いポインターであると予想されます。RTTI かもしれませんが、そのレイアウトの良い例が見つかりませんでした。ここで、基本クラスをさらに移動する多重継承は期待していません。