我试图对一些代码进行逆向工程并多次遇到一种常见的模式,但我不确定它是什么。该代码是使用VC ++ 2010编译的,并使用一些外部CLR组件进行显示(但据我所知,不是针对任何内部组件)。
我看到的一些模式在某些函数中返回一个对象是:
InterlockedIncrement
之前obj_ptr - 12
执行InterlockedDecrement
obj_ptr - 12
上*(*(obj_ptr - 24) + 64)(obj_ptr - 24)
的结果,如果结果为0,请致电{{1}} 它看起来像一些基于引用计数的GC,急切地调用析构函数。任何人都可以确认这是否正确,还是其他系统?
如果那是对的 - 我能看到一些已知的界面吗?我想知道我是否可以在返回之前假设这些地方正在进行增量计算,可以假设它是某些扩展版本的新版本'对于那种类型。
另外,我在哪里可以找到更多相关信息?看起来这不能成为标准对象vtable的一部分,我希望它在前面是一个短指针。也许是RTTI ...但我找不到其布局的任何好例子。我不希望这里有任何多重继承,这将进一步推动基类。