//============================================================================ // Name : hooking_test.cpp // Author :Attila Body //============================================================================ #include #include #include using namespace std; class C { public: C() = default; virtual ~C() = default; void foo(int bar) { printf("%p -> %d\n", this, bar); } virtual void fooo(int bar) { printf("%p -> %d\n", this, bar); } }; typedef void (C::*cvifptr_t)(int); typedef void (*vifptr_t)(int, int); int main(int argc, char **argv) { C c; cvifptr_t zup = &C::foo; vifptr_t baz = reinterpret_cast(zup); vifptr_t biz = reinterpret_cast(c.*&C::foo); printf("%p\n", reinterpret_cast(baz)); printf("%p\n", reinterpret_cast(biz)); (c.*zup)(123); (*baz)(0x1234, 321); (*biz)(0x4321, 432); return 0; }