1

我试图对一些代码进行逆向工程并多次遇到一个常见的模式,但我不确定它会是什么。该代码是使用 VC++ 2010 编译的,并使用一些外部 CLR 组件进行显示(但据我所知,不适用于任何内部组件)。

我看到的一些模式是在一些返回对象的函数中,它们要么:

  • InterlockedIncrementobj_ptr - 12返回之前做一个
  • 检查InterlockedDecrementon的结果obj_ptr - 12,如果结果为 0,则调用*(*(obj_ptr - 24) + 64)(obj_ptr - 24)

它看起来像一些基于引用计数的 GC,并急切地调用析构函数。任何人都可以确认这是否正确,还是其他系统?

如果那是正确的 - 我可以看到一些已知的界面吗?我想知道我是否可以假设在返回值之前进行增量的地方可以假设为该类型的“新”的一些扩展版本。

另外,我在哪里可以找到有关此的更多信息?看起来这不能是标准对象的 vtable 的一部分,我希望它是前面的短指针。也许是 RTTI ......但我找不到任何关于它的布局的好例子。我不希望这里有任何多重继承会使基类更进一步。

4

0 回答 0