【发布时间】:2011-12-03 08:29:07
【问题描述】:
C++中构造函数的real签名是什么?
背景: 我尝试挂钩 dll 的内部函数。我有 pdb-Debug Files 并且能够获得函数的确切位置,包括它的未修饰名称。 函数如下:
protected: __cdecl ClassName::ClassName(bool * __ptr64) __ptr64
所以它显然是一个构造函数。 我尝试了 void function(void * pThisPointer, bool * pBoolPointer),但由于程序在简单地转发调用后崩溃(其他函数以这种方式工作正常),我认为我的签名是错误的。
你知道构造函数使用什么签名(很可能不是虚拟的)吗? 或者您有什么其他想法可能会出错?
编辑: 我使用 x64 和 Visual Studio 2010 编译器,目标编译器应该类似于 Visual Studio 编译器,因为它是一个 microsoft dll。
【问题讨论】:
-
构造函数不是常规函数;无论你偶然发现什么方法,它们都可能包含或不包含许多魔法。
-
其实是__thiscall。更神奇的是调用基本构造函数并在最后交换 vtable 指针。自己不容易做到的事情。
-
我不需要完全自己调用它。我只是想“包裹”它。所以当你说 __thiscall 时,这是否仅仅意味着我必须添加 void * thisPointer 作为第一个参数?
标签: c++ constructor hook reverse-engineering signature