1

いくつかのコードをリバース エンジニアリングして、共通のパターンに何度も遭遇しようとしていますが、それが何であるかはわかりません。コードは VC++ 2010 でコンパイルされており、表示用にいくつかの外部 CLR コンポーネントを使用しています (ただし、私が知る限り、内部用ではありません)。

オブジェクトを返すいくつかの関数に見られるパターンのいくつかは、次のいずれかです。

  • InterlockedIncrement返品するobj_ptr - 12前に行う
  • InterlockedDecrementonの結果を確認しobj_ptr - 12、結果が 0 の場合は呼び出します*(*(obj_ptr - 24) + 64)(obj_ptr - 24)

デストラクタへの熱心な呼び出しによる参照カウントに基づくGCのように見えます。これが正しいかどうか、誰かが確認できますか、それとも他のシステムですか?

もしそうなら - 私が見ることができる既知のインターフェースはありますか? 値を返す前に Increment を実行する場所が、そのタイプの「新しい」の拡張バージョンであると想定できるかどうかを知りたいです。

また、これに関する詳細情報はどこで入手できますか? これは、標準オブジェクトの vtable の一部にすることはできないようです。これは、先頭の短いポインターであると予想されます。RTTI かもしれませんが、そのレイアウトの良い例が見つかりませんでした。ここで、基本クラスをさらに移動する多重継承は期待していません。

4

0 に答える 0